static关键字;变量;代码块

部分参考自  关于 static 关键字的一篇很好的文章:https://www.cnblogs.com/dolphin0520/p/3799052.html

1)变量:

public class ValiablesDesc {
    
    /*
     *     定义类变量,又称静态变量:
     * 1)在类中用static关键字声明,但是它在方法、构造器或者块之外;
     * 2)静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化
     * 3)不能在方法、构造器内成名静态变量;(static是不允许用来修饰局部变量。不要问为什么,这是Java语法的规定)
     * 4)static成员变量的初始化顺序按照定义的顺序进行初始化。
     */
    public static String name = "郭晓锋";
    
    /*
     *     定义实例变量,又称成员变量(instance valiable):
     * 1)在类中声明,但是它在方法、构造器或者块外;
     * 2)实例变量可以用访问描述符;
     * 3)实例变量有默认值。数字的默认为0,boolean的默认为false,对象引用默认值为NULL
     * 4)非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
     */
    public String password;
    
    /*
     * Mutator Methods:调用方法后对象发生改变,例如StringBuilder,最常见的是字段的set方法
     * Accessor Methods:调用方法后对象没有改变,例如String,最常见的是字段的get方法
     */
    public void fuck(String password) {
        /*
         *     定义本地变量,又称局部变量(local valiable)
         * 1)在方法、构造器或者块中使用,在方法、构造器或者块进入时被创建,一旦退出该变量就会被销毁
         * 2)局部变量没有默认值,因此本地变量必须被声明并且在第一次使用前要给它赋值
         */
        String youA = "叼";
        
        /*
         * password:显式参数(explicit parameter)
         * youA:隐式参数(implicit parameter)
         *     或者:this.password
         *     其实,想想就知道,这个东东最常用于构造器
         */
        String concat = this.password + youA;
        
    }

    // Accessor Methods
    public String getPassword() {
        return password;
    }
    // Mutator Methods
    public void setPassword(String password) {
        this.password = password;
    }
    
    public ValiablesDesc(String password) {
        super();
        //左边的password:implicit parameter;右边的password:explicit parameter
        this.password = password;
    }
    
}

 2)代码块

/*
 * 代码块:在Java中,使用{}括起来的代码成为代码块 
 * 
 * 普通代码块:类中方法的方法体
 * 局部代码块:局部位置,用于限定变量的生命周期 
 * 构造代码块:在类中的成员位置,用{}括起来的代码。每次调用构造方法执行前,都会先执行构造代码块。
 * 静态代码块:在类中的成员位置,用{}括起来的代码,只不过它用static修饰 (注意,不在任何方法体内)
 * 同步代码块:使用synchronized(){}包裹起来的代码块
 * 
 * 静态代码块、构造代码块、构造方法的执行顺序:静态-》构造代码块-》构造方法
 * 静态代码块:只执行一次
 * 构造方法:每次调用构造方法都执行 
 */
public class Main2 {

    public static void main(String[] args) {
        
        // 局部代码块
        {
            int x = 10;
            System.out.println(x);
        }
        
        {
            int y = 20;
            System.out.println(y);
        }
        
        System.out.println("---------------");

        Code c = new Code();
        System.out.println("---------------");
        
        Code c2 = new Code();// 静态只执行一次
        System.out.println("---------------");
        
        Code c3 = new Code(10000);
    }

}

class Code {
    // 静态代码块
    static {
        int a = 1000;
        System.out.println(a);
    }
    
    // 构造代码块
    {
        int x = 100;
        System.out.println(x);
    }

    // 构造方法
    public Code() {

        System.out.println("code");
    }

    // 构造方法
    public Code(int a) {
        System.out.println(a);
    }

    // 构造代码块
    {
        int x = 200;
        System.out.println(x);
    }

    // 静态代码块
    static {
        int b = 2000;
        System.out.println(b);
    }
}

END!

原文地址:https://www.cnblogs.com/ericguoxiaofeng/p/9037880.html