3.1 Java 复习之 对象和类

2021-12-22
3 min read
Featured Image

一个类可以包含以下类型变量:

  • 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中, 方法结束后,变量就会自动销毁。
  • 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量 可以被类中方法、构造方法和特定类的语句块访问。
  • 类变量:类变量也声明在类中,方法体之外,但必须声明为 static 类型。

构造方法

每个类都有构造方法。如果没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法

在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。

下面是一个构造方法示例:

public class Cat{
	public Cat(){
	
	}
	
	public Cat(String name){
	// 构造器有一个参数 name
	}
}

创建对象

对象是根据类创建的。在Java中,使用关键字 new 来创建一个新的对象。创建对象需要以下三步:

  • 声明:声明一个对象,包括对象名称和对象类型。
  • 实例化:使用关键字 new 来创建一个对象。
  • 初始化:使用 new 创建对象时,会调用 构造方法 初始化对象。
public class Cat{
    public Cat(String name){
        // Constructor parameter: name
        System.Out.println("The name of cat is" + name);
    }
    public static void main(String[] args){
        // Create an object of Class Cat
        Cat myCat = new Cat("Sam");
    }
}

编译运行以上程序结果:

The name of cat is Sam

一个例子:

public class Cat {
    int catAge;
    public Cat(String name){
        // 构造器
        System.out.println("The cat name is " + name);
    }

    public void setAge(int age){
        catAge = age;
    }

    public int getAge(){
        System.out.println("The cat age is" + catAge);
        return catAge;
    }

    public static void main(String[] args){
        Cat myCat = new Cat("Sam"); // 创建对象
        myCat.setAge(2); // 方法设定年龄
        myCat.getAge();// 方法调用年龄
        System.out.println("The cat age is " + myCat.catAge);
    }
}

输出:

PS D:\Java\JavaBaiscs> java Cat.java
The cat name is Sam
The cat age is2 
The cat age is 2

源文件声明规则

当在一个源文件中定义多个类,并且还有import语句和package语句时,要特别注意这些规则:

  • 一个源文件中只能有一个 public 类

  • 一个源文件可以有多个非 public 类。

  • 源文件的名称应该和 public 类的类名保持一致。

  • 如果一个类定义在某个包中,那么 package 语句应该在源文件的首行。

  • 如果源文件包含 import 语句,那么应该放在 package 语句和类定义之间。如果没有 package 语句,那么 import 语句应该在源文件中最前面。

  • import 语句和 package 语句对源文件中定义的所有类都有效。


一个简单的例子

创建一个类

import java.io.*;

public class Employee{
    // 变量
    String name;
    int age;
    double wage;
    String title;
    // 构造器
    public Employee(String name){
        this.name = name; // 类变量name赋值
    }

    public void setAge(int age){
        this.age = age;
    }

    public void setTitle(String title){
        this.title = title;
    }

    public void setWage(double wage){
        this.wage = wage;
    }

    public void printEmployee(){
        System.out.println("Name:" + name);
        System.out.println("Age:" + age);
        System.out.println("Title:" + title);
        System.out.println("Wage:" + wage);
    }
}

创建类的实例对象, 写入main方法.

java因强制要求类名(唯一的public类)和文件名统一,因此在引用其它类时无需显式声明。在编译时,编译器会根据类名去寻找同名文件。

import java.io.*;

public class EmployeeTest {
    // Creat Object
    public static void main(String[] args) {
        Employee empAlex = new Employee("Alex");
        // Employee empSam = new Employee("Sam");
    
        empAlex.setAge(26);
        empAlex.name = "Alex ";
        empAlex.title = "Engineer"; //直接定义变量
        empAlex.setTitle("Engineer");//通过方法赋值
        empAlex.setWage(26.44);
        empAlex.printEmployee();
    }
}

运行结果:

Name:Alex 
Age:26
Title:Engineer
Wage:26.44
Avatar
Aaron Fan My research interests include machine learning, signal processing, web development and robotics.