构造函数:
特点:
1.函数名与类名相同,,,函数名是固定的
2.不用定义返回值类型,,和void不是一回事,void是一种返回值类型,代表着没有具体结果返回的情况,而构造函数是根本不需要定义返回值类型
3.不可以写return语句,,返回值类型都没有,那么函数里面就不需要return语句了构造函数当中是不可能出现return语句的,你不写系统也不给你加retrun
4.对象一建立就会调用与之对应的构造函数。
5.一个对象建立,构造函数只运行一次。
构造函数的作用:可以用于给对象进行初始化。也就是说当我们在堆内存中产生对象的时候这个对象他需要一个初始化动作
构造函数的小细节:
当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数,为什么自动加一个,是为了方便于该类进行初始化,否则对象是建立不出来的,因为对象没有办法初始化,
当在类中自定义了构造函数后,默认的构造函数就没有了。也就是说这类里面我自己定义了对对象的初始化方式的话那么系统就不在帮你加一个构造函数了
什么时候定义构造函数呢?
当分析事物时,该事物存在就具备一些特性或者行为,那么将这些内容定义在构造函数中。
注意;构造函数在进行定义的时候是否需要未知内容参与运算,需要就定义参数,,比如人一初始化就得有姓名,姓名是未知的,你初始化以后往里面传就可以了
构造函数代码:
class Person
{
private String name;
Person() //无参构造函数
{
System.out.println("A: name="+name+",,age="+age);
}
/**/
Person(String n) //有参构造函数
{
name = n;
System.out.println("B: name="+name);
}
}
构造代码块:
class Person
{
private String name;
private int age;
Person()
{
System.out.println("A: name="+name+",,age="+age);
}
Person(String n,int a)
{
name = n;
age = a;
System.out.println("C: name="+name+",,age="+age);
}
/*
构造代码块。
作用:给对象进行初始化。
对象一建立就运行,而且优先于构造函数执行。无论创建哪个对象时都得首先执行构造代码块,然后再执行对应的构造函数
和构造函数的区别:
构造代码块是给所有对象进行统一初始化,
而构造函数是给对应的对象初始化。
构造代码快中定义的是不同对象共性的初始化内容。比如每个构造函数里都有cry()方法,,,可以单独提取出来放到构造代码块里
构造代码块也是一种初始化方式,,,
*/
{ //这就是个构造代码块
cry();
}
public void cry()
{
System.out.println("cry......");
}
}
class PersonDemo2
{
public static void main(String[] args)
{
Person p1 = new Person();
Person p2 = new Person("lisi");
}
}
结论:
p1,p2都能运行.当建立这个p1对象的时候时先执行构造代码块,再执行Person()无参构造函数,然后建立p2对象的时候,这个对象就到Person(String n)构造函数来初始化,步骤也是先执行构造代码块再执行Person(String n),,,构造函数是给不同的对象进行分别初始化的,无论创建哪个对象都得首先执行构造代码块,,执行顺序都是先执行构造代码块再执行构造函数,无论调用哪个构造函数都得先执行构造代码块
|