java访问权限控制

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()获取的实例是所有引用共享的唯一一个实例。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值