1、Java中最简单的类的定义形式为:
class ClassName {
constructor1
constructor2
...
method1
method2
...
field1
field2
...
}
注释:这类编码风格是类方法在前,域在后。这样有助于提升注重接口的概念,消减对实现的注意。(这是面向对象编程和面向过程编程思想上最大的区别)
2、(例4-2 源代码)
EmployeeTest.java
- package com.vincent.javacore.employeetest;
- public class EmployeeTest {
- public static void main(String[] args) {
- // 创建三个Employee对象
- Employee[] staff = new Employee[3];
- staff[0] = new Employee("Carl Cracker", 7500, 1987, 12, 15);
- staff[1] = new Employee("Harry Hacker", 5000, 1989, 10, 1);
- staff[2] = new Employee("Tony Tester", 4000, 1990, 3, 15);
- // 每个人工资提升5%
- for (Employee e : staff)
- e.raiseSalary(5);
- // 打印Employee的每个对象
- for (Employee e : staff)
- System.out.println("name: " + e.getName() + ", salsry: "
- + e.getSalary() + ", hirDay: " + e.getHireDay());
- }
- }
- package com.vincent.javacore.employeetest;
- import java.util.Date;
- import java.util.GregorianCalendar;
- public class 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();
- }
- public String getName() {
- return name;
- }
- public double getSalary() {
- return salary;
- }
- public Date getHireDay() {
- return hireDay;
- }
- public void raiseSalary(double byPercent) {
- double raise = this.salary * byPercent / 100;
- this.salary += raise;
- }
- private String name;
- private double salary;
- private Date hireDay;
- }
注意:原文件名必须与public类的名字相匹配。在一个文件中,只能有一个公有类,可以有多个非公有类。
4.3.2 多个源文件的使用
将每个类单独放在一个文件中。
4.3.3 解析Employee类
1、Employee类包含了一个构造器和四个方法:
public Employee(String n, double s, int year, int month, int day)
public String getName()
public double getSalary()
public Date getHireDay()
public voic raiseSalary(double byPercnet)
public表示任何类任何方法都可以调用这些方法
2、三个实例域:
private String name;
private double salary;
private Date hireDay;
关键字private确保只有Employee类的方法才能调用这些实例域
3、其中name域是String类的对象,hireDay是Date类的对象。一个类通常会包含其他类的实例域。
4.3.4从构造器开始
初步了解要记住:
1、构造器名要与类名相同
2、每个类要有一个以上的构造器
3、构造器可以有0个或0个以上的参数
4、构造器没有返回值
5、构造器总是伴随new一起调用
警告:不要在构造器中定义与实例域重名的局部变量!!!
4.3.5 隐式参数和显式参数
每个方法中关键字this表示隐式参数。推荐用以下方式编写raiseSalary方法:
public void raiseSalary(double byPercent) {
double raise = this.salary * byPercent / 100;
this.salary += raise;
}
这样可以将实例域与局部变量明显的区分开。
4.3.6 封装的优点
需要获取或设定实例域的值时要提供萨斯你想内容:
1、一个稀有的数据域;
2、一个公有的访问器方法;
3、一个公有的更改器方法。
这样做的好处在于:
1、可以改变内部实现,除了该类的方法之外不影响其他代码;
2、更改器方法可以执行错误检查。
警告:不可以编写访问器方法所返回的引用是可变的!!!
4.3.7 基于类的访问权限
一个类的方法可以访问该类中任何一个对象的私有域。