2021年09月04日 java2
考点1:java常识
下列描述中,错误的是( )
- A
java
要求编程者管理内存 - B
java
的安全性体现在多个层次上 - C
java
中没有指针机制 - D
java
有多线程机制
解析
显示答案/隐藏答案
正确答案: AJava与C++的区别在于:Java去除了指针的概念,使用引用,并且Java的内存管理不需要程序员来管理,由Java虚拟机来完成对内存的管理
考点2:abstract final static native
若在某一个类定义中定义有如下的方法: abstract void performDial( ); 该方法属于()
- A 本地方法
- B 最终方法
- C 解态方法
- D 抽象方法
解析
显示答案/隐藏答案
正确答案: D- 本地方法:简单地讲,一个native Method就是一个java调用非java代码的接口;native方法表示该方法要用另外一种依赖平台的编程语言实现。
- 最终方法:final void B(){},这样定义的方法就是最终方法,最终方法在子类中不可以被重写,也就是说,如果有个子类继承了这个最终方法所在的类,那么这个子类中不能出现void B(){}这样的方法。
- 最终类:**final class A {},**这样定义的类就是最终类,最终类不能被继承。
- abstract修饰抽象类
A.vJAVA中有两种方法:JAVA方法和本地方法。 JAVA方法是由JAVA编写的,编译成字节码,存储在class文件中; 本地方法是由其它语言编写的,编译成和处理器相关的机器代码,本地方法保存在动态链接库中,即.dll
(windows系统)文件中,格式是各个平台专有的。
JAVA方法是与平台无关的,但是本地方法不是。
B.final void A() {},这样定义的方法就是最终方法,最终方法在子类中不可以被重写。 也就是说,如果有个子类继承这个最终方法所在的类,那么这个子类中就不能再出现void A() {}这样的方法了。
C.不存在解态方法这种东西,应该是笔误打错了,是静态方法。 静态方法的使用完全独立于该类的任何对象。 在类中使用static修饰的静态方随着类的定义而被分配和装载入内存中;而非静态方法属于对象的具体实例,只有在类的对象创建时在对象的内存中才有这个方法的代码段。
考点3:GUI
在委托事件模型中,源生成事件并把它发送给一个或多个监听器,每个监听器必须向事件源注册。
- A T
- B F
解析
显示答案/隐藏答案
正确答案: A考点4:实例变量 局部变量 final变量
下面有关java实例变量,局部变量,类变量和final变量的说法,错误的是?
- A 实例变量指的是类中定义的变量,即成员变量,如果没有初始化,会有默认值。
- B 局部变量指的是在方法中定义的变量,如果没有初始化,会有默认值
- C 类变量指的是用
static
修饰的属性 - D
final
变量指的是用final
修饰的变量
解析
显示答案/隐藏答案
正确答案: B局部变量必须初始化
定义在类中的变量是类的成员变量,可以不进行初始化,Java会自动进行初始化,如果是引用类型默认初始化为null,如果是基本类型例如int则会默认初始化为0
局部变量是定义在方法中的变量,必须要进行初始化,否则不同通过编译
被static关键字修饰的变量是静态的,静态变量随着类的加载而加载,所以也被称为类变量
被final修饰发变量是常量
为什么局部变量不会默认初始化
局部变量是指类方法中的变量,必须初始化。局部变量运行时被分配在栈中,量大,生命周期短,如果虚拟机给每个局部变量都初始化一下,是一笔很大的开销,但变量不初始化为默认值就使用是不安全的。出于速度和安全性两个方面的综合考虑,解决方案就是虚拟机不初始化,但要求编写者一定要在使用前给变量赋值。
变量分类
考点5:集合 Collection和Collections
对Collection和Collections描述正确的是
- A
Collection
是java.util
下的类,它包含有各种有关集合操作的静态方法 - B
Collection
是java.util
下的接口,它是各种集合结构的父接口 - C
Collections
是java.util
下的接口,它是各种集合结构的父接口 - D
Collections
是java.util
下的类,它包含有各种有关集合操作的静态方法
解析
显示答案/隐藏答案
正确答案: BDjava.util.Collection
是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java
类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
- Collection是单列集合的顶层接口,
- Map是双列集合的顶层接口
- Collections是一个集合的工具类,提供了排序、查找等操作集合的一些常用方法
考点6:java构造函数
下列有关java构造函数叙述正确的是()
- A 构造器的返回值为
void
类型 - B 如果一个源文件中有多个类,那么构造器必须与公共类同名
- C 构造器可以有0个,1个或一个以上的参数
- D 每个类可以有一个以上的构造器
解析
显示答案/隐藏答案
正确答案: CD考点7:has-a is-a 子类通过继承得到父类的成员
Gadget has-a Sprocket and Gadget has-a Spring and Gadget is-a Widget and Widget has-
a Sprocket
以下哪两段代码可以表示这个关系? (选择两项) ( )
- A
1
2class Widget { Sprocket s; }
class Gadget extends Widget { Spring s; } - B
1
2class Widget { }
class Gadget extends Widget { Spring s1; Sprocket s2; } - C
1
2class Widget { Sprocket s1; Spring s2; }
class Gadget extends Widget { } - D
1
2class Gadget { Spring s; }
class Widget extends Gadget{ Sprocket s; }
解析
显示答案/隐藏答案
正确答案: ACis-a表示继承:Gadget is-a Widget就表示Gadget 继承 Widget;
has-a表示从属:Gadget has-a Sprocket就表示Gadget中有Sprocket的引用,Sprocket是Gadget的组成部分;
like-a表示组合:如果A like-a B,那么B就是A的接口
从题目中可以得出以下几个结论:
Gadget中有对Sprocket的引用。
Gadget中有对Spring的引用。
Gadget继承了Widget。
Widget中有对Sprocket的引用。
A
class Widget { Sprocket s; }
完全符合要求,这里的结论1虽然没有明确表明,但是因为结论3(Gadget继承了Widget)的存在,即父类中的非私有成员(Sprocket)子类都默认拥有。故结论都成立。
class Gadget extends Widget { Spring s; }B
class Widget { }
结论123成立,但是没有表明结论4。
class Gadget extends Widget { Spring s1; Sprocket s2; }C
class Widget { Sprocket s1; Spring s2; }
完全符合要求,这里的结论12虽然没有明确表明,但是因为结论3(Gadget继承了Widget)的存在,即父类中的非私有成员(Sprocket和Spring)子类都默认拥有。故结论都成立。
class Gadget extends Widget { }D
class Gadget { Spring s; }
结论24成立,但是结论13没有表明。这里只是表明了Widget继承了Gadget,并且Widget具有对Spring的引用。
class Widget extends Gadget{ Sprocket s; }
这道题主要考查我们的Java类与类之间的关系。 类与类之间有三种关系:
(1)is-a 包括了继承(类)和实现(接口)关系;
(2)has-a包括了关联、聚合、组合关系;
(3)use-a包括了依赖关系;
考点8:JVM垃圾回收算法
以下哪些jvm的垃圾回收方式采用的是复制算法回收
- A 新生代串行收集器
- B 老年代串行收集器
- C 并行收集器
- D 新生代并行回收收集器
- E 老年代并行回收收集器
- F
cms
收集器
解析
显示答案/隐藏答案
正确答案: AD两个最基本的java回收算法:复制算法和标记清理算法
复制算法:两个区域A和B,初始对象在A,继续存活的对象被转移到B。此为新生代最常用的算法
标记清理:一块区域,标记可达对象(可达性分析),然后回收不可达对象,会出现碎片,那么引出
标记-整理算法:多了碎片整理,整理出更大的内存放更大的对象
两个概念:新生代和年老代
新生代:初始对象,生命周期短的
永久代:长时间存在的对象
整个java的垃圾回收是新生代和年老代的协作,这种叫做分代回收。
P.S:Serial New收集器是针对新生代的收集器,采用的是复制算法
Parallel New(并行)收集器,新生代采用复制算法,老年代采用标记整理
Parallel Scavenge(并行)收集器,针对新生代,采用复制收集算法
Serial Old(串行)收集器,新生代采用复制,老年代采用标记整理
Parallel Old(并行)收集器,针对老年代,标记整理 CMS收集器,基于标记清理
G1收集器:整体上是基于标记 整理 ,局部采用复制
综上:新生代基本采用复制算法,老年代采用标记整理算法。cms采用标记清理。
考点9:super关键字 this关键字
在使用super和this关键字时,以下描述错误的是()
- A 在子类构造方法中使用
super()
显示调用父类的构造方法,super()
必须写在子类构造方法的第一行,否则编译不通过 - B
super()
和this()
不一定要放在构造方法内第一行 - C
this()
和super()
可以同时出现在一个构造函数中 - D
this()
和super()
可以在static
环境中使用,包括static
方法和static
语句块
解析
显示答案/隐藏答案
正确答案: BCD1、super()表示调用父类构造函数、this()调用自己的构造函数,而自己的构造函数第一行默认会使用super()调用父类的构造函数,所以这俩不能在一个构造函数中会出现重复引用的情况
2、super()和this()必须在构造函数第一行,所以这一点也表明他俩不能在一个构造函数中
3、this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块(里面不能使用非static类型的)。
super()和this()不能同时在构造方法中使用,因为会导致重复实例化两次,而且这俩函数也不能放入static中,因为静态中不能操作实例对象
在构造器B中,使用this()调用其他构造器A时,构造器A的第一行会默认调用super()。
假设this()和super()能同时放在一起,则super()会被调用两次,初始化父类两次。
现实中父类只需要初始化一次就够了,所以this()和super()不能同时出现。