类和对象

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 ); // 输出新赋予的值
}

标签

© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1