对象的实例化过程简说
-
.class文件加载 加载顺序: JVM运行时,首先加载主程序(含main()的那个类)中的那个类,>其次父类,>再次子类
-
在栈中开辟引用变量的空间, 变量值为null;
-
调用new在堆中开辟内存,并初始化属性(父类和子类) int 0; double 0.0; String null;
-
子类构造方法进栈,
-
显式初始化父类属性(如果有)
-
父类构造方法进栈,执行完后出栈
-
显示初始化子类属性(如果有)
-
调用方法进栈,初始化局部变量,赋值,执行完后出栈,方法被垃圾回收器处理
-
将堆中的对象地址赋值给引用变量
-
子类构造方法出栈
tip:
-
java中对于属性的赋值顺序
-
默认初始化,>>显示初始化/代码块初始化, >>构造初始化, >>对象.属性初始化
-
显示初始化 / 代码块初始化,那个在前,那个先初始化
-
-
String类型的变量值引用的为字符串常量池中的地址
-
常量在类加载过程,链接阶段中的解析步骤时就已经初始化 protected final int SEX=1;
-
public class Test{
public void main(String[] args){
Son s=new Son();
s.showSay("good");
s.setWY("用枪棍");
s.name="花木兰";
System.out.println(s);
}
}
class Person{
private String wuyi;
String name;
int age;
protected final int SEX=1;
public Person(){
}
public void showWuYi(String wuyi){
System.out.println(wuyi);
}
public void setWY(String wuyi){
this.wuyi=wuyi;
}
}
class Son extends Person{
public Son(){
}
String say;
double weight=45;
public void showSay(String say){
say="巧舌如簧";
System.out.println(say);
showWuYi("摔跤,擒拿");
}
@Override
public String toString() {
//这里super与this的效果等同,也可以省略不写;
return "Son [name=" + name + ", weight=" + weight + ", SEX=" + super.SEX + ", wuyi=" + this.wuyi + "]";
}
}
标签:初始化,String,对象,子类,wuyi,Son,实例,简说,public From: https://www.cnblogs.com/smcow/p/17048054.html