本帖最后由 风中的消逝 于 2018-4-23 15:18 编辑
【石家庄校区】就业班_JavaSE_day01_static和代码块
一 、static
1.概述
java的关键字 静态修饰符 可以用来修饰类的成员变量和成员方法,还可以用来修饰代码块。还可以用来修饰内部类。
2.特点
a 共享 该类的所有对象共享,所有又叫做类变量和类方法
b 可以通过类名. 来访问
c 优先于对象加载,随着类的加载而加载
3.内存图
栈 堆 方法区(静态区 非静态区 常量池(1.7之后hotspot放到堆中了 )) 方法区里面放的是类的class文件
static修饰的成员变量和成员方法存放在静态区中 ,非静态成员放在非静态区中
4.优缺点
优点:无需创建对象即可使用,并且被所有对象所共享。
缺点:静态成员只能访问静态成员 。
5.注意
a 静态访问内只能访问静态的成员变量和成员方法 非静态方法既可以访问静态成员也可以访问非静态成员
b 静态成员也可以通过对象来访问,但建议通过类名来访问
二、 代码块
1.概述
分为局部代码块、构造代码块、静态代码块、同步代码块(多线程)
局部代码块定义在方法中
构造代码块定义在成员变量的位置
静态代码块定义在成员变量的位置并且被static修饰
2.特点
局部代码块 用来控制局部变量的作用域
构造代码块 用于对象的初始化 每个对象的初始化都会执行
静态代码块 用于类的初始化 只在类加载的时候执行一次。
3 代码块和构造方法的加载顺序
静态的优先于非静态的 ; 构造代码块优先于构造方法;
父类的静态代码块-->子类的静态代码块-->父类的构造代码块-->父类的构造方法-->子类的构造代码块-->子类的构造方法
4 类初始化顺序:
父类的静态(静态变量和静态代码块,按书写顺序执行)-->子类的静态(静态变量和静态代码块,按书写顺序执行)
-->父类的非静态(成员变量、构造代码块,按书写顺序执行,最后执行构造方法)
-->子类的非静态(成员变量、构造代码块,按书写顺序执行,最后执行构造方法)
有多级父类: Object-->yeye--> fu--> zi
5 类的加载顺序。双亲委托机制,
类加载器(bootstrap、extclassloader、systemclassloader、自定义加载器)
加载顺序:触发类的加载,先判断方法区中是否已经加载过,如果已经加载过就不再加载,如果没有下载过,则从上至下进行加载,如果都不能
加载则报ClassNotFoundException。
bootstrap加载范围:jre\lib
extclassloader 加载范围: jre\lib\ext
systemclassloader 加载范围:classpath
6.注意
代码块相当于方法 ,在代码块中定义的变量出了方法体就无效了。
|