黑马程序员 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. 构造代码块
作用:给对象进行初始化。对象一建立就运行,而且优先于构造函
和构造函数的区别:构造代码块是给所有对象进行统一初始化,
而构造函数是给对应的对象初始化。
才执行的是Students(String name){...}中的代码。同理,当new Students(30)时,首先执行的是构造代码块{...}中的代码,然后才执行的是Students(int age){...}中的代码。
可见当new Students()时,先运行的是构造代码块中的内容,然后才是Students(){...}构造函数。
如果age在类中已经显示初始化,情况又不一样。
可见,当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变量。