构造函数的概述:
特点:
1:函数名与类名相同
2:不用定义返回值类型
3:没有具体的返回值
作用:
给对象进行初始化。
注意:
1:默认构造函数的特点
2:多个构造函数是以重载的形式存在的是
public class Person{
private int age;
private String name;
//定义一个Person类的构造函数
Person(){//构造函数,而且是空参数的。
name="baby";
age=1;
System.out.println("Person...run");
}
//如果孩子一出生就有名字
Person(String name){
name=name;
}
}
class ConsDemo{
Person p=new Person();//使用了,空参数的构造函数。
Person p1=new Person("张三");//p1这个对象一创建出来,就定义了,名字为"张三"的人。
}
构造函数:构建创造对象时调用的函数。作用:可以给对象进行初始化
创建对象都必须要通过构造函数初始化。
一个类中如果没有定义过构造函数,那么该类中会有一个默认的空参数的构造函数
如果在类中定义了指定的构造函数,那么类中的默认构造函数就没有啦。
一般函数和构造函数有什么区别呢?
构造函数:对象创建时,就会调用与之对应的构造函数,对对象进行初始化
一般函数:对象创建后,需要函数功能时才调用
构造函数:对象创建时,会调用只调用一次
一般函数:对象创建后,可以被调用多次
什么时候定义构造函数呢?
在描述事物时,该事物已存在就具备的一些内容,这些内容都定义在构造函数中
构造函数之重载
什么时候定义构造函数呢?
在描述事物时,该事物已存在就具备的一些内容,这些内容都定义在构造函数中
构造函数可以有多个,用于对不同的对象进行针对性的初始化。
多个构造函数在类中是以重载的形式来体现的。
重载,函数名相同,参数列表不同
class Person{
int age;
String name;
//定义一个Person类的构造函数
Person(){ //构造函数,而且是空参数的
}
Person(String name){//构造函数,有一个字符串类型参数传递
name=name;
}
Person(int age;String name){//构造函数,有一个int类型和String类型的参数传递
age=age;
name=name;
}
public void speak(){
System.out.println(name+":"+age);
}
public static void main(String[] args){
Person p=new Person();
}
}
构造函数在内存中的变化
class Demo{
public static void main(String[] args){
Person p=new Person(10,"小强");
p.speak();
}
}
上面这句代码
首先main函数进栈,然后,在堆中,产生地址,里面name,age会默认初始化null,0,
然后,在栈中Person这个构造函数就会进栈,传递2个参数进来,分别是小强,10,
然后,就在栈中找name ,age两个定义变量,找不到就去堆中找,找到啦,就赋值上去。
然后Person这个构造函数,就出栈。然后speak就进栈,打印完之后,也就出栈啦内存中的变化。
构造函数的细节
class Demo{
private String name;
private int age;
//void Six1(){}这是一个一般函数,只是方法名和类名一样
Six1(){
name="baby";
age=1;
System.out.println("Person run");
}
Six1(String n){
name=n;
}
Six1(String n,int a){
name=n;
age=a;
}
public void setName(String n){
name=n;
}
/*
构造函数和setName方法不冲突,因为,一个
是用来初始化,另外一个是用来重新赋值
构造函数可以调用一般函数。
一般函数调用构造函数,就需要new 一个对象出来
这样做很多余
在类中写了构造函数那么,默认的构造函数
就没有啦
构造函数中有return
* */
public void speak(){
System.out.println(name+":"+age);
}
}