Java基础面试题库(五)
  # 41、 下列选项中符合Java命名规则的标识符是()
A 2japro
B &Class
C const
D _123
D
const是关键字
Java 标识符有如下命名规则:
- 由26个英文字母大小写、数字(0-9) 符号 _ 、
 $组成- 标识符应以 字母 、_ 、
 $开头。- 标识符不能是关键字。
 
# 42、给出以下代码,请给出结果
class PassO {
    public static void main(String[] args) {
        PassO p = new PassO();
        p.start();
    }
    void start() {
        Two t = new Two();
        System.out.print(t.x +””);
        Two t2 = fix(t);
        System.out.print(t.x +” ” + t2.x);
    }
    Two fix(Two tt) {
        tt.x = 42;
        return tt;
    }
}
null 42 42
1.注意第二行代码,Byte x;Byte是包装类,不是byte(基本数据类型),因此Byte的默认是null,不是0 2.t是一个引用地址类型,在调用fit(Two tt)函数是,是一个实参到形参的传值,也就是把t的地址赋值给了tt,但是都是指向堆内存中新建的对象,因此当对tt.x和t.x指向是相同的。因此t.x也是42 3.Two t2=fit(t);fit函数返回的还是一个引用地址,这句代码相当于把t(函数里面返回的是tt)的地址赋值给了t2,因此t2.x也是42
# 43、下面的switch语句中,x可以是哪些类型的数据:()
switch(x)
{
default:
System.out.println("Hello");
}
A long
B char
C float
D byte
E double
F Object
B D
在Java7之前,switch只能支持 byte、short、char、int或者其对应的封装类以及Enum类型。
在Java7中,支持了String、Enum 类型
# 44、输出结果为:
String str = "12,3";
String str2 = "123";
System.out.print(str.split(",").length);
System.out.print(str2.split(",").length);
2 1
split 这个方法默认返回一个数组,
如果 找到分隔符, 会把整个字符串当成字符串数组,即 { "12","3" }
如果没有找到分隔符, 会把整个字符串当成一个长度为1的字符串数组 , 即 { "123" }
# 45、以下输出什么?
class testTryCatch {
    public static void main(String[] args) {
        System.out.println(test2());
    }
    public static int test2() {
        int b = 20;
        try {
            System.out.println("try block");
            return b;
        } catch (Exception e) {
            b = 50;
            System.out.println("catch block");
        } finally {
            b = 100;
            System.out.println("finally block");
        }
        return b;
    }
}
try block finally block 20
- finally块的语句在try或catch中的return语句执行之后返回之前执行
 - finally里的修改语句可能影响也可能不影响try或catch中 return已经确定的返回值,若finally里也有return语句则覆盖try或catch中的return语句 则 直接返回。
 
# 46、下列说法正确的是()
A JAVA程序的main方法必须写在类里面
B JAVA程序中可以有多个名字为main方法
C JAVA程序中类名必须与文件名一样
D JAVA程序的main方法中,如果只有一条语句,可以不用{}(大括号)括起来
A B
C: JAVA程序中public修饰的类名必须与文件名一样 D: JAVA程序的main方法中,不管有多少条语句都必须用{}(大括号)括起来
# 47、可以把任何一种数据类型的变量赋给Object类型的变量。
A 对
B 错
A
Java中一切都是对象,Object是所有类的根类,而且自动数据类型会自动装箱。
# 48、以下程序的输出结果为
class Base{
    public Base(String s){
        System.out.print("B");
    }
}
public class Derived extends Base{
    public Derived (String s) {
        System.out.print("D");
    }
    public static void main(String[] args){
        new Derived("C");
    }
}
A BD
B DB
C C
D 编译错误
D
在调用子类构造器之前,会先调用父类构造器,当子类构造器中没有使用"super(参数或无参数)"指定调用父类构造器时,是默认调用父类的无参构造器,如果父类中包含有参构造器,却没有无参构造器,则在子类构造器中一定要使用“super(参数)”指定调用父类的有参构造器,不然就会报错。
# 49、以下执行结果是:
public class Test {
    private String name = "abc";
    public static void main(String[] args) {
        Test test = new Test();
        Test testB = new Test();
        String result = test.equals(testB) + ",";
        result += test.name.equals(testB.name) + ",";
        result += test.name == testB.name;
        System.out.println(result);
    }
}
false,true,true
test.equals(testB)是比较内存地址,显然不一样。
test.name和testB.name指向的都是常量池的"abc"
# 50、下面哪段程序能够正确的实现了GBK编码字节流到UTF-8编码字节流的转换:
A	dst=String.fromBytes(src,"GBK").getBytes("UTF-8")
B	dst=new String(src,"GBK").getBytes("UTF-8")
C	dst=new String("GBK",src).getBytes()
D	dst=String.encode(String.decode(src,"GBK")),"UTF-8" )
答案:B
操作步骤就是先解码再编码
用new String(src,"GBK")解码得到字符串
用getBytes("UTF-8")得到UTF8编码字节数组