##选择题
###1、以下代码的输出结果是?

public class B
{
    public static B t1 = new B();
    public static B t2 = new B();
    {
        System.out.println("构造块");
    }
    static
    {
        System.out.println("静态块");
    }
    public static void main(String[] args)
    {
        B t = new B();
    }
}

A. 静态块 构造块 构造块 构造块
B. 构造块 静态块 构造块 构造块
C. 构造块 构造块 静态块 构造块
D. 构造块 构造块 构造块 静态块

####解析:
最先初始化的并不是静态块而是静态域,静态域包括“静态变量”“静态块”“静态方法”,其中需要初始化的是“静态变量”和“静态块”,而初始化顺序是谁靠前先搞谁。

所以先初始化 t 1 、 t 2 t1、t2 t1t2,初始 t 1 、 t 2 t1、t2 t1t2 时调用构造块,输出“构造块”,两次,然后再初始化静态块输出“静态块”,最后执行 m a i n ( ) main() main(),创建 t t t 调用构造块,输出“构造块”。

其实,这个题准确讲是没用正确答案的,因为 p r i n t l n println println,而不是 p r i n t print print,不过这个题考点明显不在这里,将就着选 C C C 也是可以理解的。

###2、java中下面哪些是Object类的方法( )

A. notify()
B. notifyAll()

C. sleep
D. wait()

####解析:
概念题,在根类 O b j e c t Object Object 中包含的方法有:

clone();
equals();
finalize();
getClass();
notify(), notifyAll();
hashCode();
toString();
wait();
……

不包含 s l e e p ( ) sleep() sleep(),故选 A B D ABD ABD

###3、考虑下面这个简单的例子,让我们看看reflection是如何工作的。

import java.lang.reflect.*;

public class DumpMethods{
    public static void main(String[] args) {
        try {
            Class c=Class.forName(args[0]);
            Method m[]=c.getDeclaredMethods();
            for (int i = 0; i < m.length; i++) {
                System.out.println(m[i].toString());
            }
        } catch (Throwable e) {
            System.err.println(e);
        }
    }
}

其中"c.getDeclaredMethods"的作用是:

A. 取得类的公有方法对象
B. 取得类的所有公有方法名称
C. 取得类的所有方法对象
D. 以上选项都不正确

####解析:
g e t D e c l a r e d M e t h o d s getDeclaredMethods getDeclaredMethods 的作用是:返回 M e t h o d Method Method 对象的一个数组,这些对象反映此 C l a s s Class Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。

###4、下面程序的输出结果是?

package algorithms.com.guan.javajicu; 
public class TestDemo { 
    public static String output =""; 
    public static void foo(int i){ 
       try{ 
           if(i == 1){ 
              throw new Exception(); 
           } 
       }catch(Exception e){ 
           output += "2"; 
           return ; 
       }finally{ 
           output += "3"; 
       } 
       output += "4"; 
    } 
    
    public static void main(String[] args) { 
       foo(0); 
       foo(1); 
       System.out.println(output);
    } 
}

A. 出错
B. 342
C. 34234
D. 3423

####解析:
除了两种情况, t r y try try 没用被执行到或者在 f i n a l l y finally finally 前有 S y s t e m . e x i t ( 0 ) ; System.exit(0); System.exit(0); 这样的语句被执行,否则 f i n a l l y finally finally 中的语句总会执行,即使有 r e t u r n return return,也会执行。 f i n a l l y finally finally 是在 r e t u r n return return 执行之后,返回之前执行。

###5、检查程序,是否存在问题,如果存在指出问题所在,如果不存在,说明输出结果。

public class HelloB extends HelloA 
{
 public HelloB()
 {
 }
 {
     System.out.println("I’m B class");
 }
 static
 {
     System.out.println("static B");
 }
 public static void main(String[] args)
 {
     new HelloB();
 }
}
class HelloA
{
 public HelloA()
 {
 }
 {
     System.out.println("I’m A class");
 }
 static
 {
     System.out.println("static A");
 }
}

