• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

smcow

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

对象的实例化过程简说

对象的实例化过程简说

  1. .class文件加载 加载顺序: JVM运行时,首先加载主程序(含main()的那个类)中的那个类,>其次父类,>再次子类

  2. 在栈中开辟引用变量的空间, 变量值为null;

  3. 调用new在堆中开辟内存,并初始化属性(父类和子类) int 0; double 0.0; String null;

  4. 子类构造方法进栈,

  5. 显式初始化父类属性(如果有)

  6. 父类构造方法进栈,执行完后出栈

  7. 显示初始化子类属性(如果有)

  8. 调用方法进栈,初始化局部变量,赋值,执行完后出栈,方法被垃圾回收器处理

  9. 初始化完毕后,将堆中的对象地址赋值给引用变量

  10. 子类构造方法出栈

    tip:

    1. java中对于属性的赋值顺序

      • 默认初始化,>>显示初始化/代码块初始化, >>构造初始化, >>对象.属性初始化

      • 显示初始化 / 代码块初始化,那个在前,那个先初始化

    1. String类型的变量值引用的为字符串常量池中的地址

    2. 常量在类加载过程,链接阶段中的解析步骤时就已经初始化 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 + "]";
}
}

 

 

posted on 2023-01-12 21:57  月亮月亮弯弯弯  阅读(24)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3