Java——对象与类(用户自定义类)

文章目录

    • 用户自定义类
      • Employee类
      • 多个源文件的使用
      • 刨析Employee类
      • 从构造器开始
      • 封装的优点
      • 基于类的访问权限
      • final实例域

用户自定义类

如何设计主力类,通常这些类没有main方法,却有自己的实践域和实例方法。要想创建一个完整的程序,应该将若干类组合在一起,其中只有一个类有main方法。

Employee类

在Java中,最简单的类定义形式为:

class ClassName
{
     
    field1
    field2
    ...
    constructor1
    constructor2
    ...
    method1
    method2
    ...
}

薪金管理系统的实际应用:

import java.time.*;

/**
 * @author YeSuX
 */
public class EmployeeTest
{
     
    public static void main(String[] args) 
    {
     
        Employee[] staff = new Employee[3];     //创建一个可以存储3个Employee对象的staff数组

        staff[0] = new Employee("Carl Cracker",75000,1987,12,15);
        staff[1] = new Employee("Harry Hacker",50000,1987,10,1);
        staff[2] = new Employee("Ton Tester",40000,1990,3,15);
        //数组初始化

        for (Employee e : staff) {
     
            e.raiseSalary(5);
        }
            //每个人工资提高5%

        for (Employee e : staff) {
     
            System.out.println("name=" + e.getName() + ",salary=" + e.getSalary() + ",hireDay="
                + e.getHireDay());
        }
    }
}

/**
 * Employee
 */
class Employee {
     
    private String name;
    private double salary;
    private LocalDate hireDay;      //定义LocalDate对象变量hirDay

    public Employee(String n, double s, int year, int month, int day)
    {
     
        name = n;
        salary = s;
        hireDay = LocalDate.of(year, month, day);
    }

    public String getName()
    {
     
        return name;
    }

    public double getSalary()
    {
     
        return salary;
    }

    public LocalDate getHireDay()
    {
     
        return hireDay;
    }

    public void raiseSalary(double byPercent) 
    {
     
        double raise = salary *byPercent/100;
        salary += raise;
    } 
}

多个源文件的使用

许多程序员习惯于将每一个类存在一个单独的源文件中。例如,将Employee类存放在文件Employee.java中,将EmployeeTest类存放在文件EmployeeTest.java中。
若喜欢这样组织文件,将可以有两种编译源程序的方法。javac Employee*.java或者javac EmployeeTest.java

刨析Employee类

该类包含一个构造器和4个方法

public Employee(String n, double s, int year, int month, int day)
public String getName()
public double getSalary()
public LocalDate getHireDay()
public void raiseSalary(double byPercent) 

该类中有三个实例域用来存放将要操作的数据

    private String name;
    private double salary;
    private LocalDate hireDay;

可以用public标记实例域,但是这一做法完全破环了封装。因此,这里强烈建议将实例域标记为private。

从构造器开始

    public Employee(String n, double s, int year, int month, int day)
    {
     
        name = n;
        salary = s;
        hireDay = LocalDate.of(year, month, day);
    }

构造器与类同名。在构造Employee类的对象时,构造器会运行,以便将实例域初始化为所希望的状态。构造器总是伴随着new操作符的执行被调用,而不能对一个已经存在的对象调用构造器来达到重新设置实例域的目的。

  1. 构造器与类同名
  2. 每个类可以有一个以上的构造器
  3. 构造器可以有0个、1个或多个参数
  4. 构造器没有返回值
  5. 构造器总是伴随着new操作一起调用
  6. 不要在构造器中定义与实例域重名的局部变量

封装的优点

  1. 可以改变内部实现,除了该类的方法之外,不会影响其他代码
  2. 更改器方法可以执行错误检查,然而直接对域进行赋值将不会进行这些处理
    注意:不要编写返回引用可变对象的访问器方法

基于类的访问权限

一个方法可以访问所属类的所有对象的私有数据。

final实例域

final修饰符大都应用于不可变类的域:如果类中的每个方法都不会改变其对象。必须确保在每个构造器执行之后,这个域的值被设置,并且在后面的操作中,不能够再对它进行修改。

class Employee
{
     
    private final String name;
    ...
}

你可能感兴趣的:(Java)