java 面试.

1、

 1 public class Test
 2 {
 3     static boolean foo(char c)
 4     {
 5         System.out.print(c);
 6         return true;
 7     }
 8     public static void main( String[] argv )
 9     {
10         int i = 0;
11         for ( foo('A'); foo('B') && (i < 2); foo('C'))
12         {
13             i++ ;
14             foo('D');
15         }
16     }
17 }
What is the result?
 

A、ABDCBDCB

B、ABCDABCD

C、Compilation fails.

D、An exception is thrown at runtime.

答案:A
for循环执行过程,先执行初始化foo('A'),在执行条件foo('B'),满足条件执行foo('D'),判定是否满足下次执行条件foo('C');第二次初始化foo('A')语句不会再执行
 
 
2、
 1 public class Test {
 2 public static void main(String[] args) {
 3     StringBuffer a = new StringBuffer("A"); 
 4     StringBuffer b = new StringBuffer("B"); 
 5     operator(a, b); 
 6     System.out.println(a + "," + b); 
 7 } 
 8 public static void operator(StringBuffer x, StringBuffer y) { 
 9     x.append(y); y = x; 
10 }
11 }

A、A,A

B、A,B

C、B,B

D、AB,B

答案:D

解析:

    StringBuffer a = newStringBuffer("A"); 
    StringBuffer b = newStringBuffer("B"); 
 
此时内存中的状态如下图所示:
 
 
publicstaticvoidoperator(StringBuffer x, StringBuffer y) { 
    x.append(y); y = x; 
}
进入如下方法后,内存中的状态为:
 
 
 x.append(y);
这条语句执行后,内存的状态为:
 
 
 y = x; 
这条语句执行后,内存的状态为:
 
 
当operator方法执行完毕后内存中的状态为:因为方法执行完毕,局部变量消除。
 
有内存中的状态,可以知道最后的结果。
 
 
3、java接口的方法修饰符可以为?(忽略内部接口)

     A、private

     B、protected

     C、final

     D、abstract

答案:D

解析:

1、抽象类中的抽象方法(其前有abstract修饰)不能用private、static、synchronized、native访问修饰符修饰。原因如下:抽象方法没有方法体,是用来被继承的,所以不能用private修饰;static修饰的方法可以通过类名来访问该方法(即该方法的方法体),抽象方法用static修饰没有意义;使用synchronized关键字是为该方法加一个锁。。而如果该关键字修饰的方法是static方法。则使用的锁就是class变量的锁。如果是修饰 类方法。则用this变量锁。但是抽象类不能实例化对象,因为该方法不是在该抽象类中实现的。是在其子类实现的。所以。锁应该归其子类所有。所以。抽象方 法也就不能用synchronized关键字修饰了;native,这个东西本身就和abstract冲突,他们都是方法的声明,只是一个吧方法实现移交给子类,另一个是移交给本地操作系统。如果同时出现,就相当于即把实现移交给子类,又把实现移交给本地操作系统,那到底谁来实现具体方法呢? 


2、接口是一种特殊的抽象类,接口中的方法全部是抽象方法(但其前的abstract可以省略),所以抽象类中的抽象方法不能用的访问修饰符这里也不能用。而且protected访问修饰符也不能使用,因为接口可以让所有的类去 实现(非继承) ,不只是其子类,但是要用public去修饰。接口可以去继承一个已有的接口。 

4、

下列Java代码中的变量a、b、c分别在内存的____存储区存放。

1 class A {
2     private String a = “aa”;
3     public boolean methodB() {
4         String b = “bb”;
5         final String c = “cc”;
6     }
7 }

A、堆区、堆区、堆区

B、堆区、栈区、堆区

C、堆区、栈区、栈区

D、堆区、堆区、栈区

E、静态区、栈区、堆区

F、静态区、栈区、栈区

答案:C
a是类中的成员变量,存放在堆区
b、c都是方法中的局部变量,存放在栈区
 
 
5、
以下关于final关键字说法错误的是

      A、final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性

      B、final修饰的类肯定不能被继承

      C、final修饰的方法不能被重载

      D、final修饰的变量不允许被再次赋值

答案:AC 

final修饰类、方法、属性!不能修饰抽象类,因为抽象类一般都是需要被继承的,final修饰后就不能继承了。
final修饰的方法不能被重写而不是重载! 
final修饰属性,此属性就是一个常量,不能被再次赋值! 
 
 
6、
 1 public class Test{
 2     static int cnt = 6;
 3     static{
 4         cnt += 9;
 5     }
 6 public static void main(string[] args){
 7     System.out.println(“cnt =” + cnt);
 8 }
 9 static{
10     Cnt /=3;
11     };
12 }
Cnt的值是

A、Cnt=5

B、Cnt=2

C、Cnt=3

D、Cnt=6

答案:A

解析:

初始化静态变量--执行静态代码块--执行main方法

原文地址:https://www.cnblogs.com/UniqueColor/p/5550220.html