JAVA程序设计(学堂在线-清华大学) 课后练习题 已更新完毕
好像被限流了#¥%#¥@¥,有需要的话可以分享给同学 |
第三章 类的重用
3.1.1-3.1.2-类继承的概念和语法
单选题
1.Java类继承的层次结构为
A. 树状结构
B. 星状结构
C. 网格结构
D. 环形结构
2.关于父类和子类的下列说法中,正确的是
A. 一个子类可以有多个父类
B. 一个父类可以有多个子类
C. 一个父类只可以有一个子类
D. 以上说法都不对
3.关于继承的下列说法中,正确的是
A. 一个类可以继承自父类,也可以不继承自父类
B. 一个父类必须被子类继承后才能被实现
C. 在类继承的树形结构中,有多个根节点
D. 以上都不对
4.A类有a、b、c三个public变量成员,B类继承自A,并且增加了自己的public变量成员d,C继承自A,增加了自己的public变量成员e,则下列说法中错误的是
A. A类拥有c成员
B B类拥有b成员
C. C类拥有d成员
D. B类拥有c成员
5.A类继承自B类,那么A类中不可以使用
A. B类的保护方法
B. B类的公有属性
C. B类的私有属性
D. A类的私有属性
.
3.1.3-隐藏和覆盖
多选题
1.A类有属性balance,A类继承自B类,覆盖了balance属性,下面在A中哪种方法访问的是B类的balance属性
A. balance
B. balance
C. super.balance
D. super.getBalance()
2.在以下哪几种情况下需要进行方法的覆盖
A. 子类的方法和父类功能相同,但实现细节不同
B. 在名字相同的方法中要做更多的事情
C. 子类中要取消从父类继承的方法
D. 以上都不是
(单选题)3.下面关于Java的隐藏和覆盖的说法,正确的是
A. 覆盖方法时需要保证方法名完全相同
B. 覆盖方法时不需要参数列表完全相同
C. 覆盖方法时需要返回值可以不同
D. 进行变量隐藏时不能够修改变量类型
.
3.2-Object 类
单选题
1.关于Object类,下面说法正确的是
A. equals方法可以比较两个对象的属性值是否相等
B. 如果两个对象同一,那么它们不一定相等
C. 如果两个对象相等,那么它们一定同一
D. finalize()方法可以被直接调用
2.下面这段代码的输出为(忽略换行)
A. YES NO
B. NO YES
C. YES YES
D. NO NO
3.在Java中,Object类是所有类的直接或间接父类,下面哪种方法不属于Object类
A. equals(Object)
B. getClass()
C. toString()
D. trim()
.
3.3-终结类与终结方法
单选题 (1分)
1.假定类A有一个方法void method(),如果要求能够通过类名A直接调用method(),则其方法定义应该为
A. static void method()
B. public void method()
C. final void method()
D. abstract void method()
(多选题)2.如果需要抛出异常,可能会使用下面哪些关键字
A. final
B. finally
C. finalize
D. catch
3.单选题 (1分)
下面程序的运行结果是(忽略换行)
A. 2 2
B. 2 a
C. 运行错误,因为C的final方法不能被重写
D. 运行错误,因为A重写method时参数表不一样
4.(多选题)不能用来修饰interface的有
A. private
B. public
C. final
D. static
5.下面哪个类声明是正确的
A. abstract final class A;
B. abstract private move();
C. protected private number;
D. public abstract class B;
6.(多选题)final类和方法的存在处于以下哪些方面的考虑
A. 安全方面
B. 设计方面
C. 代码结构简单
D. 能够提高运行效率
.
3.4-抽象类
单选题 (1分)
1.下面关于抽象类和抽象方法的说法中,错误的是
A. 抽象类可以包含非抽象方法
B. 抽象类可以包含接口方法
C. 抽象类可以包含抽象方法
D. 抽象类不可以被实例化
2.下面哪些是合法的抽象类定义
A. abstract A {abstract void method()}
B. class abstract B {abstract void method()}
C. abstract class C {abstract void method()}
D. abstract class D {abstract void method(){System.out.println(‘‘d’’)}}
3.下面关于抽象方法的说法中,正确的是
A. 可以有方法体
B. 可以出现在非抽象类中
C. 没有方法体
D. 抽象类中的方法都被称为抽象方法
4.下面的说法正确的是
A. abstract可以修饰字段、方法和类
B. 抽象方法的body部分必须用大括号包住,但是需要为空
C. 声明抽象方法,大括号可有可以没有
D. 抽象方法没有方法体
.
3.5-泛型
1.(多选题)Java泛型机制的优点有
A. 可以使代码编写变得简单
B. 比较安全
C. 消除对Object类的强制类型转换
D. 使得代码运行性能增强
2.下面的代码运行结果为
A. test.A
B. test.B
C. java.lang.Integer
.
3.7-小结
第三章编程练习题 1.唯一路径
给定一个M*N的网格,你需要从左上角走到右下角,每一步你只能向下移或者向右移,请计算你能走的路径个数。 输入为一行,M和N,输出为路径数
输入描述 无
输出描述 无
示例1: 输入: 2 2 输出: 2
解答:
2.矩阵螺旋填充
给定一个整数n,生成一个以1到nxn的螺旋形填充的方阵。
输入描述 无
输出描述 无
示例1: 输入: 3 输出: 1 2 3 8 9 4 7 6 5
解答:
3.完美平方数
给定正整数n,找到最小数量的完美平方数(例如1, 4, 9, 16, …),其总和为n。
例如,给定n = 12,返回3,因为12 = 4 + 4 + 4; 给定n = 13,返回2,因为13 = 4 + 9。
输入描述 无
输出描述 无
示例1: 输入: 12 输出: 3
提示 无
解答:
.
第四章 接口与多态
4.1-接口
单选题
1.下面关于接口的说法正确的是:
A. 接口具有多重继承性,一个接口可以继承多个父接口
B. 接口中定义的数据,都是变量
C. 接口中定义的方法,可以在定义时提供实现
D. 接口用abstract 修饰
2.关于接口和抽象类的说法,正确的是:
A. 接口和抽象类都具有多重继承性,即一个可以继承多个
B. 不相关的类可以实现同一个接口,而抽象类属于一个类的继承体系,且一般位于类体系的顶层
C. 抽象类和接口都必须对数据成员进行初始化
D. 抽象类和接口都可以在定义时提供实现方法体
3.以下是接口I的定义:
interface I{
void setValue(int val);
int getValue();
}
以下哪段代码能够通过编译:
A. class A extends I{int value;public void setValue(int val){value=val;}public int getValue(){ return value;}}
B. class B implements I{int value; void setValue(int val){value=val;} public int getValue(){ return value;}}
C. interface C extends I {void add();}
D. interface D implements I{void add();}
4.已知MyInterface是一个接口,ClassA是实现了MyInterface的一个类,ClassB是ClassA的一个子类,则下列哪个语句是正确的
A. ClassB obj = new ClassA();
B. MyInterface obj = new ClassB()
C. ClassA obj = new MyInterface()
D. MyInterface obj = new MyInterface()
5.关于接口声明的语法,以下说法错误的是
A. 接口中的数据成员一定要有初值,且此值不能再更改,final关键词不可省略
B. 接口中的方法必须是“抽象方法”,不能有方法体,可以省略public及abstract关键字
6.关于接口实现的语法,正确的是
A. 可以用new运算符,直接产生接口对象
B. 必须实现接口中的所有方法
C. 来自接口的方法实现可以声明成private
7.A和B是两个定义好的接口,若类C想要实现这两个接口,以下做法正确的是
A. class C extends A implents B{}
B. class C implements A,B{}
C. class C implements A extends B{}
D. class C extends A,B
8.A,B是两个定义好的接口,若接口C想要拓展这两个接口,以下做法正确的是
A. interface C extends A,B{}
B. interface C implements A,B{}
C. class C extends A,B{}
D. class C implements A,B{}
9.接口的所有成员方法都具有()修饰的特性。
A. private,final
B. public, abstact
C. static protected
D. static
.
4.2.1-4.2.2-类型转换
单选题
1.下面关于类型转换的说法正确的是
(1) 在基本类型的转换中,是将值从一种类型转换成另一种类型
(2) 在引用类型的转换中,将引用转换为另一种类型的引用,不会改变对象本身的类型
(3) 当一个引用被转为其超类引用后,通过他能够访问的只有在超类中声明过的方法。
A. (1)(2)(3)
B. (1)(3)
C. (1)
D. (1)(2)
2.下列关于引用变量的类型转换规则,下列说法正确的是
(1) 可以将引用类型转换为任何一个(间接或者直接的)超类类型
(2) 可以将引用类型转换为对象所属的类(及其超类)实现的一个接口
(3) 可以将引用类型转换为引用所指向的对象的类型
A. (1)(2)(3)
B. (1)(3)
C. (1)
D. (1)(2)
3.对于类A,B,C,D和接口 IA,IB,IC 有以下的定义,
class A{}
class B extends A implements IA{}
class C extends B implements IB{}
class D extends B implements IC{}
interface IA{}
interface IB extends IA{}
interface IC extends IA{}
A tmpA = new A()
B tmpB = new B()
C tmpC = new C()
D tmpD = new D()
则下列使用方法中正确的是()
A. tmpB = tmpA
B. tmpC - tmpD
C. tmpA = tmpC
D. tmpD = tmpB
4.(多选题)对于题3中的类A,B,C,D和接口IA,IB,IC,下列类型转换中,正确的是()
A. IB ib = new D()
B. IC ic = new D()
C. IA ia = new C()
D. D d = new B()
5.对于题3 中的类A,B,C,D和接口IA,IB,IC,下列类型转换中,正确的是()
A. tmpA = tmpB; B b = (B)tmpA;
B. tmpA = tmpB; B b = tmpA;
.
4.2.3-方法的查找
单选题
1.关于塑形中方法的查找,以下说法正确的是
(1)对于实例方法,总是从原始类开始,沿类层次向上查找
(2)对于类方法,总是在变量声明所属的类中进行查找
A. (1)(2)都对
B. (1)错(2)对
C. (1)对(2)错
D. (1)(2)都错
2.已知
import java.io.*;
class Person{
public static void print(){System.out.print("Person");}
}
class Employee extends Person{
public void print(){
System.out.print("Employee");}
}
class Manager extends Employee{
public void print(){
System.out.print("Manager");}
}
public class Test{
public static void main(String[] args){
Manager man = new Manager();
Employee emp1 = new Employee();
Employee emp2 = (Employee)man;
Person person = (Person)man;
emp2.print();
System.out.print("#");
person.print();}
}
对于以上代码,其输出结果是
A. Employee#Person
B. Manager#Person
C. Employee#Manager
D. Manager#Manager
3.对于题2中的Person,Employee,Manager的print方法,若均是static的方法,其输出结果是
A. Employee#Person
B. Manager#Person
C. Employee#Manager
D. Manager#Manager
.
4.3-多态的概念
单选题 1.
import java.io.*;
class Person{
public void print(){System.out.print("Person ");}
}
class Employee extends Person{
public void print(){System.out.print("Employee ");}
}
class Manager extends Employee{
public void print(){System.out.print("Manager ");}
}
public class Test{
public static void main(String[] args){
Manager man = new Manager();
Person person1 = new Manager();
Person person2=new Employee();
person1.print();
person2.print();
}
}
对于上述代码,其结果输出为
A. Manager Employee
B. Person Person
C. Manager Person
D. Person Manager
2.若所有print方法均为static,则其结果输出为
A. Manager Employee
B. Person Person
C. Manager Person
D. Person Manager
.
4.4-多态的应用举例
单选题
import java.io.*;
class Person{
public void print(){System.out.print("Person ");}
public void printMyGender(String s){
this.print();
System.out.print(s+" ");
}
}
class Gender{
String type="gender";
public void print(Person p){p.printMyGender(type);}
}
class Female extends Gender{
public Female(){
type="female";
}
}
class Male extends Gender{
public Male(){
type="male";
}
}
class Employee extends Person{
public void print(){
System.out.print("Employee ");}
}
class Manager extends Employee{
public void print(){
System.out.print("Manager ");}
}
public class Test{
public static void main(String[] args){
Manager man = new Manager();
Employee em = new Employee();
Gender gender1 = new Male();
Gender gender2 = new Female();
gender1.print(man);
gender2.print(em);
}
}
对于以上代码,其运行结果是
A. Person male Person female
B. Person gender Person gender
C. Manager male Employee female
D. Manager gender Employee gender
.
4.5-构造方法与多态性
单选题 阅读下面的程序,输出结果是()
public class TestDemo{
int m=5;
public void some(int x){m=x;}
public static void main(String[] args){
new Demo().some(7);}
}
class Demo extends TestDemo{
int m=8;
public void some(int x){
super.some(x);
System.out.println(m);
}
}
A. 5
B. 8
C. 7
D. 无法确定
2.关于下面的程序,说法正确的是()
class Base{
int m;
public Base(int m){ this.m=m+1;}
}
public class TestDemo extends Base{
public TestDemo(){
m=m+1;
}
public static void main(String args[]){
TestDemo t = new TestDemo();
System.out.println(t.m);
}
A. 输出结果为0
B. 输出结果为1
C. 输出结果为2
D. 编译错误
3.关于下面的程序,说法正确的是()
class Base{
int m;
public Base(int m){ this.m=m+1;}
public Base(){this.m=0;}
}
public class TestDemo extends Base{
public TestDemo(){
m=m+1;
}
public static void main(String args[]){
TestDemo t = new TestDemo();
System.out.println(t.m);
}
}
A. 输出结果为0
B. 输出结果为1
C. 输出结果为2
D. 编译错误
4.关于下面的程序,编译和运行后输出结果是()
class Base{
int m=2;
public int getM(){return m;}
}
public class TestDemo extends Base{
int m=1;
public int getM(){return m+super.m;}
public static void main(String args[]){
TestDemo t = new TestDemo();
System.out.println(t.m+"#"+t.getM());
}
}
A. 1#3
B. 2#3
C. 1#2
D. 2#4
5.关于以下程序,其编译和运行结果为()
class Base{
public Base(){
System.out.print("B");
}
}
public class TestDemo extends Base{
int m=1;
public TestDemo(){
System.out.println("A");
}
public static void main(String args[]){
TestDemo t = new TestDemo();
}
}
A. ???A
B. ???AB
C. ???BA
D. ???BB
6.对于一下程序,其运行结果为
class Base{
public Base(){
System.out.print("C");
}
}
class Base2 extends Base{
public Base2(){
System.out.print("B");
}
}
public class TestDemo extends Base2{
int m=1;
public TestDemo(){
System.out.println("A");
}
public static void main(String args[]){
TestDemo t = new TestDemo();
}
}
A. ???CBA
B. ???BA
C. ???A
D. ???ABC
7.B继承A,C继承B,在Java源代码中有如下声明,
A a0= new A();
A a1= new B();
A a2= new C();
以下哪个说法是正确的
A. 只有a0能通过编译
B. 只有a0和a1能通过编译
C. a0,a1,a2能通过编译,但是第二行和第三行运行时出错
D. a0,a1,a2的声明都是正确的
8.对于以下类,
class A{}
class B extends A{}
class C extends A{}
public class Test{
public static void main(String[] args){
A x= new A();
B y= new B();
C z= new C();
}
}
以下哪个语句可以放到插入行
A. ???x=y
B.??? z=x
C. ???z=?y
D. ???y=(A)y
.
4.6-本章小结
编译题 1.字符串数字验证
验证一个给定的字符串是否为数字。是则输出1,不是则输出0
一些例子:
“0”=> true
" 0.1 "=> true
“abc”=> false
“1 a”=> false
“2e10”=>true
输入描述 无
输出描述 无
示例1: 输入: 2e10 输出: 1
解答:
2.数组跳跃
给定一个长度为N的非负的整数数组a[N],初始位置是数组的第一个位置,数组中的每一个数代表你至多能跳多远,如a[i]=3代表可以从a[i]调到a[i+3],判断你能否成功跳到数组的最后一个位置。输入为两行,第一行为数组的长度N,第二行为N个数,输出为0表示失败,1表示成功。
输入描述 无
输出描述 无
示例1: **输入:**5 2 3 1 1 4 输出: 1
示例2: **输入:**5 3 2 1 0 4 输出: 0
解答:
编译题 3.跳跃数组2
给定一个长度为N的非负的整数数组a[N],初始位置是数组的第一个位置,数组中的每一个数代表你至多能跳多远,如a[i]=3代表可以从a[i]调到a[i+3],你的目标是以最小的跳跃次数到达终点。输入为两行,第一行为数组的长度N,第二行为N个数,输出为跳跃次数。
输入描述 无
输出描述 无
示例1: 输入: 5 2 3 1 1 4 输出: 2
提示 2->3->4,两次跳跃
解答:
.
第五章 输入输出
5.1.1-5.1.2-异常处理的概念
单选题
1.下列哪种操作不会抛出异常?
A. 打开不存在的文件
B. 用负数索引访问数组
C. 浮点数除以0
D. 浮点数乘以0
2.Java程序运行时会自动检查数组的下标是否越界,如果越界,会抛出下面的哪一个异常?
A. SQLException
B. IOException
C. ArrayIndexOutOfBoundsException
D. SecurityManager
3.下面的程序编译后用以下命令运行:java ExceptionDemo hello,运行的情况是:
A. 先输出hello,然后发生异常,异常类型是ArithmeticException
B. 先发生异常,异常类型是IOException
C. 先输出hello,然后发生异常,异常类型是ArrayIndexOutOfBoundsException
D. 程序正常输出信息hello
.
5.1.3-5.1.5-异常的处理
单选题 1.如果一个程序中有多个catch语句,则程序会按如下哪种情况执行:
A. 找到合适的异常类型后执行后面的catch语句
B. 找到每个符合条件的catch都要执行一次
C. 找到合适的异常类型处理后就不再执行后面的catch语句
D. 对每个catch语句都执行一次
2.对异常处理语句try-catch-finally,下面那个说法是正确的:
A. 如果有多个catch语句,对所有的catch语句都会执行一次
B. 如果有多个catch语句,对每个符合条件的catch都会执行一次
C. 多个catch的情况下,异常类的排列顺序应该是父类在前,子类在后
D. 一般情况下,finally部分都会被执行一次
3.程序员将可能发生异常的代码放在( )块中,无论如何都需要执行的代码在( )块中:
A. catch、try
B. try、finally
C. try、exception
D. try、final
4.如果执行下面的example方法时,unsafe()有异常,则输出的结果是:
A. 123
B. 234
C. 23
D. 34
.
5.2-输入输出流的概念
单选题 1.下面哪个不属于Java标准输入输出流
A. ???System.in
B. ???System.out
C.??? System.stream
D. ???System.err
2.下面哪个流属于面向字符的输入流
A. ???BufferedWriter
B. ???FileInputStream
C. ???ObjectInputStream
D. ???InputStreamReader
3.如果需要从文件中读取数据,可以在程序中创建哪一个对象
A. ???FileInputStream
B. ???FileOutputStream
C. ???DataOutputStream
D. ???FileWriter
4.(多选题) 下面哪些类是节点流
A. ???FileInputStream
B. ???ObjectInputStream
C. ???PipedOutputStream
D. ???FilterOutputStream
5.(多选题) 下面哪些类是字符流
A. ???FileInputStream
B. ???FileOutputStream
C. ???FileWriter
D. ???InputStreamReader
6.(多选题) 下面哪些设备既可以是Java I/O的数据源,也可以是目标
A. 键盘
B. 磁盘文件
C. 网络连接
D. 扫描仪
.
5.3.1-写文本文件
单选题
1.下面说法正确的是
A. FileWriter类是Writer类的子类
B. FileWriter类是OutputStreamWriter类的子类
C. FileWriter类是FileOutputStream类的子类
D. Wirter类是OutputStreamWriter类的子类
2.下面说法中错误的是
A. FileWriter中append参数为true时,可以实现在文件内容之后写追加操作
B. Java程序中每个字符占2字节
C. 当使用PipedOutputStream类时,最后不需要调用输出流的close方法
D. BufferedWriter类的newLine方法是用于换行
3.(多选题) 对于下面代码的运行结果描述,正确的是
A. D盘根目录下不会出现345.txt文件
B. D盘根目录下会出现345.txt文件
C. 如果有345.txt文件,则其中内容为str字符串的内容
D. 如果345.txt文件之前有内容,则不会保留
4.(多选题) 下面的方法(只考虑函数名)中属于FileWriter类的有
A. close
B. append
C. print
D. wirter
.
5.3.2-读文本文件
单选题 1.下面说法中错误的是
A. FileReader类是Reader类的间接子类
B. InputStreamReader类是Reader类的子类
C. BufferedReader类可以读取一行
D. BufferedReader的readLine()函数,如果没有数据时会返回0
2.下列说法错误的是
A. 读文件时,如果最后没有关闭输入流会引起程序错误
B. 读文件时,可以用Reader类的read()方法判断是否读到文件结尾
C. Int read(char[] buf)方法是将读取的字符读入buf数组
D. 读文件时不需要调用flush方法
3.下面说法正确的是
A. 在写文件时,如果最后没有调用close方法则无法写入
B. 写文件时在close方法之前,调用flush方法,可以写入
C. 如果close方法之前没有调用flush方法,则无法写入
D. 仅调用flush方法不能保证数据写入文件
4.(多选题) 关于下面这段代码,描述正确的是
A. 命令行中会输出file.txt的所有内容
B. 会编译出错,因为没有调用close关闭输入流
C. 不会出错
D. 会编译出错,因为input初始值设为null
.
5.3.3-写二进制文件
单选题
1.下面关于DataOutputStream类方法的描述,错误的是
A. write(int)方法向底层输出流输出int变量的低八位,计数器增加1
B. writeByte(int)将int变量的低八位写入,计数器增加1
C. writeDouble(double)将double变量的的低八位写入,计数器增加1
D. writeInt(int)将int变量写入,计数器增加4
2.对于下面的代码,说法正确的是
A. 程序会错误,因为没有调用out.close()
B. D盘根目录下不会出现data1.dat文件,因为没有调用close方法
C. 如果data1.dat原本不在D盘根目录下,则程序会错误
D. 程序正确执行
3.对于第三题中的代码,若将所有的writeInt改为write,下列说法正确的是
A. 文件中不会有内容
B. 文件内容为2550-1
C. 文件内容为ff00 ff
D. 文件内容为00ff 0000 ffff
4.下面哪一个不是DataOutputStream类的方法(只考虑方法名)
A. flush
B. write
C. writeInteger
D. writeByte
.
第六章 对象群体的组织
6.1-Java集合框架介绍
单选题
1.下列关于Collection接口常用方法,叙述正确的是
A. size()方法可以返回当前集合所占用内存空间的大小
B. isEmpty()方法,可以用于判断集合对象中是否还有元素
C. contains()方法,可以用于添加对象
D. containsAll()方法,可以用于判断特定对象是否包含在集合中
2.集合S1,S2,S3实现了Collection接口同类集合,S1中元素为{1,2,3}, S2中元素为{1,2}, S3中元素为{2,3},下列做法中,不能将S1清空的是:
A. S1.clear()
B. S1.retainAll(S2); S1.removeAll(S3), S1.remove(2);
C. S1.removeAll(S2); S1.removeAll(S3);
D. S1.retainAll(S3);S1.removeAll(S2); S1.remove(3)
.
6.1-Java集合框架介绍
单选题
1.下列关于Set接口的描述,错误的是
A. Set接口禁止出现重复的元素
B. SortedSet接口中的元素是有序的,并且是按照降序排序
C. List接口中可以包括重复的元素,
D. List的元素的有顺序的,每个元素都有一个index值,用于标明元素在列表中的位置
2.下列哪些类没有实现List接口:
A. Vector
B. ArrayList
C. Stack
D. TreeSet
3.下列关于Queue接口的说法,错误的是:
A. Queue接口主要用于实现FIFO
B. LinkedList 既实现了List,也实现了Queue
C. PriorityQueue是一个按元素值排序的队列
D. 如果A先于B进队列,那么A会比B晚出队列
4.下列关于Map接口的说法正确的是
A. Map的关键词可以重复
B. SortedMap接口是将关键词按降序排序的特殊的Map
C. Map接口对于一个关键字,至多只能有一个value相对应
D. TreeMap 实现的是Map接口
|