练习1:在某个包中创建一个类,在这个类所处的包的外部创建该类的一个实例。
package exercise6;
import Exercise5.Exercise5_22;
public class Exercise6_1 {
public static void main(String[] args) {
new Exercise5_22();
}
}
练习2:将本节中的代码片段改写为完整的程序,并校验实际所发生的冲突。
练习3:创建两个包:debug和debugoff,他们都包含一个相同的类,该类有一个debug()方法,第一个版本显示发送给控制台的String参数,而第二版本什么也不做,使用静态import语句将该类导入到一个测试程序中,并示范条件编译效果。
package debug;
public class E_Debug {
public static void debug(String s) {
System.out.println(s);
}
}
package debugoff;
public class E_Debug {
public static void debug(String s) {
}
}
package exercise6;
import static debug.E_Debug.*;
public class Exercise6_3 {
public static void main(String[] args) {
debug("Debug Version");
}
}
练习4:展示protected方法具有包访问权限,但是它仍旧不是public的。
练习5:创建一个带有public,private,protected和包访问权限域以及方法成员的类。创建一个该类的一个对象,看看在你试图调用所有类成员时,会得到什么类型的编译信息。请注意,处于同一个目录中的所有类都是默认包的一部分
练习6:创建一个带有protected数据的类,运用在第一个类中处理protected数据的方法在相同的文件中创建第二个类
public class Exercise6_6 {
public static void main(String[] args) {
WithProtected wp = new WithProtected();
wp.i =1;
System.out.println(wp.i);
}
}
class WithProtected{
protected int i;
}
练习7:根据描述access和Widget的代码片段创建类库,在某个不属于access类库的类中创建一个Widget实例
练习8:效仿实例Lunch.java的形式,创建一个名为ConnectionManager的类,该类管理一个元素为Connection对象的固定数组。客户端程序员不能直接创建Connection对象,而只能通过ConnectionManager中的某个static方法来获取他们。当ConnectionManager之中不再有对象时,它会返回null引用。在main()之中检测这些类。
public class Exercise6_8 {
public static void main(String[] args) {
Connection c = ConnectionManager.getConnections();
while(c!=null) {
System.out.println(c);
c = ConnectionManager.getConnections();
}
}
}
class ConnectionManager{
public static Connection[] c = new Connection[5] ;
static int l = c.length;
static {
for (int i = 0; i < c.length; i++) {
c[i] = Connection.getConnection();
}
}
public static Connection getConnections() {
if(l>0) {
l--;
return c[l];
}else {
return null;
}
}
}
class Connection{
static Connection connection = new Connection();
private Connection(){
}
public static Connection getConnection() {
return connection;
}
}
练习9:在access/local目录下编写以下文件(假定access/local目录在你的CLASSPATH中):