[Java]Java编程思想(Thinking in Java)第六章习题

Head Pic: original, original 7,500+ bookmarks / おべんと / October 17th, 2019 - pixiv

练习1

在某个包中创建一个类,在这个类所处的包的外部创建该类的一个实例。

package world.pixiv.thinkinginjava.exercise.chapter6;

import world.pixiv.thinkinginjava.exercise.chapter6.test.Exercise1_test;

public class Exercise1 {
    public static void main(String[] args) {
        Exercise1_test e = new Exercise1_test();
    }
}

练习2

将本节中的代码片段改写成完整的程序,并检验实际所发生的冲突。

package world.pixiv.thinkinginjava.exercise.chapter6;

import java.util.*;
import world.pixiv.thinkinginjava.exercise.chapter6.test.*;

public class Exercise2 {
    public static void main(String[] args) {
        //Vector v = new Vector();
    }
}
/*
 * Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
 *    The type Vector is ambiguous
 *    The type Vector is ambiguous
 *
 *    at world.pixiv.thinkinginjava.exercise.chapter6.Exercise2.main(Exercise2.java:8)
 */

练习3

创建两个包:debug和debugoff,它们都包含一个相同的类,该类有一个debug()方法。第一个版本显示发送给控制台的String参数,而第二个版本什么也不做。使用静态import语句将该类导入到一个测试程序中,并示范条件编译效果。

package world.pixiv.thinkinginjava.exercise.chapter6;

//import static world.pixiv.thinkinginjava.exercise.chapter6.test.Exercise3_test.*;
import static world.pixiv.thinkinginjava.exercise.chapter6.test_off.Exercise3_test.*;


public class Exercise3 {
    public static void main(String[] args) {
        debug();
    }
}

练习4

展示protected方法具有包访问权限,但不是public。

package world.pixiv.thinkinginjava.exercise.chapter6;

import world.pixiv.thinkinginjava.exercise.chapter6.test.Exercise4_test;

public class Exercise4 {
    public static void main(String[] args) {
        //Exercise4_test.hello();
        A.hello2();
    }
}

class A extends Exercise4_test{
    public static void hello2(){
        hello();
    }
}
/*
 * hello
 */

练习5

创建一个带有public,private,protected和包访问权限域以及方法成员的类。创建该类的一个对象,看看在你试图调用所有类成员时,会得到什么样的编译信息。

package world.pixiv.thinkinginjava.exercise.chapter6;

public class Exercise5 {
    public static void main(String[] agrs) {
        System.out.println(B.publicStr);
        System.out.println(B.protectedStr);
        System.out.println(B.defaultStr);
        //System.out.println(B.privateStr);
        B.publicMethod();
        B.protectedMethod();
        B.method();
        //B.privateMethod();
    }
}

class B{
    public static String publicStr;
    protected static String protectedStr;
    static String defaultStr;
    private static String privateStr;
    
    public static void publicMethod() {}
    protected static void protectedMethod() {}
    static void method() {}
    private static void privateMethod() {}
    
}
/*
 * Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
 *     The field B.privateStr is not visible
 *     The method privateMethod() from the type B is not visible
 * 
 *     at world.pixiv.thinkinginjava.exercise.chapter6.Exercise5.main(Exercise5.java:8)
 * 
 */

练习6

创建一个带有protected数据的类。运用在第一个类中处理protected数据的方法在相同的文件中创建第二个类。

同练习4.

练习7

根据描述access和Widget的代码片段创建类库。在某个不属于access类库的类中创建一个Widget实例。

package world.pixiv.thinkinginjava.exercise.chapter6;

import world.pixiv.thinkinginjava.exercise.chapter6.test.Widget;

public class Exercise7 {
    public static void main(String[] args) {
        Widget w = new Widget();
    }
}

练习8

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

package world.pixiv.thinkinginjava.exercise.chapter6;

import java.util.ArrayList;

public class Exercise8 {
    public static void main(String[] args) {
        ConnectionManager cm = new ConnectionManager();
        cm.addConnection(Connection.makeConnection());
    }
}

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

class ConnectionManager{
    static ArrayList<Connection> c;
    public ConnectionManager(){
        c = new ArrayList<Connection>();
    }
    public ArrayList<Connection> getConnection() {
        if(c.isEmpty()) return null;
        return c;
    }
    public void addConnection(Connection con) {
        c.add(con);
    }
}

练习9:略

最后修改:2019 年 10 月 19 日 10 : 43 PM

5 条评论

  1. Cinema

    滴!访客卡!请上车的乘客系好安全带,现在是:Sat Oct 19 2019 22:51:49 GMT+0800 (中國標準時間)

  2. Cinema

    hello
    滴!访客卡!请上车的乘客系好安全带,现在是:Sat Oct 19 2019 22:46:49 GMT+0800 (中國標準時間)

  3. Cinema

    hello

  4. Cinema

    滴!访客卡!请上车的乘客系好安全带,现在是:Sat Oct 19 2019 22:44:07 GMT+0800 (中國標準時間)

  5. Cinema

    滴!访客卡!请上车的乘客系好安全带,现在是:Sat Oct 19 2019 22:44:07 GMT+0800 (中國標準時間)

发表评论