【Java核心技术解读】自己定义类笔记
本文是《Java核心技术》第4章,4.3~4.4解读笔记。
原书PDF请在公众号
java实用技术手册
回复111获取。
用户自己定义类中主力类是什么?
问题一:
这里出现了一个新词“主力类”,其实翻译者完全没有必要这么生硬地去翻译workhorse class,翻译了反而费解。
直白点,就是没有main方法的类,但是承载了很多重要功能,里面有属于自己的成员变量和方法。
问题二:
实例域?
这个也是翻译问题,让人费解的词。
很多中文翻译书中,都将class中的field
翻译成“域”,其实更贴切的翻译是“字段”。
实例字段或者成员变量的翻译,比实例域更能让人理解。
如果你对这个翻译有不同的见解,欢迎评论区留言~
一个类包含几部分?
- 类名。
- 实例字段。
- 构造方法。
- 实例方法。
/**
* @author Java实用技术手册
*/
public class ClassName {
/** 实例字段1,也叫成员变量 */
private String field1;
private String field2;
/** 构造函数 */
public ClassName() {
}
/** 方法1,get访问方法 */
public String getField1() {
return this.field1;
}
/** 方法2,set是更改器方法 */
public void setField1(String field1) {
this.field1 = field1;
}
}
剖析Employee类
import java.time.LocalDate;
/**
* the Employee
* @author Java实用技术手册
* @date 2023-02-02
*/
public class Employee {
private String name;
private double salary;
private LocalDate hireDay;
/**
* 构造器。
*/
public Employee(String n, double s, int year, int month, int day) {
this.name = n;
this.salary = s;
this.hireDay = LocalDate.of(year, month, day);
}
// 标准应该按照这样写法
// public Employee(String name, double salary, int year, int month, int day) {
// this.name = name;
// this.salary = salary;
// this.hireDay = LocalDate.of(year, month, day);
// }
/**
* 涨薪。
* @param byPercent 涨薪比例(%)
*/
public void raiseSalary(double byPercent) {
double raise = salary * byPercent / 100;
salary += raise;
}
public String getName() {
return name;
}
public double getSalary() {
return salary;
}
public LocalDate getHireDay() {
return hireDay;
}
}
- 类和成员变量,都应该用public/private等进行访问控制。
- 一般情况下,POJO这类javabean,成员变量是private的,方法是public的。
- 构造器:默认有1个无参构造器,也可以自己增加多个参数的构造器。构造器在new一个实例的时候运行。
- 注意:不要在构造器中定义和成员变量名相同的局部变量。
方法中隐式参数和显式参数
- 显式参数:你可以看出来,显示告诉你要传递的参数。
- 隐式参数:你不用传递,方法默认添加的参数。
操作一个对象,访问其方法,一般情况下方法参数默认有个this,比如上面的
public String getField1() {
return this.field1;
}
没有传递this关键字,返回的时候实际有this,去查找这个
类的成员变量。
这点和python的方法有点像,python方法第一个是
self
,相当于this
封装的优点
就是保持让外部不能轻易修改成员变量的值,只能走你提供的方法通道。
书中警告要保持返回的对象不可变,理论是这样子,其实工作中不少直接返回方便自己的对象。
私有方法怎么设计?
私有方法应该是服务于自己公有方法,但是不服务于外部类的方法。
final实例字段用在什么场景?
如果能确定对象初始化后不再修改的字段,可以声明为final。
如果在一个方法中,一个局部变量只初始化一次,不想也不会被二次修改,也可以声明为final。
多数情况下,final字段使程序运行更快。
静态字段和静态方法用在什么场景?
静态字段经常声明为:public static final。
静态方法声明有static关键字。
两个都是方便外部类使用的,可以直接使用ClassName.field或者ClassName.method 访问,而不需要实例化(就是new),节省new产生的内存空间。
一般工具类中有很多静态字段或者静态方法。
以上就是本期解读笔记。
我是Pandas,专注Java实用技术分享,公众号
Java实用技术手册
和B站均有视频解说,欢迎来玩。如果你觉得这篇文章有用,别忘了点赞+关注,一起进步!
- 点赞
- 收藏
- 关注作者
评论(0)