2021年08月28日 java1

考点2:

以下语句的执行结果是什么?

1
1+"10"+3+"2"
  • A “11032”
  • B “16”
  • C 16
  • D “32101”

解析

显示答案/隐藏答案正确答案: A
1
2
3
System.out.println(1+"10"+3+"2");//11032
System.out.println(1+2+"10"+3+"2");//31032
System.out.println(1+"10"+3+1+"2");//110312

注意“+”的两边的类型

相当于按顺序从左向右+,以2个为一个单元,例如
System.out.println(3+5+”12”+3+3);
前两个是3+5,值为8,这时变为
System.out.println(8+”12”+3+3);
前两个是8+”12”,值为”812”,然后”812”+3=”8123”,故最后值为”81233”。

考点3:

以下程序的运行结果是:( )

1
2
3
4
5
6
7
8
9
10
TreeSet<Integer> set = new TreeSet<Integer>();
TreeSet<Integer> subSet = new TreeSet<Integer>();
for(int i=606;i<613;i++){
if(i%2==0){
set.add(i);
}
}
subSet = (TreeSet)set.subSet(608,true,611,true);
set.add(629);
System.out.println(set+" "+subSet);
  • A 编译失败
  • B 发生运行时异常
  • C [606, 608, 610, 612, 629] [608, 610]
  • D [606, 608, 610, 612, 629] [608, 610,629]

解析

显示答案/隐藏答案正确答案: C

Set的subset方法

subset方法是求set的范围内的子集,两个true是表示是否包含端点(608和611),故subSet的值为[608,610]

subset(form,true,to,true)是Treeset的非静态方法,该方法返回从form元素到to元素的一个set集合,两个boolean类型是确认是否包含边境值用的。
https://blog.csdn.net/yingpaixiaochuan/article/details/49019131

1
2
3
4
5
6
7
8
9
10
11
/**
* set=[606, 608, 610, 612, 629]
*/
s1 = (TreeSet)set.subSet(608, true,611,true); //表示从set数组中取出从from到to的值
s2 = (TreeSet)set.subSet(608, false,611,true);//表示从set数组取出from到to(不包含from)的值
s3 = (TreeSet)set.subSet(608, true,611,false);//表示从set数组取出从from到to(不包含to)的值
/** 输出:
* s1=[608, 610, 612]
* s2=[610, 612]
* s3=[608, 610]
*/

总结:subset()就是截取from到to的值。其中截取的值是否包含边境由fromInclusive、toInclusive的boolean值的变化决定。

考点4:

下面有关java的一些细节问题,描述错误的是?

  • A 构造方法不需要同步化
  • B 一个子类不可以覆盖掉父类的同步方法
  • C 定义在接口中的方法默认是public
  • D 容器保存的是对象的引用

解析

显示答案/隐藏答案正确答案: B

A构造方法都是构造出新的对象,所以不需要同步

B synchronized关键字不能被继承。虽然可以用synchronized来定义方法,但是synchronized却并不属于方法定义的一部分,所以synchronized关键字并不能被继承。如果父类中的某个方法使用了synchronized关键字,而子类中也覆盖了这个方法,默认情况下子类中的这个方法并不是同步的,必须显示的在子类的这个方法中加上synchronized关键字才可

C接口里面的变量其实际是常量,常用public static final修饰 ;接口里面的方法其实际是抽象方法,常用public abstrac修饰

D容器保存的是对象的引用 而非对象本身

考点5:

以下哪个式子有可能在某个进制下成立()?

  • A 13*14=204
  • B 12*34=568
  • C 14*14=140
  • D 1+1=3

解析

显示答案/隐藏答案正确答案: A

按权展开,然后相乘

我们假设是x进制,然后带入算式计算即可: A选项:13*14=204

1
2
3
4
(1*x^1+3*x^0) *( 1*x^1+4*x^0)= 2*x^2+4*x^0 
==>(x+3)*(x+4)=2x^2+4
==>(x-8)(x+1)=0
==>x=8或x=-1

A选项有答案,为八进制时,可成功匹配,所以A答案正确。
B选项:12*34=568;

