关于在IDEA中遇到 无法从静态上下文中引用非静态方法
静态方法跟着类加载而加载,但是成员方法只有在创建对象时才能使用,所以当使用静态方法时,非静态方法不一定创建(加载)了,因此无法从静态方法中引用非静态方法。静态成员变量与其类似,在赋值时,静态成员变量不能对成员变量进行赋值。
代码块
代码块:由若干条Java语句组成,并且用一对大括号括起来的结构,叫代码块。
构造代码块内部属于局部变量,在里面定义变量,就是一个仅在构造代码块中生效的局部变量。
显式赋值和构造代码块赋值按照书写顺序进行赋值。创建对象后,先对变量默认初始化,然后构造代码块和显式赋值的代码只会执行一次,并不会执行多次。
**代码块跟着对象的创建而执行,在同一个类中,构造代码块总是先于构造器而执行。**
静态代码块随着类加载的过程而执行,静态代码块可以看作在类加载的过程中,会自动调用的静态方法!用于给静态成员变量赋值!
**静态成员方法只有调用才会执行,并不是在类加载过程中就执行。**
访问权限修饰符
访问级别由严格到宽松的顺序为:
1.private:只能在同一类中才能够访问,私有的,外面谁都不能用。
2.缺省(默认):同一包中的子类或者其他类能够访问,同包中都可以使用。
3.protected:不同包的子类能够访问。
4.public:不同包的其他类可以访问。
对于类的访问权限控制,只有public(对其他任意类都可见)---(缺省)不写任何关键字,表示同包下的其他类可见。
类中结构的访问权限修饰符则为以上4种。
***局部变量不能使用访问权限修饰符***
类的访问权限总是大于类中结构的访问权限
关于类加载、static执行顺序
访问类的静态成员,一定会出现该类的加载。
在类加载时,就已经触发了静态成员变量的默认初始化,然后按上下顺序对静态变量或者静态代码块来执行显式赋值或者代码块赋值。
普通成员变量只有在创建对象时才会创建并执行。