java===java基础学习(7)---用户自定义类

package testbotoo;
import java.util.*;

public class EmployeeTest
{
    public static void main(String[] args)
    {
        Employee[] staff = new Employee[3];
        staff[0] = new Employee("liming", 75000, 1987, 12, 15);
        staff[1] = new Employee("xiaoming", 70000, 1999, 12, 12);
        staff[2] = new Employee("xiaoli", 20000, 2001, 12, 23);
        
        for (Employee e :staff)   // e---Element (在集合中使用,因为集合中存放的是元素),这里和python中的i一样,for i in list:   i.raiseSalary(5)
            e.raiseSalary(5);
        
        for (Employee e :staff)
            System.out.println("name="+e.getName()+",salary="+e.getSalary()+",hireDay="+e.getHireDay());
     
    }    
    
}

class Employee{
    
    private String name;
    private double salary;
    private Date hireDay;
    
    public Employee(String n, double s, int year, int month, int day){
        name = n;
        salary = s;
        GregorianCalendar calendar = new GregorianCalendar(year, month -1, day);
        hireDay = calendar.getTime();        
    }
    
    public String getName(){
        return name;
    }
    
    public double getSalary(){
        return salary;
    }
    
    public Date getHireDay(){
        return hireDay;
    }
    
    public void raiseSalary(double byPrecent){
        double raise = salary * byPrecent / 100;
        salary += raise;
    }
    
}

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

public Employee(String n, double s, int year, int month, int day)

public String getName()

public double getSalary()

public Date getHireDay()

public void raiseSalary( double byPrecent)

这个类的所有方法都被标记为public, 关键字public意味着任何类的任何方法都可以调用这些个方法(共有四种访问级别)

实例域,强烈建议实例域标记为private:

private String name;
private double salary;
private Date hireDay;

构造器,构造器和类同名,在构造Employee类的对象时,构造器会运行,以便将实例域初始化为所希望的状态!

public Employee(String n, double s, int year, int month, int day){
        name = n;
        salary = s;
        GregorianCalendar calendar = new GregorianCalendar(year, month -1, day);
        hireDay = calendar.getTime();        
    }
  1. 构造器与类同名
  2. 每个类可以有一个以上的构造器
  3. 构造器可以有0个,1个或者多个参数
  4. 构造器没有返回值
  5. 构造器总是伴随着new操作一起调用

隐式参数与显示参数:

  raiseSalary 方法有两个参数,第一个为隐式参数,出现在方法名前的Employee类对象。第二个参数位于方法名后面括号中的数值,这是一个显式参数

  显示参数明显的列在方法声明中的,例如double byPrecent

  在每一个方法中,关键字this表示隐式参数。如果需要,可以使用这样的方式编写:

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

封装的优点:

  getName(), getSalary(), getHireDay()

都是典型的访问器方法,由于只返回实例域值,因此又称域访问器。

原文地址:https://www.cnblogs.com/botoo/p/8708350.html