1.判断对错。List,Set,Map都继承自Collection接口。
对
错
解析:错,List,Set继承自Collection接口;Map是顶层接口,与Collection同级
2.下面有关java classloader说法错误的是?
A. Java默认提供的三个ClassLoader是BootStrap ClassLoader,Extension ClassLoader,App ClassLoader
B. ClassLoader使用的是双亲委托模型来搜索类的
C. JVM在判定两个class是否相同时,只用判断类名相同即可,和类加载器无关
D. ClassLoader就是用来动态加载class文件到内存当中用的
解析:C, JVM在判定两个class是否相同时,不仅要判断两个类名是否相同,而且要判断是否由同一个类加载器实例加载的。
扩展:ClassLoader使用的是 双亲委托模型 来搜索类的,每个ClassLoader实例都有一个父类加载器的引用(不是继承的关系,是一个包含的关系),虚拟机内置的类加载器(Bootstrap ClassLoader)本身没有父类加载器,但可以用作其它ClassLoader实例的的父类加载器。当一个ClassLoader实例需要加载某个类时,它会试图亲自搜索某个类之前,先把这个任务委托给它的父类加载器,这个过程是由上至下依次检查的,首先由最顶层的类加载器Bootstrap ClassLoader试图加载,如果没加载到,则把任务转交给Extension ClassLoader试图加载,如果也没加载到,则转交给App ClassLoader 进行加载,如果它也没有加载得到的话,则返回给委托的发起者,由它到指定的文件系统或网络等URL中加载该类。如果它们都没有加载到这个类时,则抛出ClassNotFoundException异常。否则将这个找到的类生成一个类的定义,并将它加载到内存当中,最后返回这个类在内存中的Class实例对象。
3.下面函数将返回?
public static int func (){
try{
return 1;
}catch (Exception e){
return 2;
}finally{
return 3;
}
}
A. 1
B. 2
C. 3
D. 编译错误
解析:C,finally语句无论如何都会执行。
4.在类设计中,类的成员变量要求仅仅能够被同一package下的类访问,请问应该使用下列哪个修饰词()
A. protected
B. public
C. private
D. 不加修饰词
解析:D,
private使用范围仅限本类中
不加修饰词叫友好类,默认是本包中
protected使用范围为含继承关系的类中(子类可以使用父类)
public特别随意,包内包外,类内类外都可访问
5.java接口的方法修饰符可以为?(忽略内部接口)
A. protected
B. public
C. final
D. abstract
解析:
考察点:抽象类和接口
相同点:都不能被实例化,位于继承树的顶端,都包含抽象方法
不同点:
- 设计目的:接口体现的一种规范,类似与整个系统的总纲,制订了系统各模块应该遵循的标准,因此接口不应该经常改变,一旦改变对整个系统是辐射性的。
抽象类作为多个子类的共同父类,体现的是一种模板式设计,可以当作系统实现过程中的中间产品,已经实现了系统部分功能。 - 使用不同:
(1)接口只能包含抽象方法,抽象类可以包含普通方法。
(2)接口里不能定义静态方法,抽象类可以。
(3)接口只能定义静态常量属性不能定义普通属性,抽象类可以。
(4)接口不包含构造器,抽象类可以(不是用于创建对象而是让子类完成初始化)。
(5)接口里不能包含初始化块,抽象类完全可以。
(6)接口多继承,抽象类但继承(只能有一个直接父类)。
总结:接口所有方法全是抽象方法只能 public abstract修饰 (默认public abstract修饰 ),属性默认public static final修饰。
抽象类除了包含抽象方法外与普通类无区别。
6.下面所示的java代码,运行时,会产生()类型的异常?
int Arry_a[] = new int[10];
System.out.println(Arry_a[10]);
A. ArithmeticException
B. NullPointException
C. IOException
D. ArrayIndexOutOfBoundsException
解析:D,数组越界
7.给定代码:
public class SwitchTest{//1
public static void main(String[] args) {//2
System.out.println("value="+switchit(4));//3
}//4
public static int switchit(int x) {
int j=1;
switch (x) {
case 1:j++;
case 2:j++;
case 3:j++;
case 4:j++;
case 5:j++;
default:j++;
}
return j+x;
}
}
第3行输出什么?
解析:value=8, 没有break,case:4 后一直j++
8.在JAVA中,下面关于String类和StringBuffer类的描述正确的是那一个?
A. StringBuffer类的对象调用toString()方法将转换为String类型
B. 两个类都有append()方法
C. 可以直接将字符串“test”赋值给声明的Stirng类和StringBuffer类的变量
D. 两个类的实例的值都能够被改变
解析:A,
A.正确
B.String类型中没有append()方法,要追加字符串”+“即可,也没有必要 append
C.不能赋值给StringBuffer
D.StringBuffer类可变,String类不可变
9.下面哪些类可以被继承? Java.lang.Thread、java.lang.Number、java.lang.Double、java.lang.Math、 java.lang.ClassLoader
解析: Thread、Number、ClassLoader可以被继承
A,Thread可以被继承,用于创建新的线程
B,Number类可以被继承,Integer,Float,Double等都继承自Number类
C,Double类的声明为
public final class Double extends Number implements Comparable<Double>
final生明的类不能被继承
D,Math类的声明为
public final class Math extends Object
不能被继承
E,ClassLoader可以被继承,用户可以自定义类加载器
10.在Java语言中,下列关于字符集编码(Character set encoding)和国际化(i18n)的问题,哪些是正确的?
A. 每个中文字符占用2个字节,每个英文字符占用1个字节
B. 假设数据库中的字符是以GBK编码的,那么显示数据库数据的网页也必须是GBK编码的。
C. Java的char类型,以下UTF-16 Big Endian的方式保存一个字符。
D. 实现国际化应用常用的手段是利用ResourceBundle类
解析:CD
A 显然是错误的,Java一律采用Unicode编码方式,规定char占两个字节,每个字符无论中文还是英文字符都占用2个字节。
B 也是不正确的,不同的编码之间是可以转换的,通常流程如下:
将字符串S以其自身编码方式分解为字节数组,再将字节数组以你想要输出的编码方式重新编码为字符串。
例:
String newUTF8Str = new String(oldGBKStr.getBytes("GBK"), "UTF8");
C 是正确的。Java虚拟机中通常使用UTF-16的方式保存一个字符
D 也是正确的。ResourceBundle能够依据Local的不同,选择性的读取与Local对应后缀的properties文件,以达到国际化的目的。