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

首先,看Person p = new Person("zhangsan",20); 这个语句都做了什么事情?
1、因为new用到了Person.class.所以会先找到Person.class文件并加载到内存中;
2、执行该类中的static代码块,如果有的话,给Person.class类进行初始化;
3、在堆内存中开辟空间,分配内存地址;
4、在堆内存中建立对象的特有属性,并进行默认初始化;
5、对属性进行显示初始化;
6、对对象进行构造代码块初始化;
7、对对象进行对应的构造函数初始化;
8、将内存地址付给栈内存中的p变量。
看内存中的执行情况:
对象初始化:


对象调用方法过程:

代码描述:
  1. class Person {

  2.         private String name = "michael";
  3.         private int age;
  4.         private static String country = "cn";// 静态成员变量

  5.         // 自定义构造方法
  6.         Person(String name, int age) {
  7.                 this.name = name;
  8.                 this.age = age;
  9.         }

  10.         // 构造代码块,对所有的对象进行初始化
  11.         {
  12.                 System.out.println(name + ".." + age);
  13.         }

  14.         public void setName(String name) {
  15.                 this.name = name;
  16.         }

  17.         // 非静态方法可以使用this关键字,同一个类中,this可以省略
  18.         public void speak() {
  19.                 System.out.println(name + "..." + age);
  20.         }

  21.         // 静态方法不可以使用this、super关键字,可以直接使用类名调用其他方法,在同一个类中,类名可以省略
  22.         public static void showCountry() {
  23.                 System.out.println("country=" + Person.country);
  24.                 Person.method();// 静态方法可以调用其他静态方法,此处的Person.method()等价于method()
  25.         }

  26.         public static void method() {
  27.                 System.out.println("method run");
  28.         }

  29. }

  30. public class PersonDemo {
  31.         public static void main(String[] args) {
  32.                 Person p = new Person("zhangsan", 20);
  33.                 p.setName("lisi");
  34.                 p.speak();
  35.                 Person.showCountry();
  36.         }
  37. }
复制代码
输出结果:
  1. michael..0
  2. lisi...20
  3. country=cn
  4. method run
复制代码





0 个回复

您需要登录后才可以回帖 登录 | 加入黑马