背景:java类和对象的关系?类是java中的基本程序单元,关键字class来定义,类是java中描述事务的,对象是该类事务中具体的个体;java中申明任何变量必须要定义数据类型。
1、类class,描述事务的属性,行为。
public class Car {
// 私有修饰符,定义成员变量
private String color;
private String make;
private String model;
private int year;
public void run() {
System.out.println("汽车开动了...");
}
}
外部类调用私有成员变量时,需要通过this关键字指定,哪个对象调用就把哪个变量给谁,eclipse有快速创建setters方法。
2、封装:隐藏实现细节,私有修饰成员变量,对外使用公共访问方式,使用setters()和getters()公共方法。
public class Car {
// 私有修饰符,定义成员变量,本类中可直接访问
private String color;
private String make;
private String model;
private int year;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getMake() {
return make;
}
public void setMake(String make) {
this.make = make;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public int getYear() {
return year;
}
// 私有修饰符成员变量,封装,对外使用公共的方法来访问,安全性
public void setYear(int year) {
if (year > 2000) {
this.year = year;
} else {
System.out.println("年份无效...");
}
}
/*
* this关键字作用: 1. 如果存在同名成员变量与局部变量时,在方法内部默认是访问局部变量的数据,可以通过this关键字指定访问成员变量的数据。
* 2. 在一个构造函数中可以调用另外一个构造函数初始化对象。
*/
public void run() {
this.getColor();
System.out.println("汽车开动了..." + this.getColor());
}
}
3、上面对事物的属性和行为进行了描述, 封装好了,那么在外部怎么调用了?new关键字是创建对象时使用的。
public class MethodDemo {
public static void main(String[] args) {
Car bmw = new Car();
bmw.setMake("德国");
System.out.println(bmw.getMake());
bmw.run();
bmw.setModel("320Li");
System.out.println(bmw.getModel());
System.out.println(bmw.getColor());
// 对这个year参数(属性)进行了条件判断,通过set方法来设值,满足条件才能get返回数据。
bmw.setYear(1999);
System.out.println(bmw.getYear());
}
}
思考:同样是通过new关键字来创建对象,下面有什么不一样?
//假设一个构造函数 contract_demo(),下面创建对象:
contract_demo con=new contract_demo();
new contract_demo();
//上面有什么不一样?
一个是用对象的引用去调用方法,一个是用对象调用方法。
con是指向一个可以指向Contract类的对象的引用
引用是放在栈区的,而new的对象是放在堆里的