Java 中主要的面向对象构造是_类_,它把数据(字段,又称实例变量)和行为(方法)组合在一起。类的字段和方法称为它的_成员_。
可以通过访问修饰符来控制对成员的访问,其中最常见的两个是:
在 Java 中,如果没有指定访问修饰符,默认是_包可见性_。此时,该成员对定义在同一个包中的所有类可见。
上面这种把相关的数据和行为组合在一起,并限制对成员的访问的做法,称为封装,它是面向对象的核心概念之一。
你可以把类看作创建该类实例的模板。要创建类的实例(也称为_对象_),需要使用new关键字:
class Car {
}
// Create two car instances
Car myCar = new Car();
Car yourCar = new Car();
字段有类型和名字(使用 camelCase 命名),可以定义在类中的任意位置(类名使用 PascalCase 命名)。
class Car {
// Accessible by anyone
public int weight;
// Only accessible by code in this class
private String color;
}
你可以选择为字段赋一个初始值。如果字段_没有_指定初始值,它会被设为其类型的默认值。实例的字段值可以用点号表示法访问和更新。
class Car {
// Will be set to specified value
public int weight = 2500;
// Will be set to default value (0)
public int year;
}
Car newCar = new Car();
newCar.weight; // => 2500
newCar.year; // => 0
// Update value of the field
newCar.year = 2018;
私有字段通常是在调用方法时作为副作用被更新的。这类方法通常不返回任何值,这时返回类型应该是void:
class CarImporter {
private int carsImported;
public void importCars(int numberOfCars)
{
// Update private field
carsImported = carsImported + numberOfCars;
}
}
注意,在 Java 类中使用公有字段并不常见。通常使用的是私有字段,并通过getter 和 setter来访问。
在类中,this关键字指的是当前类。当形参与字段同名时,这一点尤其有用:
class CarImporter {
private int carsImported;
public void setImportedCars(int carsImported)
{
// Update private field from public method
this.carsImported = carsImported;
}
}