JAVA整理

Java成长之路(六)

Posted by MiaoMiaoMiao on January 18, 2021

Java成长之路六

封装

  • 访问控制(Access control())或者隐藏实现(implenmentation hiding),都与最初的实现不恰当有关;
  • Java提供语句修饰符(access specifier)供类库开发者指明哪些对于客户端是可用的,哪些对于客户端是没用的;
  • public-protect-包访问权限(package access)(没有关键字)和private;
  • Java中package关键字加以控制,类在相同包下还是在不同包下,会影响访问修饰符;

包的概念

  • 包内包含一组类,它们被组织在一个单独的命名空间中;
  • 使用Import导入包,为了提供一种管理命名空间的机制。所有类名之间是相互隔离的。
  • 为了解决冲突,我们为每个类创建一个唯一标识符组个;
  • 一个Java源代码文件称一个编译单元(complication unit),每个编译单元的文件名后缀必须是.java;
  • 每个编译单元中只能有一个Public类,否则编译器受不了,还有其他类,在包外是无法访问到这些类的,主public类需要提供“支持”类;

代码组织

  • 在Java中,可运行程序是一组.class文件,它们可以打包压缩成一个java文件(Jar,使用jar文档生成器);Java解释器负责查找,加载和解释这些文件;
  • 类库是一组文件,由public类和任意数量额非public类组成,如果把这些组件集中在一起,需要使用关键字package;

创建独一无二的包名

  • 当编译器遇到Import语句时,它会在CLASSPATH指定目录中查找子目录;
  • 若导入相同类名的代码,会出现冲突这时候需要指明应用包;
  • 使用import来改变一些行为,比如将调试版改为发布版;
  • 每个访问修饰符只能控制它们修饰的对象;

包访问权限

  • 一个编译单元(即一个文件),只能隶属于一个包,通过包访问权限,位于同一编译单元中的所有类彼此之间都是可访问的;

若想看到protected包和private成员

  1. 使成员成为public;
  2. 赋予成员默认包的访问权限,不加任何修饰类,然后将其他类放在相同的包中;
  3. 使用继承的类可以访问public成员也可以访问protected成员;
  4. 提供访问器(accessor)和修改器(mutator)方法(称为”get/set”方法)从而读取或改变值;

public访问权限

  • 当用关键字public, 此表明每个成员都是可用的;

private你无法访问

  • private意味着除了包含该成员的类,其他任何类都无法访问这个成员;
  • 同个包也无法访问private成员,自己隔离自己,另一方面创建包也是有可能的;
  • 使用类,客户端程序员无法访问包访问权限成员;
  • 使用private是非常重要的,尤其是多线程环境中;

protected继承访问权限

  • protected 处理的是继承的概念;通过继承可以利用一个现有的类——我们称为积累,然后添加新成员到现有类中而不必改变现有类,我们还可以改变类的现有成员的行为,为从一个类继承,需要声明心类extends一个现有类;
  • 当你定义一个具有包访问权限的类时,你可以在其中定义一个public构造器;

接口与实现

  • 访问控制通常被承称为隐藏实现(implementation hiding),将数据和方法包装进类中并具体实现隐藏被称作是封装,其结果就是一个同时常有特征和行为的数据类型;
  • 有两个原因,访问控制内部划定了界限;1.确定客户端程序员可以使用和不能使用的边界;2.将接口与实现分离;
  • 创建类的风格;public->protected->private;

类访问权限

  • 访问权限修饰符可以确定类库中的哪些类库的使用者是可用的;
  • 类的访问权限可以是:包访问权限或者public,为了防止类被外界访问,可以将所有构造器的声明为private,这样只能自己的创建对象(在类的static对象中)
  • 如果不显式地创建构造器,编译器会自动创建一个无参构造器;

类的限制

  1. 每个编译单元(即每个文件)中只能有一个Public类;
  2. public类的名称必须与含有该编译单位的文件名相同,包括大小写;
  3. 虽然不常见,但是编译单元没有public类也是可能的;

bye