java试题复盘——11月25日

上:

11下列表述错误的是?(D

 
 A、
 
 int是基本类型,直接存数值,Integer是对象,用一个引用指向这个对象。
 
 B、
 
 在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过
 
 C、
 
 封装的主要作用在于对外隐藏内部实现细节,可以增强程序的安全性
 
 D、
 
 finaljava中的修饰符,可以修饰类、接口、抽象类、方法和属性。

解析:

抽象类:子类继承重写
final:不允许重写
此处矛盾
 
 

16默认RMI采用的是什么通信协议?  C

A、 HTTP

B、 UDP/IP

C、 TCP/IP

D、 Multicast

解析:

RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制。使用这种机制,某一台计算机上的对象可以调用另外一台计算机上的对象来获取远程数据。RMI是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径。在过去,TCP/IP套接字通讯是远程通讯的主要手段,但此开发方式没有使用面向对象的方式实现开发,在开发一个如此的通讯机制时往往令程序员感觉到乏味,对此RPC(Remote Procedure Call)应运而生,它使程序员更容易地调用远程程序,但在面对复杂的信息传讯时,RPC依然未能很好的支持,而且RPC未能做到面向对象调用的开发模式。针对RPC服务遗留的问题,RMI出现在世人面前,它被设计成一种面向对象的通讯方式,允许程序员使用远程对象来实现通信,并且支持多线程的服务,这是一次远程通讯的革命,为远程通信开辟新的里程碑。

RMI的开发步骤

先创建远程接口及声明远程方法,注意这是实现双方通讯的接口,需要继承Remote
开发一个类来实现远程接口及远程方法,值得注意的是实现类需要继承UnicastRemoteObject
通过javac命令编译文件,通过java -server 命令注册服务,启动远程对象
最后客户端查找远程对象,并调用远程方法。
 
 

17Given:

1

2

3

4

5

6

7

8

9

    //point X

public class Foo {

    public static void main(String[] args) throws Exception {

 

        PrintWriter out = new PrintWriter(

            new java.io.OutputStreamWriter(System.out), true);

        out.printIn(“Hello”)

    }

}

 

Which statement at PointX on line I allows this code to compile and run?    A

A、 import java.io.PrintWriter;

B、 include java.io.PrintWriter;

C、 import java.io.OutputStreamWriter;

D、 include java.io.OutputStreamWriter;

E、 no statement is needed.

 
 
解析:
思路:
首先排除include和最后一个
其次:
    1.PrintWriter
    2.OutputStreamWriter
注意:
    在创建OutputStreamWriter的时候,使用的是类的全名称。所以不需要使用import

18 对于abstract声明的类,下面说法正确的是 E

A、 可以实例化

B、 不可以被继承

C、 子类为abstract

D、 只能被继承

E、 可以被抽象类继承

解析:

A、抽象类不能实例化,因为有抽象方法未实现
B、可以被继承。派生类可以实现抽象方法
C、子类可以是抽象的,也可以非抽象的
D、只能被继承说法太肯定,不正确
E、可以被抽象类继承,也可以被非抽象类继承

解析:

服务器端,首先是服务器初始化Socket,然后是与端口进行绑定(blind()),端口创建ServerSocket进行监听(listen()),然后调用阻塞(accept()),等待客户端连接。与客户端发生连接后,会进行相关的读写操作(read(),write()),最后调用close()关闭连接。

21ParentChild定义如下:

class  Parent{

2.         public  float  aFun(float a, float b) { }

}

class  Child  extends  Parent{

}

将以下哪种方法插入行5是不合法的。(  A  

A、 float aFun(float  a,  float  b){ }

B、 public int aFun(int a, int b) { }

C、 public float aFun(float  p,  float q){ }

D、 private int aFun(int a,  int  b){ }

解析:

重写原则(两同两小一大):

1、两同:方法名相同,形参列表相同。

2、两小:子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常更小或相等。

3、一大:子类方法的访问权限应比父类方法的访问权限更大或相等。

4、尤其指出:覆盖方法和被覆盖方法要么都是类方法,要么都是实例方法,不能一个是类方法,一个是实例方法。


A选项是重写,但是默认访问修饰符比父类小,插入第五行编辑器会报错。(默认包访问权限 > public)
B、D不是重写。因为形参列表和返回值类型不同,不满足“两同两小”。所以写在第五行以普通方法对待,插入第五行没有错误。
C选项满足重写的各项条件,是正确的重写,所以插入第五行没有错误。

22关于匿名内部类叙述正确的是? (B)

 

 
 A、
 
 匿名内部类可以继承一个基类,不可以实现一个接口
 
 B、
 
 匿名内部类不可以定义构造器
 
 C、
 
 匿名内部类不能用于形参
 
 D、
 
 以上说法都不正确

解析:

匿名内部类的创建格式为: new 父类构造器(参数列表)|实现接口(){
                                             //匿名内部类的类体实现
                                         }
  1. 使用匿名内部类时,必须继承一个类或实现一个接口
  2. 匿名内部类由于没有名字,因此不能定义构造函数
  3. 匿名内部类中不能含有静态成员变量和静态方法

25、下列关于JAVA多线程的叙述正确的是(BC)(多选)

A、 调用start()方法和run()都可以启动一个线程
B、 CyclicBarrier和CountDownLatch都可以让一组线程等待其他线程
C、 Callable类的call()方法可以返回值和抛出异常
D、 新建的线程调用start()方法就能立即进行运行状态

 解析:

A. start()方法来启动线程,真正实现了多线程运行,调用了run()方法;run()方法当作普通方法的方式调用。

B. CyclicBarrier让一组线程等待其他线程;CountDownLatch让一组线程等待某个事件发生。
C. Callable能够抛出checked exception。
D. start()方法让thread进去可运行状态(runnable),等待获取CPU的使用权。

27、

关于下面一段代码,以下说法正确的是: (ACD)(多选)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

public class Test {

    private synchronized void a() {

    }

    private void b() {

        synchronized (this) {

        }

    }

    private synchronized static void c() {

    }

    private void d() {

        synchronized (Test.class) {

        }

    }

}

A、 同一个对象,分别调用方法a和b,锁住的是同一个对象

B、 同一个对象,分别调用方法a和c,锁住的是同一个对象

C、 同一个对象,分别调用方法b和c,锁住的不是同一个对象

D、 同一个对象,分别调用方法a、b、c,锁住的不是同一个对象

解析:同步普通方法锁的是this也就是当前对象,同步静态方法锁的是类对象,也就是Class对象

29、局部内部类可以用哪些修饰符修饰?(CD)(多选)

A、 public

B、 private

C、 abstract

D、 final

34、ArrayList和LinkList的描述,下面说法错误的是? D

A、 LinkedeList和ArrayList都实现了List接口

B、 ArrayList是可改变大小的数组,而LinkedList是双向链接串列

C、 LinkedList不支持高效的随机元素访问

D、 在LinkedList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在ArrayList的中间插入或删除一个元素的开销是固定的

解析:

D的说法反了...

Arraylist的内存结构是数组,当超出数组大小时创建一个新的数组,吧原数组中元素拷贝过去。其本质是顺序存储的线性表,插入和删除操作会引发后续元素移动,效率低,但是随机访问效率高

LinkedList的内存结构是用双向链表存储的,链式存储结构插入和删除效率高,不需要移动。但是随机访问效率低,需要从头开始向后依次访问

37、下面程序的输出是:(D)

1

2

3

4

5

String x="fmn";

x.toUpperCase();

String y=x.replace('f','F');

y=y+"wxy";

System.out.println(y);

A、 FmNwxy

B、 fmnwxy

C、 wxyfmn

D、 Fmnwxy

解析:

String x="fmn";  “fmn”是在常量池里的不可变对象。

x.toUpperCase();   在堆中new一个"FMN"对象,但无任何引用指向它。
String y=x.replace('f','F'); 在堆中 new一个"Fmn"对象,y指向它。
y=y+"wxy"; 在堆中 重新new一个"Fmnwxy"对象, 修改y指向,现在y指向它。

39、以下程序的运行结果是:(   C )

1

2

3

4

5

6

7

8

9

10

 TreeSet<Integer> set = new TreeSet<Integer>();

 TreeSet<Integer> subSet = new TreeSet<Integer>();

 for(int i=606;i<613;i++){

 if(i%2==0){

 set.add(i);

 }

 }

 subSet = (TreeSet)set.subSet(608,true,611,true);

 set.add(629);

 System.out.println(set+" "+subSet);

 

A、 编译失败

B、 发生运行时异常

C、 [606, 608, 610, 612, 629] [608, 610]

D、 [606, 608, 610, 612, 629] [608, 610,629]

解析:

subset(form,true,to,true)是Treeset的非静态方法,该方法返回从form元素到to元素的一个set集合,两个boolean类型是确认是否包含边境值用的。

41、Java程序中的类名称必须与存放该类的文件名相同。 B

A、 对

B、 错

 解析:

声明为public类型的类名必须与文件名相同,默认权限的可以不同
并且内部类的类名一般与文件名不同

43、以下代码执行的结果显示是多少(B)?

public class Demo{

    public static void main(String[] args){

        System.out.print(getNumber(0));

        System.out.print(getNumber(1));

        System.out.print(getNumber(2));

        System.out.print(getNumber(4));

    }

    

    public static int getNumber(int num){

        try{

            int result = 2 / num;

            return result;

        }catch (Exception exception){

            return 0;

        }finally{

            if(num == 0){

                return -1;

            }

            if(num == 1){

                return 1;

            }

        }

    }

}

A、 0110

B、 -1110

C、 0211

D、 -1211

解析:

finally一定会在return之前执行,但是如果finally使用了return或者throw语句,将会使trycatch中的return或者throw失效

45、于访问权限,说法正确的是? (A )

A、 类A和类B在同一包中,类B有个protected的方法testB,类A不是类B的子类(或子类的子类),类A可以访问类B的方法testB
B、 类A和类B在同一包中,类B有个protected的方法testB,类A不是类B的子类(或子类的子类),类A不可以访问类B的方法testB
C、 访问权限大小范围:public > 包权限 > protected > private
D、 访问权限大小范围:public > 包权限 > private > protected

 

46、在 Java 中,属于整数类型变量的是(C)

A、 single
B、 double
C、 byte
D、 char

 解析:

Java中的四类八种基本数据类型

第一类:整数类型  byte short int long

第二类:浮点型  float double

第三类:逻辑型    boolean(它只有两个值可取true false)

第四类:字符型  char

48、

static String str0="0123456789";

static String str1="0123456789";

String str2=str1.substring(5);

String str3=new String(str2);

String str4=new String(str3.toCharArray());

str0=null;

假定str0,...,str4后序代码都是只读引用。
Java 7中,以上述代码为基础,在发生过一次FullGC后,上述代码在Heap空间(不包括PermGen)保留的字符数为(C)

A、 5

B、 10

C、 15

D、 20

 解析:

substring实际是new,5字符
str3和4也都是new,每个5字符
分别都会创建新的对象
常量池是PermGen的
因此应该是一共15字符

猜你喜欢

转载自www.cnblogs.com/buhuiflydepig/p/11906287.html