用构造器初始化
在创建对象的时候,如果其类具有构造器,Java就会在用户有能力操作对象之前自动调用相应的构造器,从而保证了初始化的进行。Java中构造器采用与类相同的名称。
构造器其实是一种特殊的方法,因为它没有返回值。这个与返回值为空(NULL)是不一样的。
下面以练习2为例,来说明构造器的初始化。
public class E02 {
String s1 = "HelloWorld";
String s2;
public E02(String s2i){
s2 = s2i;
}
public static void main(String args[]){
E02 si = new E02("HelloWorld");
System.out.println("si.s1 = " + si.s1);
System.out.println("si.s1 = " + si.s2);
}
}
运行结构如下:
关于默认构造器
如果我们写的类中没有构造器,编译器会自动帮助我们构造一个默认的构造器。
class Dog{}
public class Constructor {
public static void main(String[] args){
Dog dog = new Dog();
System.out.print(dog);
}
}
运行结果如下:
Test.Dog@1db9742
如果已经定义了一个构造器,无论是否有参数,编译器就不会自动创建默认构造器了。而且会报错!如下图!
方法重载
所谓方法的重载就是让方法名相同而形参名不同或者形参的个数、顺序不同,说白了就是每个重载的方法都必须有一个独一无二的参数类型列表。示例如下:
class Dog{
void shout(int i){
System.out.println("barking!");
}
void shout(double j){
System.out.println("howling!");
}
void shout(int i,double j){
System.out.println("shit!");
}
void shout(double i,int j){
System.out.println("shitshitshit!");
}
}
public class Constructor {
public static void main(String[] args){
Dog dog = new Dog();
dog.shout(1.0);
dog.shout(1);
dog.shout(1, 1.0);
dog.shout(1.0, 1);
}
}
运行结果如下:
注意,我们是不能以方法的返回值的不同来区分方法的!具体可以看《Java编程思想》Page82。
方法和构造器的区分主要有一下两点:
1、方法是有返回值的,即使为void,而构造器没有。
2、构造器的名字是和类名一样的,方法名我们一般不与类名命名成一样,不过即使命名成一样,也是可以的。但是对于新手来说,是个明显的提示。