Java静态非静态总结
2018-04-01 16:30
204 查看
Java静态类与非静态类
Java程序启动class文件被读取时类被加载,如果有static方法,此时会分配内存。非static方法实例化类时才在内存中分配控件存储。
引用存储在堆栈中,实体存储在堆中。
静态方法和实例方法
静态方法在程序开始时生成内存,可直接调用。速度快,占内存。实例方法在程序运行中生成内存,生成实例,通过实例调用方法。
静态方法不能使用this,super关键字,不能调用非static的成员变量。
非static的成员方法,只能访问static修饰的成员变量,成员方法。
静态初始化和非静态初始化
Java不仅有构造函数,还有一个“初始化块”。初始化块是一段固定执行的代码,它不能接受任何参数。
Java中的初始化块在创建Java对象时隐式执行,并且是在构造函数之前执行。
静态初始化
static { ... }
会在类被加载的时候执行且仅会被执行一次。
静态初始化块执行的优先级高于非静态初始化块。
一般用来初始化静态变量和调用静态方法
非静态初始化
{ ... }
非静态初始化块在每个对象生成时都会被执行一次,它可以初始化类的实例变量。
非静态初始化块在构造函数之前执行。
Java创建类、对象顺序
对象第一次被创建时,先要加载该对象所属的类,即对应的.class文件。如果类已经加载,再次创建该类的对象时,不需重新加载。
类加载的时候,有三个部分需要加载,一个是静态变量,再然后是静态方法,然后是静态初始化块。
Java初始化,加载顺序
先加载变量,再加载方法
先加载父类,再加载子类
先加载静态,再加载一般
1.父类静态成员变量,父类静态代码块,子类静态成员变量,子类静态代码块
2.父类非静态成员变量,父类非静态代码块,父类构造函数
3.子类非静态成员变量,子类非静态代码块,子类构造函数
相关文章推荐
- java学习总结(16.06.07)类的静态成员和非静态成员
- java学习总结(16.06.07)类的静态成员和非静态成员
- Java中静态跟非静态的区别总结
- 【Java总结】static,静态代码块
- java静态与非静态的区别
- Java学习笔记之类中的静态代码及为什么静态不能访问非静态
- JAVA代码块非静态代码块与静态代码块构造函数比较
- Java 静态(static)与非静态语句执行顺序
- Java自由块(静态和非静态)(转载)
- Java静态与非静态代码块
- Java中堆、栈,静态方法和非静态方法的速度问题
- java synchronized静态同步方法与非静态同步方法,同步语句块
- 黑马程序员:Java基础总结----静态代理模式&动态代理
- java中静态成员与非静态成员
- java学习中关于静态和非静态
- Java静态对象和非静态对象有什么区别??
- java基础-静态和非静态
- Java基础之静态修饰符知识点总结
- 浅谈 JAVA中静态初始化块和非静态初始化块的区别
- Java总结(14) 静态导入 可变长参数