Java中的构造函数、构造代码块、静态代码块
2014-10-24 09:56
337 查看
构造函数:
定义:一种用来在创建对象时初始化对象的一种特殊方法。
作用:用于在创建对象时,给对象初始化。
构造函数的特点:
1. 构造函数的函数名必须和类名完全相同,无返回值,也不能使用 void 修饰;在java中普通函数可以和构造函数同名,但是必须带有返回值。
2. 构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的。
3. 构造函数可以重载,一个类中可以有多个构造函数,在创建对象时,系统可以根据传递参数的不同来自动调用对应参数的构造函数。
4. 当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作;但有时也不写构造函数,此时Java编译器会提供一个默认的构造函数,此默认构造函数是不带参数的;而一般的方法不存在这一特点。
5. 构造函数也可以被 private 修饰。但要注意,由于Java允许在类中创建本类对象,所以如果A类的构造函数被私有化,则可以在A类中new一个A类的对象;但如果B类将无法通过new关键字来创建A类对象,此时A类需要提供一个 public(或非私有化)的获取方法,创建并返回A类对象以供B类使用(单例设计模式就是用了这一特性)。
构造代码块:
作用:同样也是给对象初始化。对象一建立就被执行,而且优先于构造函数执行。
和构造函数的区别:构造代码块是给所有对象进行统一初始化的,而构造函数是给对应的对应对象初始化。
格式:
静态代码块:
作用:用于给类初始化。
特点:随着类的加载而执行,只执行一次,并优先于主函数。
格式:
总结:
静态代码块、构造代码块和构造函数的区别
静态代码块:用于给类初始化,类加载时就会被加载执行,只加载一次。
构造代码块:用于给对象初始化的。只要建立对象该部分就会被执行,且优先于构造函数。
构造函数:给对应对象初始化的,建立对象时,选择相应的构造函数初始化对象。
创建对象时,三者被加载执行顺序:静态代码块--->构造代码块--->构造函数
通过以下代码来说明问题
定义:一种用来在创建对象时初始化对象的一种特殊方法。
作用:用于在创建对象时,给对象初始化。
构造函数的特点:
1. 构造函数的函数名必须和类名完全相同,无返回值,也不能使用 void 修饰;在java中普通函数可以和构造函数同名,但是必须带有返回值。
2. 构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的。
3. 构造函数可以重载,一个类中可以有多个构造函数,在创建对象时,系统可以根据传递参数的不同来自动调用对应参数的构造函数。
4. 当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作;但有时也不写构造函数,此时Java编译器会提供一个默认的构造函数,此默认构造函数是不带参数的;而一般的方法不存在这一特点。
5. 构造函数也可以被 private 修饰。但要注意,由于Java允许在类中创建本类对象,所以如果A类的构造函数被私有化,则可以在A类中new一个A类的对象;但如果B类将无法通过new关键字来创建A类对象,此时A类需要提供一个 public(或非私有化)的获取方法,创建并返回A类对象以供B类使用(单例设计模式就是用了这一特性)。
class B { //在B类中定义一个私有的构造函数 private B(){} //在B类中提供一个获取B类对象方法 public static B getInstanceB() { B b = new B(); return b; } } class A { //在A类中定义一个私有的构造函数 private A(){} public static void main(String[] args) { A a = new A();//创建A类对象,系统自动调用A的构造函数 //B b = new B();//错误:此时无法通过 new 创建B类对象 B b = B.getInstanceB(); } }
构造代码块:
作用:同样也是给对象初始化。对象一建立就被执行,而且优先于构造函数执行。
和构造函数的区别:构造代码块是给所有对象进行统一初始化的,而构造函数是给对应的对应对象初始化。
格式:
{ //构造代码块代码 }
静态代码块:
作用:用于给类初始化。
特点:随着类的加载而执行,只执行一次,并优先于主函数。
格式:
static { //静态代码块代码 }
总结:
静态代码块、构造代码块和构造函数的区别
静态代码块:用于给类初始化,类加载时就会被加载执行,只加载一次。
构造代码块:用于给对象初始化的。只要建立对象该部分就会被执行,且优先于构造函数。
构造函数:给对应对象初始化的,建立对象时,选择相应的构造函数初始化对象。
创建对象时,三者被加载执行顺序:静态代码块--->构造代码块--->构造函数
通过以下代码来说明问题
class Person { private String name = null; private int age = 0; private static String country="cn"; Person(String name,int age) {//构造函数 this.name=name; this.age=age; System.out.println("我是构造函数"); } static { System.out.println("我是Person类静态代码块"); } {//构造代码块 System.out.println("我是构造代码块:"+name+"..."+age); } public void setName(String name) { this.name=name; } public void speak() { System.out.println(this.name+"..."+this.age); } public static void showCountry() {//静态方法 System.out.println("country="+country); } } class StaticDemo { static { System.out.println("我是StaticDemo类main() 前 的静态代码块"); } public static void main(String[] args) { System.out.println("我是main()函数"); Person p=new Person("zhangsan",100); p.setName("lisi"); p.speak(); Person.showCountry(); } static { System.out.println("我是StaticDemo类main() 后 的静态代码块"); } } /* 执行结果如下: 我是StaticDemo类main() 前 的静态代码块 我是StaticDemo类main() 后 的静态代码块 我是main()函数 我是Person类静态代码块 我是构造代码块:null...0 我是构造函数 lisi...100 country=cn */
相关文章推荐
- 黑马程序员-Java之构造代码块、构造函数、静态代码块
- Java 构造函数、构造代码、静态代码块
- Java静态代码块、构造函数、构造代码块
- java 中的构造代码块和构造函数以及静态代码块
- [java起步]构造函数、构造代码快、静态代码块的执行顺序
- 黑马程序员-java中构造函数、构造代码块、静态代码块及它们的初始化顺序
- 黑马程序员——java中静态代码块、构造代码块、构造函数的执行顺序以及作用
- 黑马程序员——Java基础---面向对象(面向对象,类,对象,匿名对象,封装,构造函数,构造代码块,this,static,main,帮助文档,静态代码块,单例)
- Java中普通代码块,构造代码块,静态代码块区别及代码示例
- Java_浅谈构造函数、构造代码块与静态代码块的用法
- Java中的代码块(静态代码块、构造代码块、局部代码块)
- 普通代码块,构造函数,构造代码块,静态代码块顺序
- Java学习笔记——静态代码块,构造代码块,构造函数间的执行顺序
- Java中普通代码块,构造代码块,静态代码块区别及代码示例
- Java中普通代码块,构造代码块,静态代码块区别及代码示例
- Java中构造函数、构造代码块、静态代码块等的执行顺序问题
- Java之静态代码块、构造代码块、与构造函数的用法
- 黑马程序员_java静态代码块、构造代码块和构造函数的执行时间分析
- 黑马程序员_005_构造代码块、构造函数和静态代码块
- Java中普通代码块,构造代码块,静态代码块区别及代码示例