2019春招Java开发类试卷
试题来源:牛客网(https://www.nowcoder.com/test/14266493/summary)
1.以下程序输出的结果,正确的是?
public class Main {
public static void main(String[] args) {
System.out.println("A");
new Main();
new Main();
}
public Main() {
System.out.println("B");
}
{
System.out.println("C");
}
static {
System.out.println("D");
}
}
DCABB
DABCBC
DACBCB
DACBB
答案:C
答案解析:
解析:在同一类里面,首先静态代码块在类加载的时候就执行了,而且只执行一次,不论你是否new了对象,而构造代码块和构造方法是在每次创建对象时都会被调用,并且构造代码块的执行次序优先于构造方法。
2.执行以下程序后,x和y的值分别是多少?
public class Main {
private static int x = 10;
private static Integer y = 10;
public static void updateX(int value) {
value = 3 * value;
}
public static void updateY(Integer value) {
value = 3 * value;
}
public static void main(String[] args) {
updateX(x);
updateY(y);
}
}
10,10
10,30
30,10
30,30
答案:A
3.执行以下程序后,输出结果正确的是?
public class Main {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2);
String s3 = new String("abc");
System.out.println(s1 == s3);
}
}
true true
true false
false fasle
false true
答案:B
4.以下代码会输出什么结果?
public class Test {
public static void main(String[] args) {
System.out.println(Test2.a);
}
}
class Test2{
public static final String a="JD";
static {
System.out.print("OK");
}
}
只有JD
只有OK
输出 JDOK
输出 OKJD
答案:A
5.以下代码会输出什么结果?
public class Test {
public static void main(String[] args) {
System.out.println(Test2.a);
}
}
class Test2{
public static final String a=new String("JD");
static {
System.out.print("OK");
}
}
只有JD
只有OK
输出 JDOK
输出 OKJD
答案:D
6.请阅读代码选择出该段代码的输入结果。
public class Test {
public static void main(String[] args) {
System.out.print(B.c);
}
}
class A {
static {
System.out.print("A");
}
}
class B extends A{
static {
System.out.print("B");
}
public final static String c = "C";
}
AB
ABC
C
BC
答案:C
7.执行以下程序后,输出结果正确的是?
public class Main {
public static void main(String[] args) {
System.out.print(fun1());
}
public static String fun1() {
try {
System.out.print("A");
return fun2();
} finally {
System.out.print("B");
}
}
public static String fun2() {
System.out.print("C");
return "D";
}
}
ABCD
ACDB
ACBD
不确定
答案:C
8.JDK1.8中,执行以下程序后,该list进行了几次扩容?
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
for(int i=0;i<100;i++){
list.add("a");
}
}
}
4
5
6
7
答案:C
答案解析初始值为10,增长幅度为1.5倍,答案为10->15->22->33->49->73->109,故答案为6次。
通过反射的实验,可以在每次添加一个元素时,打印内部数组的长度,即可得到容量。
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
Class<? extends List> clazz = list.getClass();
try {
Field ed =clazz.getDeclaredField("elementData");
ed.setAccessible(true);
for(int i=0;i<100;i++){
list.add("a");
Object[] arr = (Object[])ed.get(list);
System.out.println(arr.length);
}
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}