2021年09月04日 java
考点1:访问控制权限修饰符
下列修饰符中与访问控制权限无关的是?( )
- A
private
- B
public
- C
protected
- D
final
解析
显示答案/隐藏答案
正确答案: Djava常见修饰符
权限修饰符
private: 修饰私有变量
默认修饰符default(不用把default写出来): 比private限制更少,但比protected限制更多
protected: 修饰受保护变量
public: 修饰公有变量
状态修饰符
final 最终变量(final修饰类,该类不能被继承,final修饰方法,该方法不能被重写,final修饰变量,该变量不能被重新赋值(相当于常量))
static 静态变量(随着类的加载而加载,优先于对象存在,被所有对象所共享,可以通过类名调用)
抽象修饰符
abstract 抽象类&抽象方法(抽象类不能被实例化,抽象类中不一定有抽象方法,但有抽象方法的类必须定义为抽象类)
考点2:main方法
Java Application 中的主类需包含main方法,以下哪项是main方法的正确形参?( )
- A
String args
- B
String[] args
- C
Char arg
- D
StringBuffer[] args
解析
显示答案/隐藏答案
正确答案: B考点3:重载
类 ABC 定义如下:
1 | public class ABC{ |
将以下哪个方法插入行 3 是不合法的。()
- A
public float max(float a, float b, float c){ }
- B
public double max (double c, double d){ }
- C
public float max(float a, float b){ }
- D
private int max(int a, int b, int c){ }
解析
显示答案/隐藏答案
正确答案: B重载要求:两同一不同
重载要求方法的参数列表需要不一样(个数,或者参数类型),修改参数名或者修改返回值以及访问权限并没有用
考点4:异常try-catch-finally执行流程
AccessViolationException异常触发后,下列程序的输出结果为( )
1 | static void Main(string[] args) |
- A
1
2error2
error3 - B
error3
- C
error2
- D
error1
解析
显示答案/隐藏答案
正确答案: A考点5:集合HashMap的key和value可以为null,放入时如果key相同,则新value覆盖旧的value
以下java程序代码,执行后的结果是()
1 | java.util.HashMap map=new java.util.HashMap(); |
- A 0
- B
null
- C 1
- D 2
解析
显示答案/隐藏答案
正确答案: C- HashMap可以插入null的key或value。
- 插入的时候,检查是否已经存在相同的key,
- 如果不存在,则直接插入,
- 如果存在,则用新的value替换旧的value。
在本题中,第一条put语句,会将key/value对插入HashMap,而第二条put,因为已经存在一个key为name的项,所以会用新的value替换旧的value,
因此,两条put之后,HashMap中只有一个key/value键值对。那就是(name,jack)。所以,size为1.
考点6:boolean变量只能和boolean变量比较
已知boolean result = false
,则下面哪个选项是合法的:
- A
result=1
- B
result=true;
- C
if(result!=0) {//so something…}
- D
if(result) {//do something…}
解析
显示答案/隐藏答案
正确答案: BD1、boolean类型只有两个直接量值:true和false.
2、除成员变量会有默认初始值外,其他变量必须在第一次使用之前初始化
boolean类型的默认值是false;
基本数据类型的默认值(成员变量)
其余的7种基本类型默认值:
byte是 (byte)0;
short是 (short)0;
int是 0;
long是 0L;
float 是0.0f;
double 是0.0d;
char是 \u0000.
String是null.
考点7:java关键字和常量
下列不是 Java 关键字的是 ( )
- A
abstract
- B
false
- C
native
- D
sizeof
解析
显示答案/隐藏答案
正确答案: BDJava中的关键字有哪些
答:1)48个关键字:abstract
、assert
、boolean
、break
、byte
、case
、catch
、char
、class
、continue
、default
、do
、double
、else
、enum
、extends
、final
、finally
、float
、for
、if
、implements
、import
、int
、interface
、instanceof
、long
、native
、new
、package
、private
、protected
、public
、return
、short
、static
、strictfp
、super
、switch
、synchronized
、this
、throw
、throws
、transient
、try
、void
、volatile
、while
。
Java保留字
2)2个保留字(现在没用以后可能用到作为关键字):goto
、const
。
Java特殊直接量 Java常量
3)3个特殊直接量:true
、false
、null
。
考点8:暂时不懂:Jvm垃圾回收
以下哪些jvm的垃圾回收方式采用的是复制算法回收
- A 新生代串行收集器
- B 老年代串行收集器
- C 并行收集器
- D 新生代并行回收收集器
- E 老年代并行回收收集器
- F
cms
收集器
解析
显示答案/隐藏答案
正确答案: AD答案AD
新生代串行收集/并行回收器:复制算法;
老年代串行收集/并行回收器:标记-压缩算法;
并行收集器:将串行收集器多线程化,回收策略和串行收集器一致,因此该收集器是新生代为复制算法,老年代为标记-压缩算法。
CMS收集器:Concurrent Mark Sweep,从名字就能知道使用的是多线程的标记-清除算法。
在垃圾的分代回收机制中
新生代一般采用“复制”算法:因为新生代每次都有大批量对象死去,就以少量对象的复制成本完成收集
老年代一般采用“标记-整理/清除”算法:因为对象存活率高,且没有额外内存,故采用“标记-整理”或者“标记-清除”
两个最基本的java回收算法:复制算法和标记清理算法
复制算法:两个区域A和B,初始对象在A,继续存活的对象被转移到B。此为新生代最常用的算法
标记清理:一块区域,标记可达对象(可达性分析),然后回收不可达对象,会出现碎片,那么引出 标记-整理算法:多了碎片整理,整理出更大的内存放更大的对象
两个概念:新生代和年老代
新生代:初始对象,生命周期短的
永久代:长时间存在的对象
整个java的垃圾回收是新生代和年老代的协作,这种叫做分代回收。
P.S:Serial New收集器是针对新生代的收集器,采用的是复制算法
Parallel New(并行)收集器,新生代采用复制算法,老年代采用标记整理
Parallel Scavenge(并行)收集器,针对新生代,采用复制收集算法
Serial Old(串行)收集器,新生代采用复制,老年代采用标记整理
Parallel Old(并行)收集器,针对老年代,标记整理 CMS收集器,基于标记清理
G1收集器:整体上是基于标记 整理 ,局部采用复制
综上:新生代基本采用复制算法,老年代采用标记整理算法。cms采用标记清理。
考点9:int赋值给Integer时自动装箱 Integer自动装箱时-128~+127范围内使用缓存数组中的值 Integer和int比较时自动拆箱然后比较值
1 | Integer a1=17,b2=17; |
以下语句返回值为 true 的2是()
- A
a1==a2
- B
d1==d2
- C
b1==b2
- D
c1==c2
解析
显示答案/隐藏答案
正确答案: ABInteger缓存-128到+127
选A,B. Integer a1 = 17; 语句执行的是valueOf()方法
1 | ...... |
对于-128到127之间的数, Integer直接从数组中取, 故a1, a2指向的是同一个对象, A正确.
其余都是new出来的对象, 显然地址都不相同.
int与Integer比较时 只比较值
int类型与Integer类型比较时, 先将Integer拆箱, 再比较值, 故B正确.
考点10:正则表达式身份证号
关于身份证号,以下正确的正则表达式为( )
- A
isIDCard=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;
- B
isIDCard=/^[1-9]\d{7}((9\d)|(1[0-2]))(([0|1|2]\d)|3[9-1])\d{3}$/;
- C
isIDCard=/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$/;
- D
isIDCard=/^[1-9]\d{5}[1-9]\d{3}((9\d)|(1[9-2]))(([0|1|2]\d)|3[9-1])\d{4}$/;
解析
显示答案/隐藏答案
正确答案: AC正确选项
A选项:isIDCard=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/
C选项:isIDCard=/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$/
常用正则表达式
^
:起始符号,^x
表示以x开头$
:结束符号,x$
表示以x结尾[n-m]
:表示从n到m的数字\d
:表示数字,等同于[0-9]
X{m}
:表示由m个X字符构成,\d{4}
表示4位数字
身份证构成 15位 18位
15位身份证的构成:六位出生地区码+六位出身日期码+三位顺序码
18位身份证的构成:六位出生地区码+八位出生日期码+三位顺序码+一位校验码
C选项的构成:[1-9]\d{5}
:六位出生地区码,出生地区码没有以0开头,因此第一位为[1-9]
。[1-9]\d{3
}:八位出生日期码的四位年份,同样年份没有以0开头。((0\d)|(1[0-2]))
:八位出生日期码的两位月份,|
表示或者,月份的形式为0\d
或者是10
、11
、12
。(([0|1|2]\d)|3[0-1])
:八位出生日期码的两位日期,日期由01至31。\d{4}
:三位顺序码+一位校验码,共四位。
A选项的构成:[1-9]\d{7}
:六位出生地区码+两位出生日期码的年份,这里的年份指后两位,因此没有第一位不能为0的限制,所以合并了。
后面的与C选项类似了。
好吧其实我也是第一次知道身份证还有15位的。