new过程背后的事
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了new过程背后的事相关的知识,希望对你有一定的参考价值。
代码示例:
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操作之前:
类的加载:
- 类中的静态字段被加载
- 类中的静态方法被加载(包括静态代码块)
对象的创建:
- 分配内存
- 将对象的实例变量自动初始化为其变量类型的默认值
- 类中的非静态代码块被执行(如果有非静态代码块将执行,常用语属性的初始化)
- 调用构造函数,成功创建对象
以上是关于new过程背后的事的主要内容,如果未能解决你的问题,请参考以下文章