java定义用户类_Java核心技术(卷I) 3、用户自定义类

Employee类

class Employee

{

// 字段

private String name;

private double salary;

private LocalDate hireDay;

// 构造器

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

{

name = n;

salary = s;

hireDay = LocalDate.of(year, month, day);

}

// 封装的实现,通过get set方法操作字段

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;

}

}

在一个源文件中(xxx.java),只能有一个公共类,但可以有任意数目的非公共类

构造器

当构造Employee类对象时,构造器会运行,从而将实例字段初始化为所希望的初始字段

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

{

name = n;

salary = s;

hireDay = LocalDate.of(year, month, day);

}

构造器总是结合new运算符调用。不能对一个已经存在的对象调用构造器来达到重新设置实例字段的目的。

构造器与类同名、构造器没有返回值、构造器总是伴随着new操作符一起调用、构造器可以有多个、构造器参数大于等于0

不要在构造器中定义与实例字段同名的局部变量,比如

public Employee(String n, double s, ...){

String name = n; // 不对

}

显示参数与隐式参数

显示参数:byPercent

隐式参数:salary

public void raiseSalary(double byPercent)

{

double raise = salary * byPercent / 100;

salary += raise;

}

封装

如果没有封装,私有的name字段一旦通过构造器构造,将无法进行修改。

如果要进行封装,提供一个私有的数据字段、一个公共的字段访问器方法、一个公共的字段更改器方法

带来的好处包括:1.可以改变内部实现 2.更改器方法可以完成错误检查

public String getName()

{

return name;

}

public double getSalary()

{

return salary;

}

不要编写返回可变对象引用的访问器方法,如需要返回一个可变对象的引用,首先应该对它进行克隆。

class Employee{

private Date hireDay;

public Date getHireDay(){

return hireDay; // 这个是可以通过Date类的setTime进行修改的

}

}

Employee harry = ...;

Date d = harry.getHireDay();

d.setTime(); // 这样就把Employee里的内容改了

4aa648e19b5a

返回可变数据字段的引用

私有方法

应当将所有数据字段设置为私有

私有方法添加private实现,只有当前类可以用,别的类不可以调用。

class Single{

private static Single instance = new Single();

// 在类中对构造方法进行实例化

private Single() ; //将构造方法私有化

public static Single getInstance(){

return instance ;

}

//对insance 对象进行get方法取得

public void print(){

System.put.println("Hello world!!");

}

}

public class SingleDemo02{

public static void main(String args[]){

Single s = null ; //声明对象

s = Single.getInstance();

//通过类中的get方法对对象instance简介进行实例化

s.print();

}

}

final字段

final字段在构造对象时初始化

构造器执行后,这个字段的值便已经设置,此后不能再修改该字段

final关键字只是表示存储在变量中对象引用不会再指示另一个不同的对象,所以如果修饰基本类型和不可变类字段会很有效

private final StringBuilder evaluations;

evaluations = new StringBuilder();

public void giveGoldStar(){

evaluations.append(LocalDate.now() + "Gold star"); // 这个还是可以变的

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值