A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lygku 中级黑马   /  2015-6-23 18:33  /  627 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

大家一个好奇创建一个对象,内存的运行,我把老师的整理了一下如下:创建对象所做的一个事情
                1、new的时候会通过jvm将Person.class加载进内存,栈内存中存在p
                2、静态代码块被执行(如果有的话),静态优先于对象,给person.class类进行初始化;
                3、在堆内存开辟一个空间,分配内存地址。
                4、在堆内存中建立对象的特有属性,name和country,并且有个初始化动作,初始化给的是默认值;
                5、对属性进行显示初始化
                6、对对象进行构造代码块初始化(优先级比构造函数高)
                7、对对象进行对应的构造函数初始化
                8、将内存地址赋给栈内存中的p变量


  1. class Person{
  2.        
  3.                 private String name;
  4.                 private int age;
  5.                 private static String country="cn";
  6.                
  7.                 //第三个打印
  8.                 Person(String name,int age){
  9.                        
  10.                                         this.name=name;
  11.                                         this.age=age;
  12.                                         System.out.println(name+"---"+age);
  13.                        
  14.                 }
  15.                 //第二个打印
  16.                 {
  17.                             System.out.println(name+"---"+age);
  18.                 }
  19.                
  20.                 //第一个打印
  21.                 static {
  22.                             System.out.println("stataic");
  23.                 }
  24.                
  25.                 public void setName(String name){
  26.                        
  27.                                         this.name=name;
  28.                 }
  29.                
  30.                 public void speak(){
  31.                        
  32.                                         System.out.println(this.name+"---"+this.age);
  33.                 }
  34.                
  35.                 public static void showCountry(){
  36.                        
  37.                                         System.out.println("Country"+country);
  38.                 }

  39. }

  40. class PersonDemo{
  41.                        
  42.                         public static void main(String[] args){
  43.                                
  44.                                                 Person p = new Person("黑马哥",25);
  45.                                                
  46.                         }
  47. }
复制代码



1 个回复

倒序浏览
我前两天也刚彻底弄明白创建对象后对象都做了什么
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马