A. static A
I’m A class
static B
I’m B class

B. I’m A class
I’m B class
static A
static B

C. static A
static B
I’m A class
I’m B class

D. I’m A classstatic AI’m B classstatic B

####解析:
本题涉及静态初始化代码块、构造代码块、构造方法,当涉及到继承时,按照如下顺序执行:
1、执行父类静态代码块;
2、执行子类静态代码块;
3、执行父类构造代码块;
4、执行父类构造函数;
5、执行子类构造代码块;
6、执行子类构造函数。

###6、有如下代码:请写出程序的输出结果。

public class Test
{
    public static void main(String[] args)
    {
        int x = 0;
        int y = 0;
        int k = 0;
        for (int z = 0; z < 5; z++) {
            if ((++x > 2) && (++y > 2) && (k++ > 2))
            {
                x++;
                ++y;
                k++;
            }
        }
        System.out.println(x + ”” +y + ”” +k);
    }
}

A. 432
B. 531
C. 421
D. 523

####解析:
z = 0 : 100 z = 0 : 100 z=0:100
z = 1 : 200 z = 1 : 200 z=1:200
z = 2 : 310 z = 2 : 310 z=2:310
z = 3 : 420 z = 3 : 420 z=3:420
z = 4 : 531 z = 4 : 531 z=4:531

###7、下面有关JDK中的包和他们的基本功能,描述错误的是?

A. java.awt: 包含构成抽象窗口工具集的多个类,用来构建和管理应用程序的图形用户界面
B. java.io:  包含提供多种输出输入功能的类
C. java.lang: 包含执行与网络有关的类,如URL,SCOKET,SEVERSOCKET
D. java.util: 包含一些实用性的类

####解析:

java.awt: 		包含构成抽象窗口工具集的多个类,用来构建和管理应用程序的图形用户界面
java.lang: 		提供java编程语言的程序设计的基础类
java.io: 		包含提供多种输出输入功能的类,
java.net:		包含执行与网络有关的类,如URL,SCOKET,SEVERSOCKET,
java.applet:	包含java小应用程序的类
java.util:	 	包含一些实用性的类

###8、要在session对象中保存属性,可以使用以下哪个语句( )

A. session.getAttribute(“key”,”value”)
B. session.setAttribute(“key”,”value”)
C. session.setAttribute(“key”)
D. session.getAttribute(“key”)

####解析:
获取属性用 g e t A t t r i b u t e getAttribute getAttribute,保存属性用 s e t A t t r i b u t e setAttribute setAttribute,属性是键值对,要保存属性需要将键值对传递进去才行。

###9、已知表达式int m[]={0,1,2,3,4,5,6};下面哪个表达式的值与数组下标量最大值相等?

A. m. length()
B. m. length-1
C. m. length()+1
D. m. length+1

####解析:
在计算机中,数组下标是从 0 0 0 开始数的,所以如果数组大小是 l e n g t h length length 的话,那么最后一个元素的下标是 l e n g t h − 1 length - 1 length1

另外,数组有 . l e n g t h .length .length 属性,而 S t r i n g String String . l e n g t h ( ) .length() .length() 方法。

###10、BufferedReader的父类是以下哪个?

A. FilterReader
B. InputStreamReader
C. PipedReader
D. Reader

####解析:
如何判断一个类的父类是谁,一般可以直接看后缀,后缀代表功能。

R e a d e r Reader Reader 是对字符流进行操作的。

B u f f e r e d R e a d e r BufferedReader BufferedReader 采用缓存的形式对字符流进行操作,它和 F i l t e r R e a d e r FilterReader FilterReader I n p u t S t r e a m R e a d e r InputStreamReader InputStreamReader P i p e R e a d e r PipeReader PipeReader 是并列关系,都是继承了 R e a d e r Reader Reader 类。