Java基础杂烩_封装(Encapsulation)
〇. 疑问_为什么要封装?
Java是一个十分标准的模块化程序设计语言,使用他进行设计的时候,我们必须限定一个类的具体作用,即:这个类在黑箱测试的时候,必须隐藏他内部的运行原理,只展现他对外发挥的功能。
所以封装是一个十分重要的特性,对于Java,他提供了保护开发者程序的修饰符,没有人希望令自己骄傲的心血和智慧结晶被人偷走(...至少我不希望)。
一、修饰符、访问器、修改器
1、修饰符
作用:用于控制实体变量的受访权限,先只记录public与private
1)private:加入了private词条的变量不能被属于该类之外的方法访问与修改(Cannot be accessed from methods outside the class)。
Tips:private词条保证了类的模块化(Modular),防止该类的功能不必要地暴露在该类之外。
2)public:使对应的实体变量可以被任何方法(包括包package外的方法)访问并修改(inside and outside the class)。
Tips: public的使用可以为程序提供应用程序编程接口(Application Programming Interface)。
1 public class Event {
2 public static void main(String[] args) {
3 BadGuy badGuy=new BadGuy();
4 Person joey=new Person();
5 //由于Person的money为private,以下两条指令将无法通过编译
6 badGuy.money=joey.money;
7 joey.money="Stolen";
8 //属于public的变量会被外界的函数随意修改
9 badGuy.money="Lost";
10 }
11 }
12 class Person{
13 private String money;
14 public Person() {
15 money="much";
16 }
17 }
18 class BadGuy{
19 public String money;
20 public BadGuy() {
21 money="None";
22 }
23 }
2、Accessor, Mutator
0) 为啥要访问器和修改器?
首先,控制实例变量是较为困难的,由于Java没有只读变量的概念,一旦开发者访问到了一个变量,那么就说明他拥有了该变量的读写权限,其次,作为开发者,我们基本不会希望其他人拥有随意操作我们所创造的变量的权力。
因此,编写Java程序良好的习惯之一就是将所有的实例变量设为private,根据需要给予他们对应的访问器和修改器。
访问器(get方法)和修改器(set方法)都是人为规定的,只是我们希望他长这样,他就长这样了。
1) Accessor
创建访问器的规则:
- 以与之相关的变量为名(getxxx)
- 修饰为public
- 不接收参数
- 返回对应变量的值
2)Mutator
创建修改器的规则:
- 以与之相关的变量为名(setxxx)
- 修饰为public
- 接收一个与对应变量同类的参数
- 把接收的参数赋给对应的变量
- 不返回任何值 (void)
1 public class Person
2 {
3 private String money;
4 //Accessor获取变量的值
5 public String getMoney()
6 {
7 return money;
8 }
9 //Mutator修改变量的值
10 public void setMoney(String money)
11 {
12 this.money=money;
13 }
14 }
二、构造方法(Constructor)
构造方法是一个非常重要的概念,他是创建每个对象时用于初始化对象的、自动调用的重要方法。
特点:
- 所有类都有构造方法
- 如果你不显式的写出构造方法,java会自动分配给这个类一个空的构造方法
- 你可以让构造方法接收任意参数,并在一个该类的对象被创建时使用这些参数进行初始化
- 在设置了需要接收参数的构造方法后,创建这个对象时必须在new Classname()的括号内输入构造器需要的参数,否则该对象不能被创建
- 一个类可以拥有多个构造器,但是每个构造器必须有他独特的参数列表
- 通过输入不同参数组合来调用不同的构造器
class Person{
private String money;
//构造器的创建(注意,构造方法没有类型,不返回任何值)
public Person() {
money="much";
}
}
class BadGuy{
private String money;
public BadGuy(String state) {
money=state;
}
//如果下面这个构造方法接收一个String类,创建对象时编译器将不能分清你想要调用哪个构造器
public BadGuy() {
money="None";
}
}
三、注释文档
注释文档用来向外界说明你所写代码的用途和各个部分的大体功能,目前只引出注释文档的创建和一些基本句法
1、基本注释方法:
- 注释必须紧挨在你要解释的代码块之前,否则不会生成正确的注释文档。
- JavaDoc一般只能用来说明修饰为public型的方法、构造器和类(我们也没有为private成员做出说明的必要)
- 必须以/**为开头,**/为结尾,中间每行开头可加*来提高可读性
2、对创建的类进行注释:
使用@author来标注作者
/**
*
* @author Joey Chen
* This class represents the condition of a person's money
*/
public class Person{
public String money;
public Person() {
money="much";
}
}
3、对创建的方法进行注释:
使用@param xxx对输入方法的参数进行注释
使用@return对方法的返回值进行注释
/**
*
* @return This method return a new condition
* @param state This string represents a new condition of the person's money
*/
public String stealMoney(String state) {
money=state;
return money;
}
4、生成注释文档
- 使用eclipse的Project下“Generate Javadoc”可以生成注释文档
- 另外使用cmd来到源文件所在文件夹后输入:javadoc -d xxx(生成到的子文件夹) xxx.java 也可以生成注释文档
- 生成后进入对应文件夹,打开“index.html”即可查看注释,这是编译器通过处理代码中的注释而生成的一个网页,其他用户都可以访问这个网页来阅读你的注释文档。