本文主要是介绍JavaSE-易错题集-001,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. AccessViolationException异常触发后,下列程序的输出结果为( )
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
-
A error2error3
-
B error3
-
C error2
-
D error1
正确答案:A
题解:
(1. 若catch(){} 块中 有throw 语句,则 try{} catch{} finally{} 块之外的代码不执行;否则,执行。
(2. try{} 中有异常,则try{}中异常下面代码不执行。
(3. finally{} 中显示的代码必执行。
2. 非抽象类实现接口后,必须实现接口中的所有抽象方法,除了abstract外,方法头必须完全一致.
-
A 正确
-
B 错误
正确答案:B
题解:
实际上这道题考察的是两同两小一大 原则:
方法名相同,参数类型相同
子类返回类型小于等于父类方法的返回类型
子类抛出异常小于等于父类方法抛出异常
子类访问权限大于等于父类方法访问权限
3. 以下代码执行后输出结果为( )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
-
A blockAblockBblockA
-
B blockAblockAblockB
-
C blockBblockBblockA
-
D blockBblockAblockB
正确答案:A
题解:
首先区别<clinit>是类初始化,<init>是实例初始化
类装载准备阶段->类初始化clinit阶段
类装载准备阶段:变量赋系统要求的初始值(0或者null等),final变量会在此时赋用户定义的初始值
类初始化<clinit>过程:
Step1 编译器收集t1的赋值动作,static语句块,main方法语句块
Step2 执行收集好的语句块:
Step2.1 执行t1 = new Test,发现clinit过程已经调用,于是可以开始触发init过程,执行成员变量的初始化(此处没有),以及非静态代码块,输出blockA,最后调用构造函数(此处没有)
Step2.2 按照顺序,执行static语句块,输出blockB
Step2.3 按照顺序,执行main方法语句块,执行t2 = new Test,触发init方法,执行非静态代码块,输出blockA
4. 下面哪几个函数 public void example(){....} 的重载函数?()
-
public void example(int m){...}
-
public int example(){..}
-
public void example2(){..}
-
public int example(int m,float f){...}
参考答案
AD ,函数方法名必须相同,看参数列表即可,无关返回值。
题解:
java重载的时候以参数个数和类型作为区分,方法名相同,返回类型可以相同也可以不同,但不以返回类型作为区分,所以b也是错的,因为b的参数列表和原来一样。
5. jdk1.8版本之前的前提下,接口和抽象类描述正确的有( )
-
抽象类没有构造函数
-
接口没有构造函数
-
抽象类不允许多继承
-
接口中的方法可以有方法体
正确答案:B C
题解:
A 抽象类是一个类,所以有构造器
B 接口不是一个类,所以没有构造函数
C 抽象类是一个类,类不允许继承多个类,但是可以实现多个接口,而接口可以继承多个接口,接口不能实现接口。
D jdk1.8 之前,接口中的方法都是抽象方法,用public abstract 修饰,jdk1.8新特性:可以有默认方法(用default 修饰,不能省略)和静态方法(static修饰),jdk1.9:接口中的默认方法还可以用private修饰
6. 下面哪些写法能在 java8 中编译执行()
-
dir.listFiles((File f)->f.getName().endsWith(“.Java”));
-
dir.listFiles((File f)=>f.getName().endsWith(“.Java”));
-
dir.listFiles((_.getName().endsWith(“.Java”)));
-
dir.listFiles( f->f.getName().endsWith(“.Java”));
正确答案:A D
题解:
Lanbda表达式的主要作用就是代替匿名内部类的繁琐语法, 它由三部分组成:
(1) 形参列表。形参列表允许省略形参类型。如果形参列表中只有一个参数,甚至连形参列表的圆括号也可以省略。
(2) 箭头(→)。必须通过英文中画线和大于符号组成。
(3)代码块。如果代码块只包含一条语句,Lambda表达式允许省略代码块的花括号,那么那条语句就不要用花括号表示语句结束。Lambda代码块只有一条return语句,甚至可以省略return关键字。Lambda表达式需要返回值,而它的代码块中仅有一套省略了return的语句。Lambda表达式会自动返回这条语句的值。
由此可见,应该是A和D正确。
7. 在JDK1.7中,下述说法中抽象类与接口的区别与联系正确的有哪些?
-
抽象类中可以有普通成员变量,接口中没有普通成员变量。
-
抽象类和接口中都可以包含静态成员常量。
-
一个类可以实现多个接口,但只能继承一个抽象类
-
抽象类中可以包含非抽象的普通方法,接口中的方法必须是抽象的,不能有非抽象的普通方法。
正确答案:A B C D
题解:(jdk1.7中)
接口(interface) 可以说是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的对象变量类型默认为public static final。另外,接口和抽象类在方法上有区别:
1. 抽象类可以有构造方法,接口中不能有构造方法。
2. 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
3. 抽象类中可以有普通成员变量,接口中没有普通成员变量
4. 抽象类中抽象方法的访问类型可以是public,protected和默认类型
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final 类型,并且默认为 public static final 类型
7. 一个类可以实现多个接口,但只能继承一个抽象类。二者在应用方面也有一定的区别:接口更对的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的复用,例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的所有Servlet类都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就可以定义一个抽象的基类,让所有的Servlet都继承这个抽象基类,在抽象基类的service方法中完成权限判断、记录访问日志和处理异常的代码,在各个子类中只是完成各自的业务逻辑代码。
这篇关于JavaSE-易错题集-001的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!