java面试题2及解答

选择题(25 x 2分)

1.在调用方法时,若要使方法改变实参的值,可以()

A) 用基本数据类型作为参数

B) 用对象作为参数

C) AB都对

D) AB都不对

 

2. Java中()

A) 一个子类可以有多个父类,一个父类也可以有多个子类

B) 一个子类可以有多个父类,但一个父类只可以有一个子类

C) 一个子类可以有一个父类,但一个父类可以有多个子类

D) 上述说法都不对

 

3.Java语言具有许多优点和特点,哪个反映了Java程序并行机制的特点?()

A) 安全性         B) 多线性            C) 跨平台            D) 可移植

 

4. Character流与Byte流的区别是()

A) 每次读入的字节数不同                      

B) 前者带有缓冲,后者没有

C) 前者是字符读写,后者是字节读写  

D) 二者没有区别,可以互换使用

 

5.以下声明合法的是(         

Adefault  String  s                  

Bpublic  final  static  native  int  w( )

Cabstract  double  d                  

Dabstract  final  double  hyperbolicCosine( )

 

6.     关于以下程序段,正确的说法是(    

  String  s1=”abc”+”def”;

  String  s2=new  Strings1);

  ifs1= =s2

     System.out.println(“= = succeeded”);

  if (s1.equals(s2))

     System.out.println(“.equals()  succeeded”);

A、行4与行6都将执行            B、行4执行,行6不执行

C、行6执行,行4不执行         C、行4、行6都不执行

 

7.     Java application中的主类需包含main方法,main方法的返回类型是什么?( 

Aint               Bfloat                Cdouble             Dvoid

 

8.     以下哪个方法用于定义线程的执行体?     

A start()            Binit()               Crun()       Dsynchronized()

 

9.     以下标识符中哪项是不合法的(        )

Aconst             B$double        Chello      DBigMeaninglessName

 

10.     以下哪个关键字可以用来为对象加互斥锁?(   

Atransient         Bstatic         C serialize         Dsynchronized

 

11. 有如下代码段:

1)

2) { if(unsafe()){//do something…}

3) else if(safe()){//do the other…}

4) }

其中,方法unsafe() 将抛出IOException, 请问可将以下哪项填入第1行?(   

A public IOException methodName()    

B public void methodName()

Cpublic void methodName() throw IOException

Dpublic void methodName() throws IOException

 

12. Java的字符类型采用的是Unicode编码方案,每个Unicode码占用(    )个比特位。

A8            B16                 C32                   D64

 

13.         以下关于继承的叙述正确的是(   )。

A、在Java中类只允许单一继承

B、在Java中一个类只能实现一个接口

C、在Java中一个类不能同时继承一个类和实现一个接口

D、在Java中接口只允许单一继承\

 

14.  给出下面代码,关于该程序以下哪个说法是正确的?(   

public class Person{

static int arr[] = new int[5];

public static void main(String a[]) {

System.out.println(arr[0]);}

}

}

A、编译时将产生错误        B、编译时正确,运行时将产生错误

C、输出零            D、输出空

 

15.  在使用interface声明一个接口时,只可以使用(   )修饰符修饰该接口。

Aprivate       Bprotected         Cprivate  protected   Dpublic

 

16.     下列关于构造方法的叙述中,错误的是(    

AJava语言规定构造方法名与类名必须相同

BJava语言规定构造方法没有返回值,但不用void声明

CJava语言规定构造方法不可以重载

DJava语言规定构造方法只能通过new自动调用

 

17.     下列哪个类的声明是正确的?(   

Aabstract final class HI{}                      Babstract private move(){}   

Cprotected private number;                   Dpublic abstract class Car{}

 

18. 关于被私有访问控制符private修饰的成员变量,以下说法正确的是(   

A.可以被三种类所引用:该类自身、与它在同一个包中的其他类、在其他包中的该类的子类

B.可以被两种类访问和引用:该类本身、该类的所有子类

C.只能被该类自身所访问和修改

D.只能被同一个包中的类访问

 

19.     下列关于for循环和while循环的说法中哪个是正确的?(   

Awhile循环能实现的操作,for循环也都能实现

Bwhile循环判断条件一般是程序结果,for循环判断条件一般是非程序结果

C.两种循环任何时候都可替换

D.两种循环结构中都必须有循环体,循环体不能为空

 

20.     阅读以下代码:

import java.io.*;

import java.util.*;

public class foo{

public static void main (String[] args){

String s;

System.out.println("s=" + s);

}

}

输出结果应该是:(  

A.代码得到编译,并输出“s=

B.代码得到编译,并输出“s=null

C.由于String s没有初始化,代码不能编译通过

D.代码得到编译,但捕获到 NullPointException异常

 

21.     下面哪一个循环会导致死循环?(   

       Afor (int k = 0; k < 0; k++)      Bfor (int k = 10; k > 0; k--)

       Cfor (int k = 0; k < 10; k--)     Dfor (int k = 0; k > 0; k++)

 

22.     有如下程序段:

       int a = b = 5;

       String s1 = "祝你今天考出好成绩!";

       String s2 = s1;

则表达式a == bs2 == s1的结果分别是:(   )。

       Atruetrue               Bfalsetrue

       Ctruefalse                Dfalsefalse

 

23.     Java中用什么关键字修饰的方法可以直接通过类名来调用?(   

  Astatic         Bfinal       Cprivate              Dvoid

 

24.若在某一个类定义中定义有如下的方法:abstract void performDial( );该方法属于(    )。

A、接口方法        B、最终方法        C、抽象方法        D、空方法

 

25.     有如下程序段:

int total = 0;

for ( int i = 0; i < 4; i++ ){

  if ( i == 1) continue;

  if ( i == 2) break;                          

  total += i;

}

则执行完该程序段后total的值为:(    )。

A0            B1                C3                     D6

 

二.简答题(6 x 5)

1. 运行时异常与一般异常有何异同?

2. &&&的区别。

3. OverloadOverride的区别。Overloaded的方法是否可以改变返回值的类型?

4. GC是什么? 为什么要有GC?

5. 根据不同作用范围写出四种会话跟踪技术

6写出至少五个常见的runtime exception

 

. 编程题(20分)

1.设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。

 

 

一.         选择题

1-25 BCBCD CDCAD DCACD CDCBC CAACA

 

二.         简答题

1异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常

2.   &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。

3方法的重写Overriding和重载OverloadingJava多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)Overloaded的方法是可以改变返回值的类型。

4.  GC是垃圾收集的意思(Gabage Collection,内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。

5. page否是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java servlet 类(可以带有任何的 include 指令,但是没有 include 动作)表示。这既包括 servlet 又包括被编译成 servlet JSP 页面

request是是代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件(由于 forward 指令和 include 动作的关系)

session是是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。一个 Web 会话可以也经常会跨越多个客户机请求

application是是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域

6. ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException

 

 

 

 

三.         编程题

以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。

public class ThreadTest1{

  private int j;

  public static void main(String args[]){

ThreadTest1 tt=new ThreadTest1();

Inc inc=tt.new Inc();

Dec dec=tt.new Dec();

for(int i=0;i<2;i++){

Thread t=new Thread(inc);

t.start();

t=new Thread(dec);

t.start();

}

}

  private synchronized void inc(){

j++;

System.out.println(Thread.currentThread().getName()+"-inc:"+j);

  }

  private synchronized void dec(){

j--;

System.out.println(Thread.currentThread().getName()+"-dec:"+j);

  }

  class Inc implements Runnable{

public void run(){

for(int i=0;i<100;i++){

inc();

}

}

  }

  class Dec implements Runnable{

public void run(){

for(int i=0;i<100;i++){

dec();

}

 }

  }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值