黑马程序员——java基础---对象初始化
2014-12-16 20:06
218 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
理解对象的初始化过程是学习面向对象的基础,下面给出对象初始化过程的总结。
先介绍一下 静态代码代码块、构造代码块、构造函数的特点。
1.静态代码块
随着类的加载而执行,只执行一次,并优先于主函数,用于给类进行初始化。
2.构造代码块
随着对象的建立而执行,优先于构造函数执行,用于给所有对象进行初始化。
3.构造函数
随着对象的建立而执行相应的构造函数,用于给相应的对象进行初始化。
注:当一个类中没有定义构造函数时,系统默认给该类加入一个空参数的构造函数,当类中自定义了构造函数后,默认的构造函数就没有了。
下面用一段代码说明静态代码块、构造代码块和构造函数在对象初始化过程中的执行顺序。
程序运行结果是:
静态代码块
构造代码块
构造函数
静态变量
清楚了静态代码块、构造代码块和构造函数在对象初始化过程中的执行顺序,根据以下代码解释对象的详细初始化过程。
程序运行结果为:
无名 中国
张三 中国
以Person p=new Person("张三")为例将对象的初始化过程总结如下:
1.因为用到了Person类,所以,先找到Person.class文件加载到内存中;
2.执行该类的静态代码块,对类进行初始化;(country="中国")
3.在堆内存中开辟空间,分配内存地址;
4.建立对象的特有属性,并进行默认初始化;(name="null")
5.对属性进行显示初始化;(name="显示默认")
6.执行构造代码块;(name="无名")
7.执行构造函数;(name="张三")
8.将内存地址赋给栈内存中的p变量。
理解对象的初始化过程是学习面向对象的基础,下面给出对象初始化过程的总结。
先介绍一下 静态代码代码块、构造代码块、构造函数的特点。
1.静态代码块
随着类的加载而执行,只执行一次,并优先于主函数,用于给类进行初始化。
2.构造代码块
随着对象的建立而执行,优先于构造函数执行,用于给所有对象进行初始化。
3.构造函数
随着对象的建立而执行相应的构造函数,用于给相应的对象进行初始化。
注:当一个类中没有定义构造函数时,系统默认给该类加入一个空参数的构造函数,当类中自定义了构造函数后,默认的构造函数就没有了。
下面用一段代码说明静态代码块、构造代码块和构造函数在对象初始化过程中的执行顺序。
class Person{ static String s="静态变量"; //构造函数随对象的建立而执行,用于给对应的对象初始化 Person(){ System.out.println("构造函数"); } //构造代码块随着对象的建立而执行,优先于构造函数,用于给所以对象进行统一初始化 { System.out.println("构造代码块"); } //静态代码块随着类的加载而执行,优先于主函数,用于给类初始化 static{ System.out.println("静态代码块"); } public static void main(String[] args){ //创建对象时,先执行静态代码块,然后执行构造代码块,最后执行构造函数 Person p=new Person(); //静态变量存储在方法区中,优先于对象存在,与对象建立无关,调用时构造代码块和构造函数不执行 System.out.println(Person.s); } }
程序运行结果是:
静态代码块
构造代码块
构造函数
静态变量
清楚了静态代码块、构造代码块和构造函数在对象初始化过程中的执行顺序,根据以下代码解释对象的详细初始化过程。
public class Person { private String name="显示默认"; private static String country; //静态代码块,给类进行初始化 static{ country="中国"; } //构造代码块,给所有对象初始化 { name="无名"; System.out.println(name+" "+country); } //构造函数,给相应的对象初始化 Person(String name){ this.name=name; System.out.println(name+" "+country); } public static void main(String[] args) { // 建立Person类的对象p Person p=new Person("张三"); } }
程序运行结果为:
无名 中国
张三 中国
以Person p=new Person("张三")为例将对象的初始化过程总结如下:
1.因为用到了Person类,所以,先找到Person.class文件加载到内存中;
2.执行该类的静态代码块,对类进行初始化;(country="中国")
3.在堆内存中开辟空间,分配内存地址;
4.建立对象的特有属性,并进行默认初始化;(name="null")
5.对属性进行显示初始化;(name="显示默认")
6.执行构造代码块;(name="无名")
7.执行构造函数;(name="张三")
8.将内存地址赋给栈内存中的p变量。
相关文章推荐
- 黑马程序员_Java基础_面向对象(Static的使用、对象初始化和调用成员过程、单例设计模式)
- 黑马程序员 java基础复习三之对象初始化,多态和异常等
- 黑马程序员——Java基础——对象的初始化
- 黑马程序员——Java基础---面向对象(对象的初始化、对象调用成员、单例设计模式)(4)
- 黑马程序员_Java基础_其它对象和IO流(字符流)
- 【黑马程序员】java编程基础,面向对象
- 黑马程序员——一切皆对象:Java面向对象基础
- 黑马程序员_java编程基础06面向对象
- 黑马程序员 java基础<一>--其它对象System、Runtime(1)
- 黑马程序员_java基础3-面向对象(二)多态、异常、包
- 黑马程序员 Java基础<十>---> IO流<3>-其他流对象简述
- JAVA中面向对象基础:抽象类、初始化块
- 黑马程序员_java基础教程_其他对象
- 黑马程序员-JAVA基础-基本数据类型对象包装类
- 黑马程序员 java基础<二>--其它对象Date、Calendar和Math-Random(2)
- 黑马程序员 Java基础<九>---> 其他对象
- 黑马程序员---Java基础--06天(面向对象之二)
- 黑马程序员---Java基础--05天(面向对象之一)
- java基础---->对象的创建过程(初始化、析构、清理)
- java基础---->对象的创建过程(初始化、析构、清理)