1.构造方法:
1.1.作用:给成员变量赋初值
1.2.与类同名,没有返回值类型(连void都没有)
1.3.在创建对象时被自动调用
1.4.若自己不写构造方法,编译器会默认提供一个无参的构造方法,若自己写了构造方法,则不提供默认方法
1.5.构造方法可以重载
2.this:
指代了当前对象,哪个对象调用了方法就指代哪个对象
关键字,只能用在方法中,方法中访问成员变量之前默认有个this.
this的用法:this.成员变量名---------访问成员变量
成员变量与局部变量重名时,若想访问成员变量,则this不能省
this.方法名()-------调用方法(一般不用)
3.构造方法的定义要求
1.构造方法的名称要和类名一致。
2.构造方法不允许有返回值类型声明。
有参和无参构造方法
public class Car { //设计一个Car类
private String model; //型号
private String color; //颜色
//无参构造方法
public Car(){
}
//有参构造方法
public Car(String model,String color){
this.model=model;
this.color=color;
}
@Override
public String toString() { //重写toString用来输出对象
return "Car{" +
"model='" + model + '\'' +
", color='" + color + '\'' +
'}';
}
public static void main(String[] args) {
Car car1=new Car(); //调用无参构造方法初始化第一个对象
System.out.println(car1);
Car car2=new Car("宝马","白色"); //调用有参构造方法初始化第二个对象
System.out.println(car2);
}
}
getter和setter方法
优点
满足面向对象语言封装的特性
尽可能将类中的属性定义为private,针对属性值的访问与修改使用相应的getter、setter方法,不是直接通过对public属性进行读取修改。
有利于统一控制
直接通过对public属性进行读取修改和没有业务逻辑的getter/setter效果一样,但是前者难以应对业务的变化。比如,如果业务需要对某个属性进行修改权限控制,如果有setter作为统一的属性修改方法则更容易实现,这种情况在一些使用反射的框架中作用尤其明显。比如Spring框架中,通过getter/setter获取Bena和注入Bena;Mybatis框架通过注解操作数据库时,就是通过setter将查询的值赋给pojo对象;在Java web中统一封装返回对象,json序列化时,也是通过getter获取属性值。
class User {
private String name;
private Integer age;
public String getName(){
return name;
}
public Integer getAge(){
return age;
}
public void setName(String name){
this.name = name;
}
public void setAge(Integer age){
this.age = age;
}
}