1.什么是构造器
一个在创建对象时被自动调用的特殊方法。
目的:用构造器确保初始化。在Java中,通过提供构造器,类的设计者可确保每个对象都会得到初始化。创建对象时,如果其类具有构造器,Java 就会在用户有能力操作对象之前自动调用相应的构造器,从而保证了初始化的进行。
Person p1 = new Person();
其中Person()就是调用类的构造器的意思。
2.构造器的使用
(1)语法格式:
修饰符 类名 (参数列表) {
初始化语句;
}
(2)注意事项
- 1.构造器的修饰符可以是默认的
- 2.构造器没有返回值
- 3.方法名和类的名字必须一样
- 4.参数列表和成员方法一样的规则
- 5.构造器的调用,由系统来完成的
- 6.Java语言中,每个类都至少有一个构造器
- 7.默认构造器的修饰符与所属类的修饰符一致
- 8.一旦显式定义了构造器,则系统不再提供默认构造器
- 9.一个类可以创建多个重载的构造器
- 10.父类的构造器不可被子类继承
- 11.不能写void
class Person {
String name; //null
int age; //0
//构造器
public Person(String name, int age) {
System.out.println("构造器被调用~~完成对象的初始化");
this.name = name;
this.age = age;
}
public Person(String pName){
System.out.println("只有名字的构造器被调用");
name=pName;
}
public Person() {
//这个就是无参构造器
age = 18;
}
}
3.this关键字
(1)作用
(1)this调用本类中的属性,也就是类中的成员变量;
(2)this调用本类中的其他方法;
(3)this调用本类中的其他构造方法,调用时要放在构造方法的首行。
Public Class Student {
String name; //定义一个成员变量name
private void SetName(String name) { //定义一个参数(局部变量)name
this.name=name; //将局部变量的值传递给成员变量
}
}
(2)this关键字注意事项
-
1.this关键字可以访问本类中的属性,方法,构造器
-
2.this用于区分当前类的属性和局部变量
-
3.访问this成员的方法:this.方法名(参数列表)
-
4.访问构造器的语法:this(参数列表);
注意只能在构造器中使用,只能在构造器中访问另外一个构造器,必须放在第一条语句中
-
5.this关键字只能在方法内使用,方法外使用是编译不通过的!!!
public static void main(String[] args) {
Dog dog1 = new Dog("大壮", 3);
System.out.println("dog1 的 hashcode=" + dog1.hashCode());
//dog1 调用了 info()方法 dog1.info();
System.out.println("============");
Dog dog2 = new Dog("大黄", 2);
System.out.println("dog2 的 hashcode=" + dog2.hashCode());
dog2.info();
}
class Dog{
String name;
int age;
//public Dog(String dName,int dAge){//构造器
// name = dName;
// age = dAge;
//}
//如果我们构造器的形参,能够直接写成属性名,就更好了
//但是出现了一个问题,根据变量的作用域原则
//构造器的 name 是局部变量,而不是属性
//构造器的 age 是局部变量,而不是属性
//==> 引出 this 关键字来解决
public Dog(String name, int age) {//构造器
//this.name 就是当前对象的属性 name
this.name = name;
//this.age 就是当前对象的属性 age
this.age = age;
System.out.println("this.hashCode=" + this.hashCode());
}
public void info() {//成员方法,输出属性 x 信息
System.out.println("this.hashCode=" + this.hashCode());
System.out.println(name + "\t" + age + "\t");
}
}