java编程思想第4版 第六章习题

练习1:

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

//创建的包
package TestPackage;

public class TestFirstClass {
    public TestFirstClass() {
        System.out.println("create TestFirstClass");
    }
}

//包外调用
import TestPackage.TestFirstClass;

public class TestConstructor {
    public static void main(String[] args) {
        TestFirstClass testFirstClass = new TestFirstClass();
    }
}

输出

create TestFirstClass

练习2:

将本节中的代码片段改写为完整的程序,并校验实际所发生的冲突(不同包名中含有相同的类,调用时出现冲突,需要写完整的包名)
代码

//新创建的Ve
package TestPackage;

public class Vector {
    public Vector() {
        System.out.println("this is my Vector");
    }
}

//包外调用
import TestPackage.*;
//使用导包导入特定的类会优先选择导入的类
//import TestPackage.Vector;

//import java.util.*;

public class TestConstructor {

    public static void main(String[] args) {
        Vector myVector = new Vector();
        //创建了java.util的Vector,如果用import导包将会报错
        java.util.Vector vector = new java.util.Vector();
        System.out.println("create java.util.Vector:" + vector + "");
    }
}

输出

this is my Vector
create java.util.Vector:[]

练习3:

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

package debug;

//测试代码
public class TestDebug {
    public TestDebug() {
        System.out.println("I am from debug");
    }

    public static void debug() {
        System.out.println("do a debug");
    }
}

import static debug.TestDebug.*;
public class TestConstructor {

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


输出

do a debug

代码

package debugOff;

public class TestDebug {
    public TestDebug() {
        System.out.println("I am from debugOff");
    }

    //do nothing
    public static void debug() {

    }
}

import static debugOff.TestDebug.*;
public class TestConstructor {

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


输出

练习4:

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

代码

package debugOff;

public class TestDebug {
    public TestDebug() {
        System.out.println("I am from debugOff");
    }

    //do nothing
    public static void debug() {

    }

    protected static void testMethod() {
        System.out.println("this is a test");
    }
}

package debugOff;
import static debugOff.TestDebug.*;

public class TestOtherClass {

    public static void main(String[] args) {
        //正常运行
        testMethod();
    }
}

import static debugOff.TestDebug.*;
public class TestConstructor {

    public static void main(String[] args) {
        //编译报错
//        testMethod();
    }
}

练习5:

创建一个带有public,private,protected和包访问权限以及方法成员的类。创建该类的一个对象,看看在你试图调用所有类成员时,会得到什么类型的编译信息。请注意,出于同一个目录中的所有类都是默认包的一部分。
代码

package debugOff;

public class TestDebug {
    public TestDebug() {
        System.out.println("I am from debugOff");
    }

    //do nothing
    public static void debug() {
        System.out.println("public");
    }

    protected static void testMethod() {
        System.out.println("protected");
    }

    static void testMethod2(){
        System.out.println("default");
    }

    private static void testMethod3(){
        System.out.println("private");
    }
}

package debugOff;
import static debugOff.TestDebug.*;

public class TestOtherClass {

    public static void main(String[] args) {
        //正常运行
        debug();
        testMethod();
        testMethod2();
        //不可调用
//        testMethod3();
    }
}


练习6:

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

package testPackage;

public class ProtectedSong {

    protected static String song = "版权歌曲";

    protected void out() {
        System.out.println(song);
    }
}

package testPackage;

public class TheOtherClass {

    public void getSong(){
        ProtectedSong song = new ProtectedSong();
        song.out();
    }

    public static void main(String[] args) {
        TheOtherClass theOtherClass = new TheOtherClass();
        theOtherClass.getSong();
    }
}

输出

版权歌曲

练习7:

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

package testPackage;

public class TestClass {
    public TestClass() {
        System.out.println("TestClass");
    }
}

import testPackage.TestClass;

public class TestConstructor {

    public static void main(String[] args) {
        TestClass testClass = new TestClass();
    }
}

输出

TestClass

练习8:

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

代码

import java.util.Arrays;

public class ConnectionManager {

    private static Connection[] connections = new Connection[]{new Connection(0), new Connection(1), new Connection(2), new Connection(4), new Connection(5)};

    public static Connection getConnection() {
        if (connections.length > 0) {
            Connection connection = connections[connections.length - 1];
            connections = Arrays.copyOf(connections, connections.length - 1);
            System.out.println("I am " + connection.no);
            return connection;
        }
        System.out.println("over");
        return null;
    }

    public static class Connection {
        private final int no;

        private Connection(int i) {
            this.no = i;
        }
    }
}

public class TestConstructor {

    public static void main(String[] args) {
        while (true) {
            ConnectionManager.Connection connection = ConnectionManager.getConnection();
            if (connection == null) {
                break;
            }
        }
    }
}

输出

I am 5
I am 4
I am 2
I am 1
I am 0
over

练习9:

编写下面的代码

代码

package access.local;

class PackagedClass {
    public PackagedClass() {
        System.out.print("create a package class");
    }
}

package access.local;

public class LocalMain {
    public static void main(String[] args) {
        PackagedClass packagedClass = new PackagedClass();
    }
}

package access.foreign;
//import access.local.PackagedClass;

public class ForeignMain {
    public static void main(String[] args) {
        //报错,只能包内访问
//        PackagedClass packagedClass = new PackagedClass();
    }
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值