2016 – 2017 学年第一学期 期末考试试卷 课程名称:Java程序设计 试卷类型:A卷 共10页 考试形式:闭卷
一、单选题(每题1分,共1×15=15分)
1、Java 程序执行起点的main方法,其形参为( )
A. String args B. String[] args
C. Char arg D. StringBuffer [] args
2、按照Java命名约定,合理的标识符为( )
A. package com.myPackage;
B. public class dog
C. int Index
D. void SetCustomerName()
3、不符合Java语言规定的变量名是( )
A. 123variable B. variable123
C. variable_$_123 D. $variable$$$
4、与其他选项不相等的选项是( )
A. 10 B. 010 C. 0XA D.0b1010
5、属于Java关键字的选项是( )
A.@Override B.as C.default D.NULL
6、无需在程序中import就可以直接使用简单类名的类,属于包()
A.java.applet B.java.lang
C.java.awt D. .java.util
7、不属于Java赋值操作符的是( )
A. = B. >>= C.>>>= D. >=
8、int i= 0; i+=2.6; 则i的值为( )
A.2.0 B.2.6 C.2 D.3
9、int [ ][ ] x=new int[4][2],则 x.length 的值为( )
A. 0 B. 4 C. 2 D. 8
10、根据结合性,4+5+"="+1+2的值为( )
A. 12 B. "9=3" C. "45=12" D. "9=12"
11、表达式的值为false的选项是( )
A. new String() instanceof Object
B. "Java "instanceof String
C. null instanceof String
D.newint[2] instanceof Object
12、int i= 5,则(i = 2)>1? ++i: i--表达式的值为( )
A. 0 B. 1 C. 2 D. 3
13、下面语句执行后,i 的值为( )
inti=16;
while(i > 3 ) { i/=2; }
A. 16 B.8 C. 4 D. 2
14、求两个变量doublex,y之积的整数部分,合理的语句是( )
A.double d=(int)x*y;
B. doubled=(int)x* (int)y;
C. doubled=x*(int)y;
D. double d =(int)(x*y);
15、如果选择一个面向对象的最重要的概念,你认为是( )
A. 重载 B. 类层次 C. 回调 D. 多态
二、填空题(每空1分,共1×25=25分)
1、引用类型包括类类型、和。
2、整型常量默认为类型,而123L属于类型。
3、将高级语言源程序翻译给机器,存在两种基本的策略:与。Java同时采用了这两种策略,源程序文件被编译为文件,该文件的扩展名为。
4、不同于基于的命令编程范式和基于λ运算的,面向对象编程范式没有直接的源于可计算理论的模型。
5、状态变化是命令范式的焦点,正如SICP中指出:“广泛采用的程序设计被称为命令式程序设计”。
6、如Dog d = new SmartDog();语句,把一个子类引用赋值给父类的引用变量,称为。此时d的声明类为,d的实际类为。
7、计算机科学家证明,使用、和循环结构足以表达所有程序。
8、父类中,不能够被改写的方法是方法。而和方法,即使子类编写了签名完全相同的方法,但是它们与改写机制无关。
9、Java中仅仅定义接口而没有方法体的方法,被称为,在C++中等价的概念为。
10、使用访问修饰符限定,这一机制称为。
11、遵循LSP的继承形式包括特化继承,,接口继承和。
三、程序填空(每题3分,共3×10=30分)
1、给定代码
1. public static int test_a1 (int[] arg){
2. int sum=0;
3. for(intx : arg){
4. if( x % 3 == 0 ) sum += x;
5. }
6. return sum;
7. }
则test _a1 (new int[]{ 1 , 2 , 3, 4 , 5, 6})的返回值是。
2、 给定代码
1. public static boolean test_a2(String s){
2. String str = new String("abc");
3. return str==s;//str.equals(s);
4. }
则test _a2 ("abc")的返回值是。
3、给定符号函数代码
1. public static int sign(int i){
2. int x;
3. if (i<=0)
4. if (i<0)
5. x=-1;
6. else x=0;
7. else x=1;
8. return x;
9.}
则使用条件表达式简化上面的代码为
publicstatic int sign(int i){
return ;
}
4、给定类层次
packageOO;
importstatictips.Print.pln;//System.out.println
publicclassSup{
publicvoidshow(Sup obj) {pln("Sup/Sup"); }
}
packageOO;
importstatictips.Print.pln;
publicclassSubextendsSup{
@Overridepublicvoidshow(Sup obj) {pln("Sub/Sup"); }
publicvoidshow(Sub obj){pln("Sub/Sub"); }
}
则执行下面代码的输出为
public static void main(){
Sub f =new Sub();
f.show(f);
}
5. 给定代码
package OO.init;
import static tips.Print.pln;//System.out.println
public class Person{
private int age ;
public Person(){
this(0);
}
public Person(int age){
this.age = age;
}
public static void main(String[] args) {
Person p = new Person(10);
System.out.println(p.age);
}
}
执行main的输出为 。
6、给定代码
package OO.init;
import static tips.Print.pln;//System.out.println
public class SuperClass{
private int x;
public SuperClass(){ pln("sup-no-arg"); }
public SuperClass(int x){ pln("sup-int");}
}
class Sub extends SuperClass{
private int y;
public Sub(){pln("sub-no-arg"); }
public Sub(int y){ pln("sub-int");}
public static void main(String[] args) {
new Sub();
}
}
执行main的输出为
。
7、给定代码
package OO;
public class X{
public int add( int i){
return i++;
}
public static void main(String[] args) {
int i =8;
int k = new X().add(i);
System.out.println(i+" "+k);
}
}
执行main的输出为 。
8、下面程序的功能是递归求阶乘,请填空
public static long factorial (int n){
long x;
if (n<0 || n == 0) x=1;
else x=;
return x;
}
9、给定代码
public interface Playable{
public String play();
}
public interface Game{
default public String play(){
return "play Game";
}
}
public class Ball{
public String play(){
return "play Ball";
}
}
class Football extends Ball implements Playable, Game{}
public class Student{
static void test(){
Game p =new Football();
System.out.println(p .play());
}
}
执行test的输出为 。
10、下面程序的功能是打印表中各元素,请填空
package typeSystem.generics;
import static tips.Print.*;
import java.util.List;
import java.util.*;
public class GenericsBasic{
static void test(){
List myList = Arrays.asList("a1", "a2","a1");
for(){
pln( x );
}
}
}
四、程序设计题(第1题10分,第2题20分,共30分)
1、在包zoo中,编写一个动物/Animal接口,它有方法move(),其实现类Dog、Bird在改写move()时,简单打印"狗在跑"等。
测试类Test有实例方法test(Animala),在其中调用a的move();在测试类的main方法中,分别创建Dog、Bird的对象,并作为实际参数调用test(Animal)。(10分)
2、功能抽象的一个重要方面,编写一般性方法。
(1)编写Test类,在其sum方法中计算[a,b]间自然数的和。(2分)
下面给定的代码为通用求和方法
package templateMethod;
public abstract class Sum{
public final double getSum(int a,int b){ //求和函数
double sum=0;
for(int i =a;i<=b; i=next(i)){
sum+=item(i);
}
return sum;
}
public abstract int next(int i) ;
public abstract double item(int x);
}
(2)编写Sum的子类Sum_cubes,override/改写 Sum中的方法,完成的功能是计算[a,b]间自然数的立方和。(4分)
(3)将Sum类的两个抽象方法封装为2个(函数)接口NextInterface和ItemInterface,在Sum类是基础上重构得到MySum类,并编写其方法(6分)
public final double getSum(int a,int b,NextInterface iNext,ItemInterface iItem)
(4)编写测试类Client的main()方法,其中
l 定义Sum的匿名类,并调用其getSum(2,10),以计算[2,10] 间自然数的平方和;
l 以lambda表达式为MySum的getSum方法的实参,计算[1,100]间自然数之和。 (8分)
按照yqj2065的想法,这种考试就是让大家顺利通过的。送分题占70以上。
我在Java程序设计 中不搞什么名词解释、判断题、简答题...除了避免死记硬背,主观题在下一阶段学习中才有意义。
注:1-15没有错误答案,都可以,但是我想看看有多少人选择 类层次。