《Java程序设计教程》第五章习题

  1. 请简述采用 for 语句简化写法的优缺点。

    优点:使一部分 for 语句变得更加紧凑,提高代码的简洁性、可读性。

    缺点:应用范围较小;容易出现把数组的元素当做下标的错误。

  2. 请应用泛型编写程序。首先定义一个接口,它至少包含一个可以计算面积的成员方法。然后,编写实现该接口的两个类:正方形类和圆类。接着编写一个具有泛型特点的类,要求利用这个类可以在控制台窗口中输出某种图形的面积,而且这个类的类型变量所对应的实际类型可以是前面编写的正方形类或圆类。最后利用这个具有泛型特点的类在控制台窗口中分别输出给定边长的正方形的面积和给定半径的圆的面积。

    // J_Genericity.java
    interface J_Shape {
        public double mb_getArea();
    }
    
    class J_Square implements J_Shape {
        private double m_sideLen;
    
        public J_Square(double len) {
            m_sideLen = len;
        }
    
        public double mb_getArea() {
            return m_sideLen * m_sideLen;
        }
    }
    
    class J_Circle implements J_Shape {
        private double m_radius;
    
        public J_Circle(double r) {
            m_radius = r;
        }
    
        public double mb_getArea() {
            return Math.PI * m_radius * m_radius;
        }
    }
    
    public class J_Genericity <T extends J_Shape> {
        public void mb_printArea(T t) {
            System.out.println("Area: " + t.mb_getArea());
        }
    
        public static void main(String[] args) {
            J_Genericity<J_Shape> genericity = new J_Genericity<J_Shape>();
            J_Square square = new J_Square(2);
            J_Circle circle = new J_Circle(2);
            genericity.mb_printArea(square);
            genericity.mb_printArea(circle);
        }
    }
    
  3. 请编写程序。首先在程序中定义一个枚举类型,它含有 7 个枚举常量,分别表示一个星期每一天的名称。然后在控制台窗口中输出这些名称。

    // J_EnumWeek.java
    enum E_WEEK {
        Sun, Mon, Tue, Wed, Thu, Fri, Sat
    }
    
    public class J_EnumWeek {
        public static void main(String[] args) {
            E_WEEK[] weeks = E_WEEK.values();
            for(E_WEEK w : weeks) {
                System.out.print(w.toString() + " ");
            }
        }
    }
    
  4. 请应用枚举类型编写程序,在控制台窗口输出 2008 年每个月的天数。要求在输出中含有各个月份的英文名称。

    // J_EnumMonth.java
    enum E_MONTH {
        Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec
    }
    
    public class J_EnumMonth {
        public static void main(String[] args) {
            int[] days = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
            E_MONTH[] months = E_MONTH.values();
            for(int i = 0; i < 12; i++) {
                System.out.println(months[i].toString() + ": " + days[i]);
            }
        }
    }
    
  5. 思考题:采用泛型与采用面向对象的动态多态性,哪一种方法可以获得更高的运行效率?请编写相应的验证程序。

    // J_Test.java
    import java.util.Date;
    
    class J_Employee {
        public int m_workYear;
    
        public J_Employee() {
            m_workYear = 1;
        }
    
        public void mb_printInfo() {
            System.out.println("该职工的工作年限为:" + m_workYear);
        }
    }
    
    class J_Teacher extends J_Employee {
        public int m_classHour;
    
        public J_Teacher() {
            m_classHour = 96;
        }
    
        public void mb_printInfo() {
            System.out.println("该教师的工作年限为:" + m_workYear);
            System.out.println("该教师授课的课时为:" + m_classHour);
        }
    }
    
    public class J_Test <T extends J_Employee> {
        public void mb_test(T t) {
            t.mb_printInfo();
        }
    
        public static void main(String[] args) {
            long t1 = System.nanoTime();
            J_Employee a = new J_Employee();
            a.mb_printInfo();
            a = new J_Teacher();
            a.mb_printInfo();
            long t2 = System.nanoTime();
            System.out.println("动态多态性:" + ((t2 - t1)/1000) + "us");
    
            t1 = System.nanoTime();
            J_Test<J_Employee> m_test = new J_Test<J_Employee>();
            m_test.mb_test(new J_Employee());
            m_test.mb_test(new J_Teacher());
            t2 = System.nanoTime();
            System.out.println("泛型:" + ((t2 - t1)/1000) + "us");
        }
    }
    
    

    采用泛型的运行效率更高。

猜你喜欢

转载自blog.csdn.net/ShadowBurn/article/details/88071925