《Java程序设计精典教程》习题答案 编著:胡伏湘,雷军环 清华大学出版社 第三章习题答案

一、简答题

1.类的修饰符包括哪些?各起什么作用?
包括访问控制符(表示被访问权限)、抽象类说明符abstract(说明是否是抽象类)、最终类说明符final(表示是否是最终类)。

2.什么是抽象类?什么是抽象方法?抽象方法与普通方法有什么不同?
以abstract作为关键字,如果有的话,应该放在访问控制符后面,表示这个类是个抽象类。抽象类中至少包含一个抽象方法,抽象方法是只声明了方法名和参数而没有定义方法体的特殊方法。抽象类不能直接产生实例化一个对象,它只能被继承。

3.父类与子类是怎样建立关联的?如果父类和子类中都有一个同名的方法,在程序中调用这个方法,应该用什么关键字来区分?
父类与子类是通过继承和派生建立关联的,父类可以派生出子类,可以被子类继续,子类可以继续父类的属性和方法。
如果父类和子类中都有一个同名的方法,通过关键字super和this区分,super表示调用父类的方法,而this表示调用的是子类的方法。

4.普通数据类型参数和引用数据类型在方法中的传递有什么不同?
普通数据类型参数的传递采用值传递,在方法中对变量的改变不会影响到主程序的同名变量,引用数据类型在方法中的传递采用地址传递,在方法中对变量的改变使主程序的同名变量发生改变。

5.什么是构造方法?构造方法有什么特点?
构造方法是一种特殊的方法,当用new命令每生成一个实例时,构造方法都会自动执行一次,而无须用户手工引用。
构造方法的特征:具有与类相同的名称,不含返回类型,不能在方法中用return语句返回一个值。
在类实例化时,它会由系统自动调用

6.字符串类有哪两种?各有什么特点?
Java.lang语言核心包中定义了String和StringBuffer两个来封装对字符串的各种操作,它们都是final类,不能被其它类继承。
String类用于比较两个字符串、查找串中的字符及子串、字符串与其它类型的转换,String类对象的内容初始化后不能改变。
StringBuffer类用于内容可以改变的字符串,可将其它类型的数据增加、插入到字符串中,也可翻转字符串的的内容。
7.JDK帮助系统有哪几种?分别说明它们的使用特点。
JDK帮助文件提供了两种类型,一种是采用网页格式,其启动文件是index.html,另一种是chm格式,其启动文件是jdkxxx.chm,这里的xxx是版本号,如目前常用的是jdk142.chm。
采用网页格式的帮助文档的主界面由两大部分组成:一部分是导航标题,另一部分是结构图。在结构图的下面,是对导航栏的解释说明。这种帮助文档的各个页面中包括大量的超链接,用户可以点击有关关键字而打开对应的页面,也可以作用浏览器中的各种菜单用工具按钮,通过此帮助文档可以方便地了解JDK的体系结构。
chm格式的帮助文档具有更加方便的查询功能,可以想象包、类、方法、常量,是初学者非常理想的学习工具。

8.简要说明内部类的含义。
所谓内部类,就是在某个类的内部嵌套定义的一个类,内部类可以在一个语句块的内部定义,也可以是其它类的成员,还可以在一个表达式内部匿名定义。

9.设置cha=“JavaApplication”,下面结果是什么?
cha.length()
cha.concat(“Applet”)
cha.substring(3,8)
cha.replace(‘a’,‘A’)
它们的结果分别是15,JavaApplication Applet,aAppl,JAvAApplicAtion。

二、编程题

1.定义一个日期类,包括年、月、日三个属性和一个方法,用于判断是不是闰年。然后实例化两个对象,今天和明天,并分别给它们赋值。

class DateClass  {
  int year,month,day;
  boolean isLeapYear(){
    boolean is;
    if (((year%4==0)||(year%100==0))&&(year%400!=0)) 
      return true;
    else 
      return false;
  }//end isLeapYear(int y)
}//end class DateClass  

public class XT003201  {
  public static void main(String[] args)  {
    DateClass thisYear,nextYear;
    
    thisYear = new DateClass(); 
    thisYear.year=2005;
    thisYear.month=4;
    thisYear.day=5;
    
    nextYear = new DateClass(); 
    nextYear.year=2006;
    nextYear.month=10;
    nextYear.day=26;
    
    System.out.println(thisYear.isLeapYear());
    System.out.println(nextYear.isLeapYear());
  }//end main(String[] args)
}//end class XT003201

2.编写一个程序实现方法的重载。

class PassCheck  {
  String s,ok;
  PassCheck(String s)  {
    System.out.println("您设置的字符串是:"+s);
  }
  PassCheck(String s,String ok){
    if (s!=ok)
    System.out.println("您设置的字符串有错,正确的应该是:"+ok);}
  }

public class XT003202  {
  public static void main(String args[]){
    new PassCheck("Robit");
    new PassCheck("Mary","Susan");
  }
}

3.设定一个含有大小写字母的字符串,先将所有大写字母输出,再将所有小写字母输出。

public class XT003203{
  public static void main(String args[])  {
    String s="We are students from the Tsinghua University.";
    int i;
    char ch[];
    ch=s.toCharArray(); //转换为数组
    for (i=0;i<ch.length;i++)
      if ((ch[i]<'Z')&&(ch[i]>'A')) 
        System.out.print(ch[i]);
    System.out.println();
    for (i=0;i<ch.length;i++)
      if ((ch[i]<'z')&&(ch[i]>'a'))
        System.out.print(ch[i]);
    System.out.println();
  }//end main()
}//end class

4.设定6个字符串,打印出以“a”字母开头的字符串。

public class XT003204{
  public static void main(String agrs[])  {
    int i;
    String[] s = {"abc","dcb","fasdfas","asew","fery","dee"};
    for (i=0;i<6;i++)
      if (s[i].charAt(0)=='a') 
        System.out.println(s[i]);
  }
}

5.编写一个含有抽象方法和一个抽象类的程序。

abstract class ObjectAccess{  //抽象类
int num=0;
Object access[]=new Object[20];
abstract void inputToArray(Object o); //抽象方法1
abstract Object outputFromArray();  //抽象方法2
}

三、上机操作题
1. 分别从网上下载两种格式的JDK帮助文档。

2.运行下面的程序,输出并记录结果。

class Father{
  private int f1,f2;
  public Father(int f1,int f2)  {
    this.f1=f1;this.f2=f2;
  }
  public void print()  {
    System.out.println("f1="+f1+"  f2="+f2);
  }
}

class Child extends Father  {
  private int c1,c2;
  public Child(int f1,int f2,int c1,int c2)  {
    super(f1,f2);
    this.c1=c1;this.c2=c2;
  }
  public void print() {
    super.print();
    System.out.println("c1="+c1+"  c2="+c2);
  }
}
//增加的测试代码
public class XT003302  {
  public static void main(String[] args)  {
    Child c = new Child(1,2,3,4);
    c.print();
  }
}

输出:
f1=1 f2=2
c1=3 c2=4

3.打开JDK文档,找出类long的所有方法,并记录下来。

4.编写一个程序,实现把数组中各个分量累加起来的功能,并上机调试。

public class XT003304  {
  public static void main(String[] args)  {
    int[] a = {3,543,6,23,56,88};
    int i,sum=0;
    for (i=0;i<a.length;i++)
      sum +=a[i];
    System.out.println("数组的合计为:"+sum);
  }
}
  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
评论

打赏作者

qq_1754071469

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值