构造方法
构造方法(构造函数)
构造方法是一种特殊的方法。
作用:
- 构造出来一个类的实例。
- 对构造出来的一个类的实例(对象)初始化.
特征:
- 与所存在的类同名
- 无返回类型(void也没有)
特殊性:
- 类中必定有构造方法。
- 如果没有写构造方法,系统自动添加一个无参构造方法。如果是数值类型初始化为0,如果是布尔类型,初始化为false
- 构造方法在初始化(new)对象时自动执行,一般不能显式地直接调用.
- 接口不允许被实例化,所以接口中没有构造方法。
- 不能被static、final、synchronized、abstract和native修饰。
构造方法和其他方法一样也可以重载。
class A//一个名为A的类
{
private int a1;//定义一个私有的未初始化的a1变量
public int a2;//定义一个共有的未初始化的a2变量
public A()//这是一个构造方法,方法名要和类名一样。而且不能有返回类型(无void)。
{
a1=1;
a2=2;
}
public void show()//一个show方法用来显示变量 //这是个普通方法。
{
System.out.printf("a1=%d,a2=%d",a1,a2);
System.out.printf("\n");
}
}
class B
{
int b;//没有给b赋值
//这个类没有写构造方法,系统会自动添加一个无参的构造方法.
}
class B1
{
int b1;//没有给b1赋值
B1()
{
//我写了一个构造方法,但是没有写内容,系统会给类中的变量赋默认值。
}
}
class C
{
int c;
public C(int m)//写了一个带参数的构造方法
{
c=m;
}
}
class D //演示构造方法重载
{
int d1;
int d2;
public D()
{
d1=1;
d2=11;
}
public D(int m)//构造方法重载
{
d1=m;
// d2=m;
}
public D(int m,int n)//构造方法重载
{
d1=m;
d2=n;
}
void show()
{
System.out.printf("d1=%d,d2=%d\n",d1,d2);
}
}
public class Test1
{
public static void main(String args[])
{
A aa = new A();//创建一个以A类为模板的aa对象,并调用构造方法A()
aa.show();//a1=1,a2=2 //我没有调用A函数,它却自动执行了。说明构造方法在创建对象的时候执行。
// aa.a1=2;
//这里会出错,因为aa中的a1是私有的,其他类不能访问它。
//所以不能给它赋值,也不能直接输出它,只能通过调用A中的show方法,才能输出它。
B bb = new B();
System.out.println("b="+bb.b);//b=0
//我没有给b初始化,b的值为0 //说明系统自动增添一个构造方法
B1 bb1 = new B1();
System.out.println("b1="+bb1.b1);//b1=0;
//没有给b1初始化,b1的值为0 //系统会把默认值赋给变量
//C cc = new C();//这里会出错,因为你写了构造方法,系统不会自动帮你增加构造方法了
//你的参数又跟你写的构造方法不一样,所以会出错会显示你没有初始化变量。
C cc = new C(1);//成功调用构造方法C(int m) 把1赋值给了m
System.out.println("c="+cc.c);//c=1;
D dd1 = new D();//D后面没有参数,所以调用无参的构造方法
dd1.show();//d1=1,d2=11;
D dd2 = new D(2);//D后面有一个参数,调用有一个参数的构造方法
dd2.show();//d1=2,d2=0;
//d2没有赋值,系统给它赋默认值0。
D dd3 = new D(3,4);//调用两个参数的构造方法
dd3.show(); //d1=3,d2=4;
}
}