本帖最后由 黑马朱超 于 2013-3-9 12:28 编辑
我们说这个之前先说说显示初始化吧
private static String name = "aa";//显示初始化
1.javac.exe在编译XX.java文件的时候,发现文件中有"aa"的字符串常量,它查询常量池(一种内存空间)中是否有这样的常量,如果无就写入常量池
2.java.exe在运行类文件时,加载Person类;
3.把Static 静态成员都存储在静态区;在静态区内建立类String的same变量作为引用句柄,指向"aa";
Person p = new Person("zhangsan",20)//建立Person的对象
1.在编译java文件时,把"zhangsan",20都放入常量池
2.运行该语句时候,在栈内存中建立类Person的变量P作为引用句柄
3.用new在堆内存开辟空间建立类的对象,对象的属性进行默认初始化name =null,age =0;
4.对类的属性进行显示初始化;把"aa"赋值为name;//name ="aa"
5.构造代码块初始化
6.构造函数初始化,对于Private 变量,通过this.变量 把"zhangsan"和20分别赋值给name ,age//name ="zhangsan",age = 20;
7.把对象的地址赋值给引用句柄- class Person
- {
- private static String name = "unknown";//显示初始化变量name
- private int age =-1 ;// 私有化变量age
- //构造代码块
- {
- System.out.println("the object"+" is creating!");
- }
- Person()//构造函数
- {
- speak();
- }
- //构造函数
- Person(String name,int age)//构造函数把属性指向对象
- {
- this.name =name;
- this.age =age;
- speak();
- }
- //对对象修改属性
- public void setName(String name)
- {
- this.name = name;
- }
- //打印名称,年龄
- public void speak()
- {
- System.out.println("name is "+name+";age is"+age);
- }
- }
- class PersonDemo2
- {
- //主函数所在类中的静态代码块
- static
- {
- System.out.println("the Demo class "+"is mounting!");
- }
- public static void main(String [] args)
- {
- new Person();//创建Person类匿名对象,显示初始化name= "unknown" age =-1;
- new Person("zhangsan",10);//显示初始化后构造函数初始化时赋值 name = "zhangsan" age = 10
- Person p = new Person("lian",20);//创建Person类对象,构造函数初始化时赋值 name ="lian",age =20
- p.setName("lili");//对对象进行重新改名,name = "lili"
- p.speak();//调用speak一般函数时赋值
- }
- }
复制代码
|