static
非静态的可以访问静态的; 静态的不能访问非静态的。
静态的和类相关; 非静态和对象相关。
static是不允许用来修饰局部变量
- 首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕之后,再去看父类有没有构造代码块,如果有就执行父类的构造代码块,父类的构造代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕之后,它接着去看子类有没有构造代码块,如果有就执行子类的构造代码块。子类的构造代码块执行完毕再去执行子类的构造方法
访问静态成员的方法: - 类名.静态成员;
- 对象名.静态成员;
用来修饰属性:(慎用)
- 称呼的改变
如果使用static关键字修饰了属性,对于这个属性称之为类变量,也叫作静态变量。
如果没有使用static关键字修饰的属性,对于这种属性称之为实例变量,也叫作非静态变量。 - 对属性本身的改变:
静态变量的数据是共有的(所有的对象所共有的)
非静态变量的数据是私有的(每个对象都有自己的数据) - 使用方式:
静态变量–>类名.静态变量名(静态的使用方式)
非静态变量—>先创建对象,通过对象调用
用来修饰方法:(使用方式)
- 称呼的改变:
如果使用static关键字修饰了方法,对于这个方法称之为类方法,也叫作静态方法。
如果没有使用static关键字修饰的方法,对于这种属性称之为实例方法,也叫作非静态方法。 - 使用方式的改变,两种情况:
- 在类的外部使用:
类名.静态方法名 - 在类的内部使用:
-
在静态方法中调用其他的:
- 调用静态的方法和静态变量可以直接调用(前面省略了类名)
- 调用非静态的方法和非静态的属性不能直接调用,必须先常见对象,通过对象去调用。
在静态方法中是没有默认的this关键字的,不存在对象。
-
在非静态方法中调用其他的:
可以直接调用静态属性和方法还有非静态属性和方法。
-
- 在类的外部使用:
用来修饰代码块
代码块的语法 :{}
创建对象时会有jvm自动执行,一般情况下会通过构造函数来替换代码块。是jvm自动调用的,不能手动执行。
- 代码块由static来修饰,称之为静态代码块.
语法:static{}
- 执行时间:在第一次预加载这个类时,会自动调用静态代码块.
- 执行次数:永远只会执行一次。
java代码执行顺序(创建对象之前):当main要去准备执行某个类时,jvm会预加载.class文件,解析.class文件分配内存空间,进行初始化操作,为每一个类创建Class类。
关于带static代码执行顺序:
- 加载类:
- 先将所有的静态属性做默认初始化。
- 根据设置的值做显式的初始化。
- 调用静态代码块。
注意:系统调用StaticTest的main方法时必须先加载StaticTest类,而不是在main方法中StaticTest d才加载StaticTest类。
2. 创建对象时:
- 对所有的实例属性做默认的初始化。
- 根据设置的值做显式的初始化。
- 调用构造代码块。
- 调用构造方法(如果有父类,先调用super())
3 系统在堆内存中给对象分配空间,确定对象的首地址。