编程思想第六章

练习7:根据描述access和Widget的代码片段创建类库。在某个不属于access类库的类中创建一个Widget实例
package com.access;

 class Widget {
	public void say(){
		System.out.println("haha");
	}
}

package com.jicheng;
 public class Test extends JiChengTest{
	 public static void main(String[] args) {
//		Widget w = new Widget();
//		w.say();
	}
  }

这大概就是作者想要表达的思想:3.类中可以不带有public类,这情况很少,当想隔离外部使用,则可以把public关键字去掉,外部包的类,就无法访问该类了。方便想删除就删除。 


练习8:效仿实例Lunch.java的形式,创建一个名为ConnectionManager的类,该类管理一个元素为Connection对象的固定数组。客户端程序员不能直接创建Connection对象,而只能通过ConnectionManager中的某个static方法来获取他们。当ConnectionManager之中不再有对象时,它会返回null引用。在main()之中检测这些类。 

 
 
package com.fangwenquanxian;

public class Connection {

	private static Connection connection = new Connection();
	private Connection(){};
	public static Connection makeConnection(){
		return connection;
	}
}

package com.fangwenquanxian;

import java.util.Arrays;

public class ConnectionManager {
	public static Connection[] cons = new Connection[5];  //声明了一个Connection类型,数量为5的数组,
	static{	//静态加载,先装子弹的角色,先创建5个对象
		System.out.println("--------初始化Connection对象--------");
		for (int i = 0; i < 5; i++) {
			cons[i] = Connection.makeConnection();
		}
	}
	public static Connection getConnection(){
		int l = cons.length;
		if(l>0){
			Connection con = cons[--l]; // 数量先减后运算  l = 4
			cons = Arrays.copyOf(cons, l);
			return con;
		}else{
			return null;
		}
	}
	public static void main(String[] args) {
		try {
			for (int i = 0; i < 7; i++) {
				Connection con = ConnectionManager.getConnection();
				System.out.println(i+"、"+con);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
}
--------初始化Connection对象--------
0、com.fangwenquanxian.Connection@1db9742
1、com.fangwenquanxian.Connection@1db9742
2、com.fangwenquanxian.Connection@1db9742
3、com.fangwenquanxian.Connection@1db9742
4、com.fangwenquanxian.Connection@1db9742
5、null
6、null

编译不能通过,因为PackagedClass类的访问权限是默认的,不同包,不能访问。

总结:控制访问权限有两个原因。

1.代码消费者,只暴露允许接触的代码,隐藏不允许接触的代码,做到了安全隔离。

2.代码生产者,就可以知道哪些方法可以修改,换种方式实现,而不会影响代码消费者的编辑。








猜你喜欢

转载自blog.csdn.net/qq_39723363/article/details/80302127