【Java核心技术解读】自己定义类笔记

举报
Java实用技术@Pandas 发表于 2023/03/31 22:06:59 2023/03/31
【摘要】 【Java核心技术解读】自己定义类笔记

本文是《Java核心技术》第4章,4.3~4.4解读笔记。

原书PDF请在公众号java实用技术手册回复111获取。

用户自己定义类中主力类是什么?

image.png

问题一:
这里出现了一个新词“主力类”,其实翻译者完全没有必要这么生硬地去翻译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站均有视频解说,欢迎来玩。

如果你觉得这篇文章有用,别忘了点赞+关注,一起进步!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。