image

 

import java.time.*;
public class ClassNote {
    public static void main(String[] args)
    {    
        /*
         【语句释义】声明并初始化staff数组,存放的数组元素是Employee类的对象,长度是3
         1、Employee[] staff:①Employee表示这个数组中存放的元素是Employee类的对象;②[]告诉编译器这是个数组;③staff数组名称;
         2、new Employee[3]:①new在内存中创建一个实际的数组对象;②[3]数组长度为3,索引分别为0、1、2
         3、为什么等号左右都需要写Employee?
           - 等号左边是声明,等号右边是初始化。
           - Java是一门强类型语言,它的语法要求非常严谨,声明和初始化是两个严格分离地步骤。
           - 声明只是告诉编译器这个数组的类型是什么,此时只知道需要创建这样一个数组,所以仅为变量在栈内存Stack分配了空间,默认值为null,并没有真正地去分配内存空间来存放数组元素。
           - 初始化才会真正意义上在堆内存Heap中创建一个数组,所以需要明确要创建什么类型地数组。
         */
        Employee[] staff = new Employee[3];
        
        //new调用了Employee类里的构造器Employee创建了实例,这里的入参是Employee构造器里要求的入参
        staff[0] = new Employee("Carl Craker",75000,1987,12,15);
        staff[1] = new Employee("Harry Hacker",50000,1989,10,1);
        staff[2] = new Employee("Tony Tester",40000,1990,3,15);
        
        //for (Employee e:staff):整句话可以理解为遍历staff数组种类型为Employee的数组元素
        //①Employee e声明了一个临时的局部变量e,它的类型是Employee;②:冒号可以理解为in或属于
        //实例.方法名:调用方法
        for (Employee e:staff)
            e.raiseSalary(5);
        
        for (Employee e:staff)
            System.out.println("name=" + e.getName() + ",salary=" + e.getSalary() + ",hireDay=" + e.getHireDay());
        
    }
}

class Employee
{    
    //成员属性
    //private代表只有当前类本身的方法可以访问这些实例字段,任何其他类的方法都不能读写这些字段
    //public可以让其他类访问到,但是不推荐,建议实例字段标记为private
    private String name;
    private double salary;
    private LocalDate hireDay;
    
    //构造器,构造器需要与类名相同
    //每个类可以有一个以上的构造器
    //构造器可以有0个、1个或更多参数
    //构造器没有返回值(实际可以理解为会隐式返回新创建对象/实例的引用/内存地址)
    //构造器总是结合new操作符一起使用
    public Employee(String n,double s,int year,int month,int day)
    {
        name = n;
        salary = s;
        hireDay = LocalDate.of(year, month, day);
    }
    
    //成员方法
    //public代表任意类的任意方法都可以调用这些方法
    //public String getName:访问修饰符 返回值类型 方法名称
    //如果不需要返回值则返回值类型写void
    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;
    }
}
name=Carl Craker,salary=78750.0,hireDay=1987-12-15
name=Harry Hacker,salary=52500.0,hireDay=1989-10-01
name=Tony Tester,salary=42000.0,hireDay=1990-03-15

 

posted on 2026-06-04 16:48  12345zjl  阅读(5)  评论(0)    收藏  举报