《Thinking in Java》学习笔记-----第6章 访问权限控制

来源:互联网 发布:x战警天启预告知乎 编辑:程序博客网 时间:2024/06/05 05:26

目录:

        • 编写Java源代码文件的基本要求是什么
        • 如何起包名
        • Java不同访问权限修饰词的功能是什么
        • 如何为具有私有化构造方法的类创建对象

编写Java源代码文件的基本要求是什么?

  • 当编写一个Java源代码文件时,此文件通常被称为编译单元,每个编译单元都必须有一个后缀名.java
    • 而在编译单元内则可以有一个public类,该类的名称必须与文件名称相同(包括大小写,但不包括文件的后缀名.java)。
  • 每个编译单元只能有一个public类,否则编译器就不会接受。

如何起包名?

  • 按照惯例,package名称的第一部分是类的创建者的反顺序的Internet域名。
  • 因为域名是独一无二的,所以package名称也将是独一无二的。

Java不同访问权限修饰词的功能是什么?‘

  • 在成员方法、成员变量前的修饰词:
    • public: 所有包中的类可见
    • protected:同一个包的类可见,有继承关系的子类可见
    • (default) :同一个包的类可见
    • private:本类可见
  • 在类前的修饰词:
    • public:所有包可见
    • (default) :同一个包可见
    • 不能用private和protected修饰类

如何为具有私有化构造方法的类创建对象?

  • 解法一:在该类中创建一个static方法,它创建一个该类的对象并返回一个对它的引用。那么其他的类要想创建该对象,调用该方法就行了。
  • 解法二:用单例模式。

以下为演示代码(Soup1和Soup2分别对应解法一和解法二):

/** * <p>Description:private constructor</p> * <p>2016年8月6日 上午10:41:26</p> * @author  wdk * @version 1.0 */class Soup1{    private Soup1(){}    public static Soup1 makeSoup(){        System.out.println("Create Soup1 successfully");        return new Soup1();    }}class Soup2{    private Soup2(){}    private static Soup2 sp = new Soup2();    public static Soup2 access(){        System.out.println("Create Soup2[static] successfully");        return sp;    }    public void f(){        System.out.println("Invoke normal method successfully!");    }}public class Lunch {    void testPrivate(){        //Can't do this! Private constructor:        //!Soup1 soup = new Soup1();    }    void testStatic(){        Soup1 soup = Soup1.makeSoup();    }    void testSingleton(){        Soup2.access().f();    }    public static void main(String[] args) {        Lunch lunch = new Lunch();        lunch.testStatic();        lunch.testSingleton();    }}/*Output:    Create Soup1 successfully    Create Soup2[static] successfully    Invoke normal method successfully!*/
1 0