java访问权限控制

来源:互联网 发布:nginx 多个域名站点 编辑:程序博客网 时间:2024/05/23 22:01

1.控制访问权限的两个原因

1)第一是为了使用户不要触碰那些他们不该触碰的部分,这些部分对于类内部的操作是必要的,但是它并不属于客户端程序员所需接口的一部分。

2)第二个原因,也是最重要的原因,是为了让类库设计者可以更改类的内部工作方式,而不必担心这样会对客户端程序员产生重大的影响。例如,最初可能会以一种方式创建一个类,然后发现如果更改程序结构,可以大大提高运行速度。如果接口和实现可以被明确的隔离和加以保护,就可以实现这一目的,而不必强制客户端程序员重新编写代码。

2.java访问权限修饰词

Private私有访问权限:只有类的内部可以调用。

默认访问权限,即没有任何修饰词:同一个包内都可以访问。

Protected保护权限:同一个包内,或者是子类都可以访问。

Public公共访问权限:任何地方都可以访问。

3.类的访问权限

1)每个编译单元(java文件)都只有一个public类。这表示,每个编译单元都有单一的公共接口,用public类实现。该接口可以按照要求包含众多的支持包访问权限的类。如果在某个编译单元内有一个以上的public类,编译器就会给出错误信息。

2)public类的名称必须完全与含有该编译单元的文件名相匹配,包括大小写。

4.构造器的访问权限

1)如果没有明确的创建一个构造器的话,就会帮你创建一个默认的构造器(不带任何参数的构造器),此构造器的访问权限是public.

(2)一个类能不用new 创建对象,就是看构造器的访问权限是否可以访问的到,如果一个类里面有两个构造器,创建对象的时候就看调用的那个构造器是否可以访问的到。

package com.tkij.charpter6;public class Test22 {private Test22(){}public Test22(int i){}}package com.tkij.charpter21.thread;import com.tkij.charpter6.Test22;public class ThreadRead {public static void main(String[] args) {//!Test22 ts=new Test22();编译不通过,构造器访问不到Test22 ts=new Test22(1);//第二个构造器可以访问,故可以new对象}}

3)通过访问权限设计的一种设计模式:单例设计模式

public class Singleton {private Singleton(){ }    private static Singleton singleton=new Singleton();    public static Singleton getInstance(){    return singleton;    }    public static void main(String[] args) {Singleton s=Singleton.getInstance();}}

通过将构造器设为private则客户端不能用new 创建对象,只可以通过getInstance()方法获取Singleton对象,getInstance()方法返回的一个静态实例对象,即Singleton在加载的时候就初始化的一个类变量,static保证了通过getInstance()获取的实例是所有引用共享的唯一一个实例。




原创粉丝点击