类的初始化与实例化
2018-06-11 本文已影响11人
MC_Honva
JAVA创建对象的四种方法
- 通过关键字new
- 通过Java反射
- 通过clone方法
- 通过序列化方式
- 通过new关键字创建
这个就不用解释了
- 通过Java反射
Class.forName("类全限定名").newInstance();
或者
类.class.newInstance()
- 通过clone方
类需要先实现cloneable接口,并重写clone方法
public class Demo implements Cloneable{
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
public class Run {
public static void main(String[] args){
try {
Demo d = new Demo();
Demo d2 = (Demo) d.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
类的初始化时机与过程
public class StaticTest {
public static void main(String[] args) {
staticFunction();
}
static StaticTest st = new StaticTest();
static { //静态代码块
System.out.println("1");
}
int a = 110; // 实例变量
{ // 实例代码块
System.out.println("2");
}
StaticTest() { // 实例构造器
System.out.println("3");
System.out.println("a=" + a + ",b=" + b);
}
public static void staticFunction() { // 静态方法
System.out.println("4");
}
static int b = 112;
}
----------
2
3
a=110,b=0
1
4
结论:实例变量和实例代码块执行顺序要优于实例构造函数,而实例变量和示例代码块的优先顺序取决于他们代码的位置,谁在前谁先执行。静态变量、静态代码块、静态方法同样如此。
详细大神讲解链接
深入理解Java对象的创建过程:类的初始化与实例化