1
2
3
(1*x^1+2*x^0)*(3*x^1+4*x^0)=5*x^2+6*x^1+8*x^0 
==>(x+2)(3x+4)=5x^2+6x+8
==>x=2

B选项也有答案,为二进制,但是却是错误的,因为就像在16进制中一样,不能出现比15(也就是F)更大的数,到了16就会进位了。所以在二进制中,不能出现比1更大的数,到了2就会进位了。而B选项的等式中,出现了3,4,5,6,8都比1更大,所以肯定不是二进制数,所以也是错误的。

C,D选项也是类似规则

考点6:

Java语言中,方法的重写(Overriding)和重载(Overloading)是多态性的不同表现。下边哪些说法是对的?

  • A 重写是父类与子类之间多态性的一种表现
  • B 重写是一个类中多态性的一种表现
  • C 重载是一个类中多态性的一种表现
  • D 重载是父类与子类之间多态性的一种表现

解析

显示答案/隐藏答案正确答案: AC

重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写
(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。

如果在一个类中定义了多个同名的方法,它们或有不同的参数个数有不同的参数类型,则称为方法的重载(Overloading)。

Overloaded的方法是可以改变返回值的类型。

重写是子类继承父类方法并对其进行修改,可选择调用父类方法或子类重写后的同名方法
重载是在一个类可以存在同名但参数列表不同的方法,可根据传入的参数调用相应的方法

考点7:

以下 json 格式数据,错误的是

  • A {company:4399}
  • B {"company":{"name":[4399,4399,4399]}}
  • C {[4399,4399,4399]}
  • D {"company":[4399,4399,4399]}
  • E {"company":{"name":4399}}

解析

显示答案/隐藏答案正确答案: AC
  1. 必须有键 和 值
  2. 键和值必须用双引号
  3. 值中可以嵌套 JSON 元素

考点8:

关于OutOfMemoryError,下面说法正确的是()?

  • A java.lang.OutOfMemoryError: PermGen space 增加-XX:MaxPermSize这个参数的值的话,这个问题通常会得到解决。
  • B java.lang.OutOfMemoryError: Requested array size exceeds VM limit当你正准备创建一个超过虚拟机允许的大小的数组时,这条错误将会出现
  • C java.lang.OutOfMemoryError: Java heap space 一般情况下解决这个问题最快的方法就是通过-Xmx参数来增加堆的大小
  • D java.lang.OutOfMemoryError: nativeGetNewTLA这个异常只有在jRockit虚拟机时才会碰到

解析

显示答案/隐藏答案正确答案: ABC

关于此题,《深入理解java虚拟机》有关于OOM(OutOfMemory)问题的解释 A:属于运行时常量池导致的溢出,设置-XX:MaxPermSize可以解决这个问题, B:属于堆空间不足导致的错误,问题比较少见,解决方式和C相同, C:属于java堆内存问题,一般的手段是通过内存映像分析工具,对Dump出来的堆转储存快照进行分析,重点是确认内存中的对象是否是有必要的,也就是要判断是出现了内存泄漏,还是出现了内存溢出,如果是内存列楼,通过工具检查泄露对象打GC Roots的引用链信息,可以准确的确定出泄露代码的位置,不存在泄露,就应该检查虚拟机的堆参数,如果可以继续调大,可以设置-Xmx解决问题 D:java.lang.OutOfMemoryError: nativeGetNewTLA指当虚拟机不能分配新的线程本地空间(Thread Local Area)的时候错误信息,此错误是线程申请一个新的TLA时产生的,这个异常一般只会发生在jRockit虚拟机,只有过于绝对。

考点9:

如下哪些是 java 中有效的关键字()

  • A native
  • B NULL
  • C false
  • D this

解析

显示答案/隐藏答案正确答案: AD

true false null都是常量而不是关键字

const和goto是保留关键字。
true和false看起来像关键字,但严格来说,它们是boolean常量;
null看起来也像关键字,但严格来说,它是null常量。

综上,true,false,null不是关键字。而是常量。

点击查看 java se 8 官方解释

这里有一张图片