
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
浙公网安备 33010602011771号