类和对象
chapter 6:类和对象(Classes and Objects)
6.1、概述
6.1.1、类
类是对某一种事物的抽象。其实类可以理解为我们自然界中常说的“类型”。例如,”人“是一个类、”猴“是一个类、“车”也是一个类,也就是说类是某种事物的概括,而对象是类的具体。
6.1.2、对象
对象是某种事物的个体,是可以明确标识的一个实体。例如,上面我们说“人”是一个类,那么一个“名为张三丰、高1.78米、重80kg“的人,此时这个人就是一个对象,因为这个人是一个实体,不是一种类型,我们可以通过这个人的特征(名为张三丰、高1.78米、重80kg)明确找到这个人。
每个对象都有自己独特的”特征“和”行为“。
6.2、类
6.2.1、声明类
编写类时,可以在类中声明字段、构造方法、方法。
声明类时使用的关键字是 class,在 class 关键字之后使用空格隔开,随后紧跟类名。
[public] class 类名 [extends 父类类名]{
}
注意:被 [ ] 包围的内容不是必须存在的,后面在声明格式里出现的[ ]都是这个意思。
例如:我们声明一个Human类。
public class Human {
//这就是一个类
}
6.2.2、字段(Field)
字段(Field)本质上就是一个变量(variable)。
字段进行的操作:赋值、取值。
字段的声明格式:
[修饰符] 类型 名称 [ =值 ];
例如,
public String name;
在类里面可以声明字段,字段本质上就是用来存储数据的变量,描述某个个体(对象)的”特征“。
例如:在下面这个Human的类里面定义了5个字段,用于描述Human某个个体的”特征“
public class Human {
String name ; // 描述Human某个个体的姓名
double weight ; // 描述Human某个个体的体重
double height ; // 描述Human某个个体的身高
int age ; // 描述Human某个个体的年龄
char gender ; // 描述Human某个个体的性别
}
}
6.2.2.1、类变量
有static修饰的成员变量(字段)被称作 类变量(static variable)
public class Sheep{
public static String school = "大肥羊学校";
}
类变量是属于类的,应该通过类来访问
- [取值] 通过类名获取类变量的值
System.out.println(Sheep.school); //static variable
- [赋值] 通过
类名.类变量名=值
的形式来为类变量赋值
Sheep.school="小肥羊火锅"; //static variable
6.2.2.2、实例变量
没有static修饰符修饰的成员变量(字段)被称作 实例变量(instance variable)
public class Sheep{
public String name; //将来是属于个体的成员变量被称作 实例变量 ( 实例字段 )
}
所有的实例变量必须通过实例来访问。因此必须首先创建类的实例
Sheep s = new Sheep(); //注意,这里的 s 是个引用变量,通过它可以找到堆(Heap)中的对象
实例变量是属于实例的,应该通过实例来访问
- [取值] 通过实例获取实例变量的值
System.out.println(s.name); //instance variable
- [赋值] 通过
引用变量.实例变量名=值
的形式来为实例变量赋值
s.name="喜羊羊"; //instance variable
6.2.3、方法(Method)
方法本质上是个动作,反应该类事物可以完成什么操作。
方法的声明格式
[修饰符] 返回类型 方法名称([参数列表])[throws 异常列表]{
//方法体
}
例如:在下面这个Human类里定义了一个名称为 ”eat “的方法,用于描述 Human这个类可以进行的操作。
public class Human {
// 字段( Field )
String name ; // 描述Human某个个体的姓名
double weight ; // 描述Human某个个体的体重
double height ; // 描述Human某个个体的身高
int age ; // 描述Human某个个体的年龄
char gender ; // 描述Human某个个体的性别
// 方法( Method )
public void eat( String foodName ) {
System.out.println( name + "吃" + foodName );
}
}
6.2.3.1、类方法
有static修饰的方法被称作类方法(static method)
public static void show() {
System.out.println( school );
}
类方法是属于类的,应该通过类来调用
- 通过
类名.类方法名称
调用类方法
Sheep.show(); //static way
6.2.3.2、实例方法
没有static修饰的方法被称作实例方法(instance method)
// 将来需要通过 个体 来调用的方法被称作 实例方法
public void show() {
System.out.println( school );
}
实例方法是属于实例的,应该通过实例来调用
- 通过
引用变量.实例方法名称
调用实例方法
s.show(); //instance way
6.2.4、构造方法(Constructor)
构造方法(constructor)是一种特殊的方法。
通过构造方法可以完成实例变量的初始化。
构造方法的声明格式
[修饰符] 类名([参数列表])[throws 异常列表]{
//方法体
}
构造方法与类名同名、不能显式书写返回类型。比如:
public class Human{
public Human(){
//注意方法名是与类名同名
}
}
注意:这里简单提到构造方法,后面会有单独一个模块详细的介绍构造方法。
6.2.5、类的成员
类的组成成员有字段和方法。
注意,实例初始化器 和 构造方法 不是类的组成成员。
6.2.5.1、字段
字段( Filed ) 是类的组成成员(member),被称作 成员变量
public class Mouse {
public String name ;
public int age ;
}
6.2.5.2、方法
方法( Method ) 是类的组成成员(member),被称作 成员方法
public void introduce() {
System.out.println( "我叫" + this.name + ",今年" + this.age + "岁" );
}
6.3、对象
6.3.1、创建对象
对象从类创建,类的对象可以调用类中的字段和方法。对象(object)也称作实例(instance)。
对象是通过对象 引用变量 来访问的,使用下面的语法格式创建对象:
类名 对象名 = new 类名();
语法解析:
- new 是关键字,用于实例化对象
- 左边的类名是对象的数据类型
- 右边的类名()称为类的构造方法
例如:创建Human类的对象
// 首先声明一个 Human 类型的变量(h)并为其赋值,然后创建一个Human对象并将其地址赋值给 h 变量
Human h = new Human();
实例化就是创建类的对象的过程,其中new关键字负责在堆内存中为对象开辟空间。
例如:创建Human这个类的对象的 过程 就是实例化
Human h = new Human();
6.3.2、访问字段
对象通过对象名访问属于实例(对象)的字段
对象名.字段
比如
s.name; //对象 s 访问 name 这个字段。
6.3.3、调用方法
对象通过对象名调用属于实例(对象)的方法
对象名.方法名称(参数);
比如
s.show() //对象 s 调用 show 方法。
这里准确来说应该是 main 方法 调用了 s 的 show() 方法。
6.4、初始化
6.4.1、实例初始化器(instance initializer)
实例化初始器,也被称作对象初始化器(object initializer),通常在大多数资料上,管实例初始化器叫做普通代码块。实例化初始器的作用是,在创建类的实例时用来初始化实例中的字段。
实例初始化器用于在 实例初始化 阶段完成对 实例变量 的初始化操作
直接在类体括号中书写【没有static修饰】的代码块就是实例初始化器
{
System.out.println( "Monkey : instance initializer" );
System.out.println( this.name ); // 输出默认值
// 实例初始化器用于在 实例初始化 阶段完成对 实例变量 的初始化操作
this.name = "猴儿" ;
System.out.println( this.name );
}
6.4.2、类初始化器(static initializer)
类初始化器用于在类初始化阶段完成对 类变量 的初始化操作。
直接在类体括号中书写由static修饰的代码块就是类初始化器
static {
System.out.println( "Sheep : static initializer" );
System.out.println( school ); // 输出默认值
// 类初始化器用于在类初始化阶段完成对 类变量 的初始化操作
school = "大肥羊学校" ;
System.out.println( school ); // 输出新赋予的值
}
近期评论