黑马程序员 java_构造函数,构造代码块,静态构造代码块

 

                         ------- android培训java培训、期待与您交流! ----------

 

                       

1. Java 构造函数

 

            构造函数是一种特殊的方法,对象一建立就会调用与之对应的构造函数。
            构造函数的作用:可以用于给对象进行初始化。
            构造函数可以重载,这样就可以以多种方式创建对象,列如:

         

  class Person {
                      private String name;
                      private int age;
                      Person(String name){
                              this.name=name;
                                        }
                     Person(int age){
                          this.age=age;
                                         }
                  }

 

 在创建Person类的对象时,可以根据需要选择其中一个构造函数,如new Person(“Lisi”)或者

new Person(20);另外如果在类中没有定义任何构造函数,还可以使用new Person()创建一个

对象,此时采用的构造方法Person()是一个默认构造函数,这个构造函数是系统默认给该类

的,只有当类中没有定义构造函数式才会有默认构造函数。

 

 

 构造函数与一般函数的不同:

a. 在写法上与一般函数在写法上不同,构造函数的名称与类名相同,并且没有返回值。
b. 在功能上也不同,构造函数在对象建立时,就给对象初始化。而一般方法只有在调用
    时才执行,给对象添加功能。
c. 一个对象建立,构造函数只运行一次,而一般方法可以被多次调用。
 

 

 

2. 构造代码块

 

    作用:给对象进行初始化。对象一建立就运行,而且优先于构造函

    和构造函数的区别:
          构造代码块是给所有对象进行统一初始化,
          而构造函数是给对应的对象初始化。

        黑马程序员 java_构造函数,构造代码块,静态构造代码块_第1张图片

     从上面可以看出,当new Students("Lisi")时,首先执行的是构造代码块{...}中的代码,然后
才执行的是Students(String name){...}中的代码。同理,当new Students(30)时,首先执行的是 构造代码块{...}中的代码,然后才执行的是Students(int age){...}中的代码。

 

黑马程序员 java_构造函数,构造代码块,静态构造代码块_第2张图片

 

可见当new Students()时,先运行的是构造代码块中的内容,然后才是Students(){...}构造函数。

 

    如果age在类中已经显示初始化,情况又不一样。

黑马程序员 java_构造函数,构造代码块,静态构造代码块_第3张图片

 

      可见,当new Students()时,首先执行的是显示初始化,然后是构造代码块,

最后才是构造函数。

 

 

3.静态构造代码块

   

       格式为:  

static
{
	静态代码块中的执行语句。
}

       特点:随着类的加载而执行,只执行一次,并优先于主函数。用于给类进行初始化的。

 

 

4. 分析:当创建一个对象是时,各个部分的执行顺序

 

class Person
{
	private Person(){}
	private String name = "hah";
	private int age;
	private static  String country = "cn";
	Person(String name,int age)
	{
		this.name = name;
		this.age = age;
	}
	
	{
		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="+Person.country);
		Person.method();
	}
	public static void method()
	{
		System.out.println("method run");
	}

}

class  PersonDemo
{
	public static void main(String[] args) 
	{
		Person p = new Person("zhangsan",20);
		p.setName("lisi");
		new Person();
	}
}

 

     Person p = new Person("zhangsan",20);

     该句话都做了什么事情?

          a,因为new用到了Person.class.所以会先找到Person.class文件并加载到内存中。
          b,执行该类中的static代码块,如果有的话,给Person.class类进行初始化。
          c,在堆内存中开辟空间,分配内存地址。
          d,在堆内存中建立对象的特有属性。并进行默认初始化。
          e,对属性进行显示初始化。
          f,对对象进行构造代码块初始化。
          g,对对象进行对应的构造函数初始化。
          h,将内存地址付给栈内存中的p变量。  
   

                            ------- android培训java培训、期待与您交流! ----------

你可能感兴趣的:(java)