构造函数

类的构造函数:


    构造函数一必须要与类名相同 二构造函数不能有返回值(连void都不能有)。构造函数会被类自动调用。可以有多个构造函数 但是在生成一个类的对象时只能调用一个构造函数


    平时,我们给外部类进行赋值等操作时,需要先给这个类生成一个对象,然后才能进行相应操作,但如果想要在定义对象的同时进行这些操作,就需要用到构造函数,下面举一个例子

例1:

class A {
	public A() {
		System.out.printf("据说今天有雨!\n");
	}
	
	public void B(){
		System.out.printf("考试将至,要好好复习!\n");
	}
}

public class Test {
	public static void main(String[] args) {
		A a = new A();
		a.B();
	}
}

在本程序中,A()是一个构造方法,而B()是一个普通的方法。当在main()方法中定义类A的对象时,会自动调用A的构造方法,所以执行了第3行语句,最终输出结果为:

据说今天有雨!

B()是普通方法,只有当用14行代码调用B()方法时,它才会执行


当有两个构造函数时,其参数必定不相同,因为若参数相同,则程序不知该调用哪个构造函数而报错,只有有不同的参数,才能区分以调用

下面再举一个例子

例2:

class A {
	public A() {
		System.out.printf("据说今天有雨!\n");
	}
	
	public A(int i){
		System.out.printf("%d:考试将至,要好好复习!\n", i);
	}
}

public class Test {
	public static void main(String[] args) {
		A a1 = new A();
		A a2 = new A(9);
	}
}

输出结果为:

据说今天有雨!

9:考试将至,要好好复习!

由上面de程序可以看出,第13行定义对象时调用了第一个构造函数,第14行定义对象时调用了第二个构造函数

如果在A()前面加一个返回类型,哪怕是void,则void A()就是一个普通的方法

示例如下

例3:

class A {
	public A() {
		System.out.printf("据说今天有雨!\n");
	}
	
	public void A(){
		System.out.printf("考试将至,要好好复习!\n");
	}
}

public class Test {
	public static void main(String[] args) {
		A a = new A();
		a.A();
	}
}

还有一个知识点,如果没有对局部变量进行初始化或赋值,则程序会报错,而若是变量为类的属性,则系统会给其赋予默认值,示例如下

例4:

class A {
	int i;
	public A() {
		System.out.printf("i = %d:据说今天有雨!\n", i);
	}
}

public class Test {
	public static void main(String[] args) {
		A a = new A();
		
//		int k;
//		System.out.printf("%d\n", k);
	}
}

输出结果为:

i= 0:据说今天有雨!


而第12、13行代码必须注释掉,否则编译器会报错


另外,一个类中的数据成员

        1、 如果在定义的时候不初始化,则它的值是系统自动分配好的默认值! 如int型为零 boolean型是false

        2、如果在定义的同时赋初值, 则是可以的,也就是说该值是生效的.注意在C++中则不可以,在C++中一个类的数据成员不能在定义的同时初始化,它只能在构造函数中初始化

        3、如果在定义的同时赋初值,当然生效,但如果在构造函数中又改变了定义时赋的初值,则该数据成员最终的值就是构造函数中修改之后的那个值,因为:系统会先执行定义时赋的初值,然后再执行构造函数中赋的初值

示例如下

例5:

class A
{
	int i;
	int j = 10;
	boolean flag;

	void show()
	{
		System.out.println("i = " + i);
		System.out.println("j = " + j);		
		System.out.println("flag = " + flag);
	}
}

class B
{
	int i;
	int j = 10;
	boolean flag;

	public B()
	{	
		System.out.println("以前的值是 " + i + "  " + j + " " + flag);

		i = 88;
		j = 88;
		flag = true;
	}

	void show()
	{
		System.out.println("i = " + i);
		System.out.println("j = " + j);		
		System.out.println("flag = " + flag);
	}
}

class Test
{
	public static void main(String[] args)
	{
		A aa1 = new A();
		aa1.show();

		B bb1 = new B();
		bb1.show();
	}
}

输出结果为:

i = 0

j = 10

flag = false

以前的值是 0  10 false

i = 88

j = 88

flag = true


总结:

        在一个类中可以定义多个函数名与类名相同但却有返回值的函数,

返回值为void 或int 或 double都可以,这些有返回值的函数只要

能满足重载特点,就可以同时存在一个类中,不过要注意:这些有返回值的函数(包括返回值为void的函数)都不是构造函数,都不会被类对象自动调用


    当然也可以定义多个没有任何返回值的函数,注意连void都不可以加,

这些函数才是构造函数


而一旦编程者为类定义了构造方法,系统就不再提供默认的构造方法

构造函数的主要作用是完成对类对象的初始化工作。


【所有代码均在windows系统下eclipse环境JDK 1.7下运行通过】

(如有错误,敬请指正)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值