16. ArrayList list = new ArrayList(20);中的list扩充几次() 
 
A 0     B 1     C 2      D 3 
 
答案:A 
 
解析:这里有点迷惑人,大家都知道默认ArrayList的长度是10个,所以如果你要往list里添加20个元素肯定要扩充一次(扩充为原来的1.5倍),但是这里显示指明了需要多少空间,所以就一次性为你分配这么多空间,也就是不需要扩充了。 
 
  
 
17. 下面哪些是对称加密算法() 
 
A DES   B AES   C DSA   D RSA 
 
答案:AB 
 
解析:常用的对称加密算法有:DES、3DES、RC2、RC4、AES 
 
常用的非对称加密算法有:RSA、DSA、ECC 
 
使用单向散列函数的加密算法:MD5、SHA 
 
  
 
18.新建一个流对象,下面哪个选项的代码是错误的?() 
 
A)new BufferedWriter(new FileWriter("a.txt")); 
 
B)new BufferedReader(new FileInputStream("a.dat")); 
 
C)new GZIPOutputStream(new FileOutputStream("a.zip")); 
 
D)new ObjectInputStream(new FileInputStream("a.dat")); 
 
答案:B 
 
解析:请记得13题的那个图吗?Reader只能用FileReader进行实例化。 
 
  
 
19. 下面程序能正常运行吗() 
 
复制代码 
public class NULL { 
 
    public static void haha(){ 
        System.out.println("haha"); 
    } 
    public static void main(String[] args) { 
        ((NULL)null).haha(); 
    } 
 
} 
复制代码 
答案:能正常运行 
 
解析:输出为haha,因为null值可以强制转换为任何java类类型,(String)null也是合法的。但null强制转换后是无效对象,其返回值还是为null,而static方法的调用是和类名绑定的,不借助对象进行访问所以能正确输出。反过来,没有static修饰就只能用对象进行访问,使用null调用对象肯定会报空指针错了。这里和C++很类似。这里感谢@Florian网友解答。 
 
  
 
20. 下面程序的运行结果是什么() 
 
复制代码 
class HelloA { 
 
    public HelloA() { 
        System.out.println("HelloA"); 
    } 
     
    { System.out.println("I'm A class"); } 
     
    static { System.out.println("static A"); } 
 
} 
 
public class HelloB extends HelloA { 
    public HelloB() { 
        System.out.println("HelloB"); 
    } 
     
    { System.out.println("I'm B class"); } 
     
    static { System.out.println("static B"); } 
     
    public static void main(String[] args) {  
     new HelloB();  
   } 
 
} 
复制代码 
答案: 
 
static A 
static B 
I'm A class 
HelloA 
I'm B class 
HelloB 
解析:说实话我觉得这题很好,考查静态语句块、构造语句块(就是只有大括号的那块)以及构造函数的执行顺序。 
 
对象的初始化顺序:(1)类加载之后,按从上到下(从父类到子类)执行被static修饰的语句;(2)当static语句执行完之后,再执行main方法;(3)如果有语句new了自身的对象,将从上到下执行构造代码块、构造器(两者可以说绑定在一起)。 
 
下面稍微修改下上面的代码,以便更清晰的说明情况: |   
        
 
    
    
    
     
 
 |