Thinking in Java_包、访问控制符

本文介绍了Java中解释器搜索包的过程及编译器处理import语句的方式,并详细阐述了不同访问控制符对方法、变量及类的可见性影响。

 1、java解释器搜索包的过程:首先,它会找到环境变量CLASSPATH, CLASSPATH中包含了多个目录,它们作为系统的一种特殊的“根”,从这里开始对.class文件的搜索,从根开始,解释器将会寻找包名(一般的,包名是域名的点分割形式),并将点号解释成斜杠形式,生成从CLASSPATH根开始的路径名。

 2、java编译器遇到import语句时,会从CLASSPATH指定的路径下搜索目录,若为导入的类创建对象,则编译器会在指定的目录下寻找同名的.class文件。

 3、java访问控制符:

A: 方法和变量的可见性

访问控制符对所在类的可见性对同个包中的类的可见性
(同个包中可能有子类哟!)
对继承子类的可见性
(该子类可能在不同包哟!)
对不在同个包中的类的可见性
public    可见 可见可见可见
protected可见可见可见不可见
默认(无控制符)可见可见不可见不可见
private可见不可见不可见不可见

注意:1, 并不是说protected修饰的方法或变量,那么该方法或变量就一定对不在同个包中的类不可见,它对不在同个包中的子类是可见的。

2. 并不是说方法或变量使用了默认控制符修饰时,那么它肯定对子类不可见。父类和子类在同一个包中时,父类的默认控制符对子类是可见的。


B: 类的可见性           

访问控制符对同个文件中的类的可见性对同个包中的类的可见性对不同包中的可见性
public可见可见可见
默认(无控制符)可见可见不可见

特别地,如果不想让任何人访问某个类时,可以将类中所有构造方法的控制符设为private,这样就任何人就不能为该类创建对象了,However,如果该类中某个static成员(变量或方法)的控制符是public时,外部任何类照样可以访问这个static成员,即使该类不能被创建对象。例如:

我们将类B的构造方法设为private后,就不能创建B 的对象了,但是别人如何使用这个类呢?就可以通过public属性的static方法来返回创建私有的static对象,这样就可以间接访问B类了。

class B {
private B() {}
public static void printB1(){
System.out.println("B.printB1()");
}
private static B b1 = new B();
public static B accessB() {
return b1;
}
public void printB2() {
System.out.println("B.printB2()");
}
}
public class A {
public static void main(String[] args) {
//B b2 = new B(); 不能创建B类的对象
B.printB1();
B.accessB().printB2();
}
}

运行结果:

B.printB1()
B.printB2()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值