每天10个面试题(day01)

1.判断对错。List,Set,Map都继承自Collection接口。

解析:错,List,Set继承自Collection接口;Map是顶层接口,与Collection同级
java集合对象的上下关系

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文件,以达到国际化的目的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值