构造方法在类体中要后于成员变量的出现,因为类在产生的时候首先要声明类中的那几个成员变量,然后执行构造方法。
还可以在声明new对象的时候,给个参数,给到构造方法中。
这个时候就会报错,因为main中使用了有参构造犯法,而类中虽然有有参构造方法,但是此时默认的无参构造方法已经被削,所以main中再调用无参构造方法时就会报错。此时可以再在类中手动加上无参构造方法。
方法名字相同,但是参数列表不同的方法之间构成重载,overload。
由于方法的返回值在main中可以不接,所以返回值不同并不属于重载。
能否分得清是区别是不是重载的最根本原则。
代表当前 正在 调用 的对象 的理解:谁调用这个方法,就代表谁。
是当前类的引用变量,所以可以引用/代表/记录一个对象。 所以不管在构造方法还是成员方法中都代表main中正在引用或者构造的对象/当前对象自己。
在main中引用变量要加.,但是在类的内部不需要,就是因为this省略了。
由于this的存在,形参和成员变量名尽量保持不一致。
等号左边的是成员变量name和age,但是遵循就近原则,所以此时等号左边的name和age就是它上面小括号里面的刚定义的name 和age,因此这句话相当于自己给自己赋值,没有任何变化,所示age是0,name是null。
解决方法:
加上this之后代表: 左边的name和age都是当前对象的name和age,而不是局部变量。
虽然形参和成员变量相同时会混淆,但是为了读代码方便,还是尽量一致,因此这个时候(一样的时候)每当使用成员变量时都要在前面加上一个this.,代表使用的是成员变量。
this就是为了避免歧义而使用的。
package Lianxi;
public class Student {
//1.私有化成员变量,使用priviate关键字修饰
private int id;
private String name;//私有化,只能在类的内部使用
//2.提供共有的get set方法,并在方法体中进行方法体的合理值判断
//使用public修饰,也就是该方法可以在任何位置使用
public Student(){}
public Student(int id, String name){
//this.id=id;
// this.name=name;
//在共有的构造方法中调用set方法进行合理值判断
this.setId(id);
this.setName(name);
}
public int getId(){
return id;
}
public void setId(int id){
if(id > 0) {
this.id = id;
}else {
System.out.println(“学号不合理”);
}
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name ;
}
public void show(){
System.out.println("我是"+name+" "+"学号是"+id);
}
}
package Lianxi;
public class StudentTest {
public static void main(String[] args){
Student s1 = new Student();
s1.setId(-1001);
s1.setName(“zhang”);
s1.show();
System.out.println(“我是”+s1.getId()+",学号是"+s1.getName());
System.out.println("---------");
Student s2=new Student(-10,“zhangfei”);
s2.show();
}
}