2021年11月09日 java1

考点1:

有这样一段程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Test{ 
public static void main(String [] args){
List list=new ArrayList();
list.add("a");
list.add("b");
list.add("a");
Set set=new HashSet();
set.add("a");
set.add("b");
set.add("a");
System.out.println(list.size()+","+set.size());
}
}

请问运行主要的程序会打印出的是什么()

  • A 2,2
  • B 2,3
  • C 3,2
  • D 3,3
显示答案/隐藏答案正确答案: C

list有序可重复,set无序不可重复

考点2:

根据下面的程序代码,哪些选项的值返回true?

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Square {  
long width;
public Square(long l) {
width = l;
}
public static void main(String arg[]) {
Square a, b, c;
a = new Square(42L);
b = new Square(42L);
c = b;
long s = 42L;
}
}
  • A a == b
  • B s == a
  • C b == c
  • D a.equals(s)
显示答案/隐藏答案正确答案: C

考点3:

下面代码运行结果是()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Test{    
public int add(int a,int b){
try {
return a+b;
}
catch (Exception e) {
System.out.println("catch语句块");
}
finally{
System.out.println("finally语句块");
}
return 0;
}
public static void main(String argv[]){
Test test =new Test();
System.out.println("和是:"+test.add(9, 34));
}
}
  • A
    1
    2
    catch语句块 
    和是:43
  • B 编译异常
  • C
    1
    2
    finally语句块 
    和是:43
  • D
    1
    2
    和是:43
    finally语句块
显示答案/隐藏答案正确答案: C

考点4:

要导入java/awt/event下面的所有类,叙述正确的是?()

  • A import java.awt.*import java.awt.event.*都可以
  • B 只能是import java.awt.*
  • C 只能是import java.awt.event.*
  • D import java.awt.*import java.awt.event.*都不可以
显示答案/隐藏答案正确答案: C

导包只可以导到当前层,不可以再导入包里面的包中的类

考点5:

以下代码的输出结果是?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class B
{
public static B t1 = new B();
public static B t2 = new B();
{
System.out.println("构造块");
}
static
{
System.out.println("静态块");
}
public static void main(String[] args)
{
B t = new B();
}
}
  • A 静态块 构造块 构造块 构造块
  • B 构造块 静态块 构造块 构造块
  • C 构造块 构造块 静态块 构造块
  • D 构造块 构造块 构造块 静态块
显示答案/隐藏答案正确答案: C

静态成员最先初始化,静态成员包括,静态成员变量,和静态成员方法。
如果有多个静态成员,按其从上到下定义的顺序,进行初始化。

考点6:

String与StringBuffer的区别是?

  • A String是不可变的对象,StringBuffer是可以再编辑的
  • B 字符串是常量,StringBuffer是变量
  • C String是可变的对象,StringBuffer是不可以再编辑的
  • D 以上说法都不正确
显示答案/隐藏答案正确答案: AB

考点7:

final、finally、finalize三个关键字的区别是()

  • A final是修饰符(关键字)可以修饰类、方法、变量
  • B finally在异常处理的时候使用,提供finally块来执行任何清除操作
  • C finalize是方法名,在垃圾收入集器将对象从内存中清除出去之前做必要的清理工作
  • D finally和finalize一样都是用于异常处理的方法
显示答案/隐藏答案正确答案: ABC

考点8:

对 Map 的用法,正确的有:

  • A new java.util.Map().put("key" , "value");
  • B new java.util.SortedMap().put("key" , "value");
  • C new java.util.HashMap().put(null , null );
  • D new java.util.TreeMap().put(0 , null );
显示答案/隐藏答案正确答案: CD

Map和SortedMap是接口,不能直接new

1
public interface Map<K,​V>
1
public interface SortedMap<K,​V> extends Map<K,​V>
1
public class HashMap<K,​V> extends AbstractMap<K,​V> implements Map<K,​V>, Cloneable, Serializable
1
public class TreeMap<K,​V> extends AbstractMap<K,​V> implements NavigableMap<K,​V>, Cloneable, Serializable

考点9:可以作为switch条件表达式的类型

下面的switch语句中,x可以是哪些类型的数据:()

1
2
3
4
5
switch(x)
{
default:
System.out.println("Hello");
}
  • A long
  • B char
  • C float
  • D byte
  • E double
  • F Object
显示答案/隐藏答案正确答案: BD
  • jdk1.7之前byte,short ,int ,char
  • jdk1.7之后加入String
  • java8,switch支持10种类型:
    • 基本类型:byte char short int
    • 包装类 :Byte,Short,Character,Integer String enum

实际只支持int类型 Java实际只能支持int类型的switch语句,那其他的类型时如何支持的

  • a、基本类型byte char short
    • 原因:这些基本数字类型可自动向上转为int, 实际还是用的int。
  • b、基本类型包装类Byte,Short,Character,Integer
    • 原因:java的自动拆箱机制 可看这些对象自动转为基本类型
  • c、String 类型
    • 原因:实际switch比较的string.hashCode值,它是一个int类型
  • d、enum类型
    • 原因 :实际比较的是enum的ordinal值(表示枚举值的顺序),它也是一个int类型 所以也可以说 switch语句只支持int类型

考点10:

Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:( )

  • A Java反射主要涉及的类如Class, Method, Filed,等,他们都在java.lang.reflet包下
  • B 通过反射可以动态的实现一个接口,形成一个新的类,并可以用这个类创建对象,调用对象方法
  • C 通过反射,可以突破Java语言提供的对象成员、类成员的保护机制,访问一般方式不能访问的成员
  • D Java反射机制提供了字节码修改的技术,可以动态的修剪一个类
  • E Java的反射机制会给内存带来额外的开销。例如对永生堆的要求比不通过反射要求的更多
  • F Java反射机制一般会带来效率问题,效率问题主要发生在查找类的方法和字段对象,因此通过缓存需要反射类的字段和方法就能达到与之间调用类的方法和访问类的字段一样的效率
显示答案/隐藏答案正确答案: ADF
1
2
3
java.lang.Class<T>
java.lang.reflect.Method
java.lang.reflect.Field

A Class类在java.lang包
B 动态代理技术可以动态创建一个代理对象,反射不行
C 反射访问私有成员时,Field调用setAccessible可解除访问符限制
D CGLIB实现了字节码修改,反射不行
E 反射会动态创建额外的对象,比如每个成员方法只有一个Method对象作为root,他不胡直接暴露给用户。调用时会返回一个Method的包装类
F 反射带来的效率问题主要是动态解析类,JVM没法对反射代码优化。