类是什么?
类在面向对象的编程范式的基本单位。它们用作模板来创建对象。
Java中的类可以包含五个组件:
- 字段(域)
- 方法
- 构造器(也叫构造函数)
- 静态初始化器
- 实例初始化程序
字段和方法也称为类的成员。类和接口也可以是一个类的成员。类可以有零个或多个类成员。
构造函数用于创建类的对象。所以必须至少有一个类的构造函数。
初始化器用于初始化类的字段。在一个类中可以有零个或多个静态或实例类型的初始化器。
声明一个类
在Java中声明类的一般语法如下 -
<modifiers> class <class name> {
// Body of the class
}
关键字 class
用于声明一个类。
<class name>
是用户定义的类名称,它应该是有效的标识符组成。
每个类都有一个主体(body),它在一对大括号({}
)中指定。类的主体包含其不同的组件,例如字段,方法等。
下面的代码定义了一个名为Dog
的类,它具有一个空主体。Dog
类不使用任何修饰符。如下代码所示 -
class Dog {
// 主体是空的,什么也没有定义
}
类中的字段
类的字段表示类的属性。
Dog
类的每个对象都有两个属性:名称(name
)和性别(gender
)。Dog
类应包括两个字段的声明:一个表示名称,一个表示性别。
这些字段在类的主体中声明。 在类中声明一个字段的一般语法是 -
<modifiers> class className {
<modifiers> <data type> <field name> = initialvalue
<modifiers> <data type> fieldName
}
<modifiers> class className {
<modifiers> <data type> <field name> = initialvalue
<modifiers> <data type> fieldName
}
字段声明可以使用零个或多个修饰符。字段的数据类型位于其名称之前。 或者还可以使用值来初始化每个字段的值。
以下代码显示如何向Dog
类添加字段:
class Dog {
String name
String gender
}
在java中,一般是用大写字母开始一个类的名称(比较规范,推荐的用法),并大写后续的单词,例如:Table
,FirstTime
,OrderDetail
等等。而使用 table
,firstTime
,order_detail
等这样的形式来命名类不是一个规范的作法。
字段和方法的名称应以小写字母开头,后面的单词的第一个字母应该大写,例如:name
,firstName
,orderList
等等。
Dog
类声明两个字段:name
和 gender
。两个字段都是可存储字符串的String
类型。Dog
类的每个实例都有这两个字段的副本。
Java中一个类有两种类型的字段:
- 类字段
- 实例字段
有时属性属于类本身,不属于该类的任何特定实例。
所有狗的数量应属于狗类本身。狗的数量不存在于狗类的任何特定实例。
只有一个类属性的副本存在,而不考虑实例数。类字段也称为类变量。实例字段也称为实例变量。
name
和 gender
是Dog
类的两个实例变量。而类的变量必须使用static
关键字作为修饰符声明。
以下代码带中,Dog
类的声明有一个类变量 - count
。如下所示 -
class Dog {
String name // An instance variable
String gender // An instance variable
static long count // A class variable because of the static modifier
}
类变量称为静态变量。 实例变量被称为非静态变量。
使用示例
在这个示例中,定义一个 Dog
类,并实例化三个 Dog
类的实例,每次实例化类的实例时,自动将类变量count
的值加1
,用来统计当前有多少 Dog
类被实例化。
class Dog {
String name // An instance variable
String gender // An instance variable
static long count // A class variable because of the static modifier
Dog(String name, String gender){
this.name = name
this.gender = gender
// 每实例化一个对象, 类变量 count 的值加 1 。
count = count + 1
}
}
class Main {
public static void main(String[] args) {
Dog dog1 = new Dog("旺财", "公")
Dog dog2 = new Dog("阿贵", "公")
Dog dog3 = new Dog("悠悠", "母")
// 以下都是访问类变量的方法
System.out.println("dog1.count=>"+dog1.count)
System.out.println("dog2.count=>"+dog2.count)
System.out.println("dog3.count=>"+dog3.count)
System.out.println("Dog::count=>"+Dog.count)
}
}
执行上面代码,得到如下结果 -
dog1.count=>3
dog2.count=>3
dog3.count=>3
Dog::count=>3