Java学习之对象的初始化过程

示例代码:

 1 class Person
 2 {
 3     private Person(){}
 4     private String name = "hah";
 5     private int age;
 6     private static  String country = "cn";    //构造函数
 7     Person(String name,int age)
 8     {
 9         this.name = name;
10         this.age = age;
11     }    //静态代码块
12     static
13     {
14         System.out.println("hello, man");
15     }    //构造代码块
16     {
17         System.out.println(name+".."+age);
18     }
19     public void setName(String name)
20     {
21         this.name = name;
22     }
23     //非静态函数
24     public void speak()
25     {
26         System.out.println(this.name+"..."+this.age);
27     }
28       //静态函数
29     public static void  showCountry()
30     {
31         System.out.println("country="+Person.country);
32         Person.method();
33     }
34     public static void method()
35     {
36         System.out.println("method run");
37     }
38
39 }
40
41 class  PersonDemo
42 {
43     public static void main(String[] args)
44     {
45         Person p = new Person("zhangsan",20);
46         p.setName("lisi");
47         new Person();
48     }
49 }    

例如:Person p = new Person("zhangsan",20);

该句话都做了什么事情?

  1)因为new用到了Person.class.所以会先找到Person.class文件并加载到内存中。

  2)执行该类中的static代码块(如果有的话),给Person.class类进行初始化。

  3)在堆内存中开辟空间,分配内存地址(十六进制:如:0x0015)。

  4)在堆内存中建立对象的特有属性。并进行默认初始化。 (如:name = null; age = 0;)

  5)对属性进行显示初始化。(如:name = "haha";)

  6)对对象进行构造代码块初始化。

  7)对对象进行对应的构造函数初始化。

  8)将内存地址付给栈内存中的p变量。

时间: 2024-12-28 20:58:56

Java学习之对象的初始化过程的相关文章

解析Java类和对象的初始化过程

类的初始化和对象初始化是 JVM 管理的类型生命周期中非常重要的两个环节,Google 了一遍网络,有关类装载机制的文章倒是不少,然而类初始化和对象初始化的文章并不多,特别是从字节码和 JVM 层次来分析的文章更是鲜有所见. 本文主要对类和对象初始化全过程进行分析,通过一个实际问题引入,将源代码转换成 JVM 字节码后,对 JVM 执行过程的关键点进行全面解析,并在文中穿插入了相关 JVM 规范和 JVM 的部分内部理论知识,以理论与实际结合的方式介绍对象初始化和类初始化之间的协作以及可能存在的

java中对象的初始化过程

class Parent{ int num = 8;// ->3 Parent(){ //super(); // ->2 //显示初始化 // ->3 //构造代码段 // ->4 show(); // ->5 } {// ->4 System.out.println("Parent constructor code run->"); } public void show(){//被覆盖 System.out.println("num

Java学习笔记二:初始化(一)

1.对象初始化 在使用 new 初始化对象时,系统通常使用默认的构造函数,这个构造函数没有返回值,格式为: public class InitializeTest { private int a; // 默认构造函数 public InitializeTest() { } // 自定义构造函数 public InitializeTest(int a) { this.a = a; } } 虽然在使用 new 创建实例时,返回了这个对象的引用,但是这个与没有返回值的void方法不同 //void方法

JAVA基础之对象的初始化

本文主要记录JAVA中对象的初始化过程,包括实例变量的初始化和类变量的初始化以及 final 关键字对初始化的影响.另外,还讨论了由于继承原因,探讨了引用变量的编译时类型和运行时类型 一,实例变量的初始化 一共有三种方式对实例变量进行初始化: ①定义实例变量时指定初始值 ②非静态初始化块中对实例变量进行初始化 ③构造器中对实例变量进行初始化 当new对象 初始化时,①②要先于③执行.而①②的顺序则按照它们在源代码中定义的顺序来执行. 当实例变量使用了final关键字修饰时,如果是在定义该fina

java中类的创建及初始化过程

java中类的创建及初始化过程无外乎两种情况,其一为单类的创建及初始化,其二具有继承关系的父子类创建及初始化过程.     首先说简单的,单类的创建及初始化过程.在java中我们都知道绝大部分对象的创建时通过new 这个关键字来完成,当我们在自己的代码中写上       new ClassName()://创建 ClassName类的一个实例时,解释器当截取new这个关键字时,就会为ClassName量身定做一个内存空间,这个时候也就是为该类中的所有成员变量分配内存空间之时,并对其进行最原始的初

[Java学习笔记]对象克隆

对象克隆: 浅克隆: 被克隆的对象中的值类型数据被复制一份新值,但是引用的对象只被复制其引用传递给新克隆出来的对象 深克隆: 被克隆的对象中的值类型数据被复制一份新值,并且其中引用的对象会重新创建新的对象,把新对象的引用传递给新克隆出来的对象 Java中实现克隆: Java中Object中定义了clone方法,默认为浅克隆操作,即你只是简单super.clone得到的结果是浅克隆的结果,如果需要深克隆,则需要实现Cloneable接口,并且重写clone方法 查看Java源代码发现Object中

细谈 对象的初始化过程------内存中的实现过程?

今天对于内存的理解 又加深了一步: 对下面代码的理解: class Person { private String name="xiaohong"; private int age=23; private static String country="CN"; { System.out.println(name+" "+age); } public Person(String name,int age) { this.name = name; t

对象的初始化过程

对象的初始化过程: class Person{ private String name; private int age; ...//set,get person(String name,int age){ ... } } ... 例如 Person p = new Person("战士",30);1,因为new用到了Person.class.所以会先找到Person.class文件并加载到内存中. 2,执行该类中的static代码块,如果有的话,给Person. class类进行初始

JAVA对象的初始化过程

出处:http://blog.csdn.net/andrew323/article/details/4665379 下面我们通过两个例题来说明对象的实例化过程. 例1:   编译并运行该程序会有以下输出 Static Block Employee Company:china soft Non-Static Block Employee phone:0755-51595599 Employee(String) Empoloyee() 下面我们来对结果做分析: 1 在代码34行实例化对象时, 先对给