博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
<Core Java> 4.3 用户自定义类
阅读量:4551 次
发布时间:2019-06-08

本文共 2533 字,大约阅读时间需要 8 分钟。

4.3.1 一个Employee类
1、Java中最简单的类的定义形式为:
class ClassName {
    constructor1
    constructor2
    ...
    method1
    method2
    ...
    field1
    field2
    ...
}
注释:这类编码风格是类方法在前,域在后。这样有助于提升注重接口的概念,消减对实现的注意。(这是面向对象编程和面向过程编程思想上最大的区别)
2、(例4-2 源代码)
EmployeeTest.java
[java]
  1. package com.vincent.javacore.employeetest;  
  2.   
  3. public class EmployeeTest {  
  4.     public static void main(String[] args) {  
  5.         // 创建三个Employee对象  
  6.         Employee[] staff = new Employee[3];  
  7.   
  8.         staff[0] = new Employee("Carl Cracker"750019871215);  
  9.         staff[1] = new Employee("Harry Hacker"50001989101);  
  10.         staff[2] = new Employee("Tony Tester"40001990315);  
  11.   
  12.         // 每个人工资提升5%  
  13.         for (Employee e : staff)  
  14.             e.raiseSalary(5);  
  15.   
  16.         // 打印Employee的每个对象  
  17.         for (Employee e : staff)  
  18.             System.out.println("name: " + e.getName() + ", salsry: "  
  19.                     + e.getSalary() + ", hirDay: " + e.getHireDay());  
  20.     }  
  21.   
  22. }  
Employee.java
[java]
  1. package com.vincent.javacore.employeetest;  
  2.   
  3. import java.util.Date;  
  4. import java.util.GregorianCalendar;  
  5.   
  6. public class Employee {  
  7.     public Employee(String n, double s, int year, int month, int day) {  
  8.         name = n;  
  9.         salary = s;  
  10.         GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);  
  11.         hireDay = calendar.getTime();  
  12.     }  
  13.   
  14.     public String getName() {  
  15.         return name;  
  16.     }  
  17.   
  18.     public double getSalary() {  
  19.         return salary;  
  20.     }  
  21.       
  22.     public Date getHireDay() {  
  23.         return hireDay;  
  24.     }  
  25.       
  26.     public void raiseSalary(double byPercent) {  
  27.         double raise = this.salary * byPercent / 100;  
  28.         this.salary += raise;  
  29.     }  
  30.   
  31.     private String name;  
  32.     private double salary;  
  33.     private Date hireDay;  
  34. }  
注意:原文件名必须与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 基于类的访问权限
一个类的方法可以访问该类中任何一个对象的私有域。

转载于:https://www.cnblogs.com/vincent-hv/archive/2013/02/27/2958559.html

你可能感兴趣的文章
第十一章 类和对象[DDT书本学习 小甲鱼]【1】
查看>>
hdu2035 二分快速幂
查看>>
BOM浏览器对象模型
查看>>
python实现排序奇数在前偶数在后
查看>>
hdu 3368 曾经下过的棋
查看>>
Linux Shell 删除三天前文件
查看>>
微信小程序 使用mpvue
查看>>
常用模块-02
查看>>
接口测试总结
查看>>
测试的基本概念
查看>>
【ZOJ】3209 Treasure Map
查看>>
ActiveMQ 消息队列服务
查看>>
《程序是给自己看的还是给别人看的》
查看>>
(12) PHP 随笔---Smarty模板引擎 单模板多缓存、局部不缓存 20--21
查看>>
【转】Math.Atan2 方法
查看>>
C++设计模式之工厂方法模式
查看>>
poj3984_bfs+回溯路径
查看>>
MyEclipse使用技巧
查看>>
[译]径向镜片反畸变滤波
查看>>
畅通工程-最小生成树+并查集
查看>>