码迷,mamicode.com
首页 > 其他好文 > 详细

new过程背后的事

时间:2016-06-02 21:52:14      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

代码示例:

技术分享
 1 public class Test {
 2 
 3     public Test(){
 4         System.out.println("构造函数");
 5     }
 6     {
 7         System.out.println("非静态代码块");
 8     }
 9     static{
10         System.out.println("静态代码块");
11     }
12     /**
13      * @param args
14      */
15     public static void main(String[] args) {
16         new Test();
17     }
18 }
创建对象代码示例

静态代码块:

  static修饰的代码块为静态代码块,在类加载的时候被执行,也就是说即使不创建类的实例对象,该类在被加载的时候也会执行,示例:

技术分享
 1 public class Test {
 2 
 3     public Test(){
 4         System.out.println("构造函数");
 5     }
 6     {
 7         System.out.println("非静态代码块");
 8     }
 9     static{
10         System.out.println("静态代码块");
11     }
12     /**
13      * @param args
14      */
15     public static void main(String[] args) {
16         
17     }
18 }
静态代码块实例

  该段代码在运行的时候边会执行静态代码块的内容:

非静态代码块:

  无static修饰的代码块修饰的非静态代码块,在类创建实例对象的时候被加载,常用来做对象属性的初始化

技术分享
 1 public class Test {
 2     {
 3         System.out.println("非静态代码块");
 4     }
 5     /**
 6      * @param args
 7      */
 8     public static void main(String[] args) {
 9         new Test();
10     }
11 
12 }
非静态代码块

  在创建Test类的实例对象的时候,在执行Test无参构造函数之前便会执行非静态代码块的内容

构造函数:

  无返回值的特殊方法,用于创建类的实例对象。如类不显式声明构造器,系统会默认生成一个无参的构造器;如类中显式的声明了构造器(不管是无参还是带参的),系统都不会再隐式生成一个无参的构造器。

技术分享
 1 public class Test {
 2 
 3     public Test(){
 4         System.out.println("构造函数");
 5     }
 6 
 7     /**
 8      * @param args
 9      */
10     public static void main(String[] args) {
11         new Test();
12     }
13 
14 }
构造器示例

new操作之前:

  类的加载:

    1. 类中的静态字段被加载
    2. 类中的静态方法被加载(包括静态代码块)

  对象的创建:

    1. 分配内存
    2. 将对象的实例变量自动初始化为其变量类型的默认值
    3. 类中的非静态代码块被执行(如果有非静态代码块将执行,常用语属性的初始化)
    4. 调用构造函数,成功创建对象

new过程背后的事

标签:

原文地址:http://www.cnblogs.com/brainit/p/5554391.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!