类的构造函数:
构造函数一必须要与类名相同 二构造函数不能有返回值(连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下运行通过】
(如有错误,敬请指正)