访问权限控制
没有权限控制的时候,由于所有的接口都是可以访问的。当一个类库部分代码,发现有更好的方法解决的时候,可能其他接口会发生改动。这会导致另一个地方的引用该类库的程序发生崩溃。为了解决这种问题,权限管理就显得尤为重要了。
在Java中提供了<强>访问权限控制修饰词>强。以供类库开发人员向客户端程序员说明哪些功能是可以用的,那也有是不可以用的。
<强>一、包:库单元强>
<强>包强>内含有一组类,他们在<强>单一的名字空间强>之下被组织到了一起
引用><强>类名冲突?不存在的强>
在程序中,如果需要其他包的类,就需要<代码>导入> 代码。
<代码类=" hljs "> java.util。*; 代码>之所以要导入,就是因为要提供一个管理名字空间的机制。所有类之间的名字是相互隔离的。如果在机器上编写了相同名字的类,那个<强>为每个类创建唯一的命名空间>强就会非常重要。
单一文件中的代码,并不是不位于包中,而是已存在于<强>未命名包强>中。
引用><强>代码组织强>
<强>类库>强实际上是一组类文件。每个文件,都有一个<代码> 代码>类,以及<强>任意数量强>的<强>非公共强>类。
使用包<代码> 代码>语句,这个语句必须放在除注释以外的第一句程序代码:
<代码类=" hljs "> accsess.mypackage;{}代码>如果其他地方需要用这个类,那个就需要用引入<代码>进口access.mypackage。*;> 代码或者使用全名<代码> access.mypackage.MyClass 代码>
<>强创建一个独一无二的包名强>
那个男孩不想要一个独一无二的包名呢?
java包的命名用域名的方式来命名。众所周知,域名是不会重复的,是唯一的。这样的好处是,可以减少重复,而且方便别人的记忆。
环境变量<代码>路径> 代码可以提供查找包的位置并且是<强>全局的>强壮!
CLASSPATH=; D: \ java \ JPackage
引用>承接上文内容,<代码> java.util。* 代码>和<代码> my.mypackage。*> 代码均存在一个类,叫做矢量<代码> 代码>那么,
<代码类=" hljs "> java.util。*;my.mypackage。*;{{ java.util。V1=java.util.Vector (); my.mypackage。向量V2=my.mypackage.Vector (); } }代码><强>定制工具库强>
通过包就可以定制自己的专属工具库了
<代码类=" hljs "> { { System.out.println (obj); }{ System.out.println (); }{ System.out.print (obj); }PrintStream {system . out。printf(格式,args); } }代码><强>二、Java访问权限修饰词强>
权限修饰词<代码>公共代码>,<代码>私人代码>和<代码> 代码>保护(包访问权限又是也被称为<代码>友好> 代码)
引用><强>包访问权限强>
包访问权限允许包内的各个类组合起来,以便使他们彼此之间可以轻易地相互作用。
类控制着哪些代码具有访问自己成员的权限。获取某成员的唯一途径是:
<李>使得该成员为公众。无论是谁,无论在何地,都可以访问该成员。李> <李>不加访问权限修饰词,将其他类放置在与该成员相同的包中。李> <>李继承。李> <>李提供<强>访问器强>(<强>访问器强>)和<强>变异器强>(<强> mutator 强>)<强>方法强>读取和改变数值。如<代码> xxx.get() 代码>,<代码> xxx。集(对象obj) 代码>。李>
<强>公共:接口访问权限强>
使用关键字<代码>公共> 代码以后,意味着成员对<强>每个人都是可用强>的。
Java并不总是将当前目录视为查找行为的起点之一。如果类路径缺少<代码>。> 代码作为路径之一的话,Java就不会查找那里。
引用><强>默认包强>
<代码类=" hljs "> {{ 派x=派(); 范(); } }{{ System.out.println (); } }代码>尽管这两个文件看似没啥关系,但是,他们的确享有<强>包的访问权限强> . java将这样的文件看作是隶属于该目录的默认包中。该目录中的所有其他文件拥有包的访问权限。
<强>私人:你无法访问强>
除了包含这个成员的类除外,其他的任何类都无法访问该成员。
由于对私人代码> <代码>关键字没有啥感情,暂且写这么多吧!
Java——访问权限控制