总述
类在面向对象编程中是一个最基本的概念。类是对象的模板,用于产生具有相同结构的对象。一个类通常由属性和行为构成。
定义一个类
Java 中使用关键字 class
来定义类
public class Person {
// 属性
private int age;
// 行为
public void say(String message) {
System.out.println(message);
}
}
新建一个类的实例则使用关键字 new
Person person = new Person();
Setter 与 Getter
一般来说由于类的封装性以及 Java Bean 的规约,在 Java 中通常将属性声明为私有属性,然后提供公有的 Setter 和 Getter 方法来修改和访问属性。
最常见的 Setter
public void setAge(final int age) {
this.age = age;
}
最常见的 Getter
public int getAge() {
return age;
}
构造方法
构造方法在类中用于构造对象,提供一些在对象创建时就应该被赋予的属性。在 Java 中,默认每个类都有一个无参的构造方法,但是如果你已经在类中定义了构造方法,那么默认的无参构造方法就不会被创建。
在 Java 中,一般都会提供了一个可以为所有公开属性赋值的构造方法,然后重载只有定义属性的构造方法,并且在这些构造方法中调用拥有所有公开属性的构造方法。
public class Man {
private String name;
private int age;
private final String from = "USA";
private String description = "none";
public Man() {
}
public Man(String name, int age, String description) {
this.age = age;
this.description = description;
this.name = name;
}
public Man(String name, int age) {
this(name, age, null);
}
public Man(int age) {
this(null, age);
}
public Man(String name) {
this(name, 0);
}
}
基于构造方法构建实例
Man fred = new Man("Fred", 21);
Man peter = new Man("Peter");
Man jack = new Man(21);
可以看到,如果一个类属性很多并且在构造时有多种途径时,那么重载构造方法会是一种非常繁琐无聊的工作。
不可变对象
不可变对象在并发编程中占有非常重要的地位。但是Java 中并没有提供用于产生不可变对象的类,你必须手动定义才行。最简单的定义方法就是将类的所有属性声明为 private final
并且在构造方法中构造所有属性,且不提供任何 Setter 方法,Getter 方法只返回基本类型数据或者引用类型数据的不可变形态或副本。
public class ImmutableSong {
private final String name;
private final String artist;
private final Date publishDate;
public ImmutableSong(final String name,
final String artist,
final Date publishDate) {
this.artist = artist;
this.name = name;
this.publishDate = publishDate;
}
public String getArtist() {
return artist;
}
public String getName() {
return name;
}
public Date getPublishDate() {
return new Date(publishDate.getTime());
}
}
项目源码见 JGSK/_15_class