错题介绍
1.以下对自定义异常描述正确的是__B__
- A. 自定义异常可以继承自 Error
- B. 自定义异常可以更加明确定位异常出错的位置和给出详细出错信息
- C. 自定义异常必须继承 Exception
- D. 程序中已经提供了丰富的异常类,使用自定义异常没有意义
自定义异常可以继承Exception也可以继承Exception的子类。Error类是与Exception类平行的一个类,这两个类都是继承了Throwable类的,它主要处理一些不能由try和catch子句捕获的异常,例如ThreadDeath异常,虽然是一种常见的异常,但是并不是一般的try和catch子句可以捕获的,所以自定义异常不可以继承自 Error 。我们在日常进行程序设计的时候,java提供的内置异常类型可能不满足我们的设计需求,那么我们就需要设计自己的自定义异常类型,来满足我们的需求设计。自定义异常可以更加明确定位异常出错的位置和给出详细出错信息,这句是没有错误的。
2.下面关于自定义异常错误的是(B)
- A. 自定义异常是程序中已有异常不能满足条件时进行添加的
- B. 自定义异常可以随时进行定义和使用
- C. 自定义异常一般是一个无参构造函数和一个有参构造函数
- D. 自定义运行时异常可以继承runtimeException
/**IllegalAgeException:非法年龄异常,继承Exception类或 RuntimeException*/
class IllegalAgeException extends Exception {
//默认构造器
public IllegalAgeException() {
}
//带有详细信息的构造器,信息存储在message中
public IllegalAgeException(String message) {
super(message);
}
}
class Person {
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) throws IllegalAgeException {
if (age < 0) {
throw new IllegalAgeException("人的年龄不应该为负数");
}
this.age = age;
}
public String toString() {
return "name is " + name + " and age is " + age;
}
}
public class TestMyException {
public static void main(String[] args) {
Person p = new Person();
try {
p.setName("Lincoln");
p.setAge(-1);
} catch (IllegalAgeException e) {
e.printStackTrace();
System.exit(-1);
}
System.out.println(p);
}
}
自定义异常是Java提供的内置异常类型不能满足程序设计的需求,这时我们可以自己设计 Java 类库或框架,其中包括异常类型。
3.关于抽象类说法以下哪两个是正确的?(A,D )
- A. 抽象类可以被抽象类所继承
- B. 抽象类可以为final的
- C. 如果一个非抽象类从抽象类中派生,不一定要通过覆盖来实现继承的抽象成员
- D. 抽象类中可以不存在任何抽象方法
抽象类必须要被覆盖,才能实现继承成员函数,所以不能被final所修饰。 final所修饰的是: 用final修饰变量是常量,修饰的类不能被继承,修饰的方法不能重写
4.哪个不是JDBC用到的接口和类(C)
- A. Statement
- B. ResultSet
- C. Serialization
- D. Connection
Serialization是序列化DriveManager类是JDBC的管理层,用来管理数据库中的驱动程序。在使用Java操作数据库之前,必须使用Class类的静态方法forName(String className)加载能够连接数据库的驱动程序。
DriverManager类的getConnection()方法与本地数据库建立连接
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/information_schema?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC","root","123456");Connection接口:代表数据库连接对象,每个Connection代表一个物理连接会话。要想访问数据库,必须先得到数据库连接。该接口的常用方法如下:
Statement createStatement() throws SQLException; 该方法返回一个Statement对象;
PreparedStatement prepareStatement(String sql)throws SQLException;该方法返回预编译的Statement对象,即将SQL语句提交到数据库进行预编译;
CallableStatement prepareCall(String sql) throws SQLException;
该方法返回CallableStatement对象,该对象用于调用存储过程。
上面上个方法都返回用于执行sql语句的Statement对象,PreparedStatement和CallableStatement是Statement的子类,只有获得了Statement之后才可以执行sql语句;
除此之外,Connection还有如下几个用于控制事务的方法。
Savepoint setSavepoint() throws SQLException;创建一个保存点;
Savepoint setSavepoint(String name) throws SQLException;以指定名字来创建一个保存点;
void setTransactionIsolation(int level) throws SQLException;设置事务的隔离级别;
void rollback() throws SQLException;回滚事务;
void rollback(Savepoint savepoint) throws SQLException;将事务回滚到指定的保存点;
void setAutoCommit(boolean autoCommit) throws SQLException;关闭自动提交,打开事务;
void commit() throws SQLException;提交事务;Statement接口:用于执行sql语句的工具接口。该对象既可以执行DDL,DCL语句,也可以用于执行DML语句,还可以用于执行sql查询。当执行sql查询时,返回查询到的结果集。它的常用方法如下:
ResultSet executeQuery(String sql) throws SQLException;该方法用于执行查询语句,并返回查询结果对应ResultSet对象。该方法只能用于执行查询语句。
int executeUpdate(String sql) throws SQLException;该方法用于执行DML语句,并返回受影响的行数;该方法也可用于执行DDL语句,执行DDL语句将返回0;
boolean execute(String sql) throws SQLException;改方法可以执行任何sql语句。如果执行后第一个结果为ResultSet对象,则返回true;如果执行后第一个结果为受影响的行数或没有任何结果,则返回false;PreparedStatement接口:预编译的Statement对象,PreparedStatement是Statement的子接口,它允许数据库预编译sql语句(这些sql语句通常带有参数),以后每次只改变sql命令的参数,避免数据库每次都需要编译sql语句,无需再传入sql语句,
只要为预编译的sql语句传入参数值即可。所以它比Statement多了如下方法:
void setXxx(int parameterIndex, Xxx value):该方法根据传入参数值的类型不同,需要使用不同的方法。传入的值根据索引传给sql语句中指定位置的参数。ResultSet接口:结果集对象。该对象包含访问查询结果的方法,ResultSet可以通过列索引或列名获得列数据。它包含了如下常用方法来移动记录指针。
void close() throws SQLException;释放ResultSet对象;
boolean absolute( int row ) throws SQLException;将结果集的记录指针移动到第row行,如果row是负数,则移动到倒数第row行,如果移动后的记录指针指向一条有效记录,则该方法返回true;
boolean next() throws SQLException;将结果集的记录指针定位到下一行,如果移动后的记录指针指向一条有效的记录,则该方法返回true;
boolean last() throws SQLException;将结果集的记录指针定位到最后一行,如果移动后的记录指针指向一条有效的记录,则该方法返回true;
5.下面有关JDBC事物的描述正确的是哪一个(B)
- A. 如果需要开启手动提交事务需要调用Connection对象的start()方法。
- B. JDBC事务默认为自动提交,每执行一条SQL语句就会开启一个事务,执行完毕之后自动提交事务,如果出现异常自动回滚事务
- C. JDBC的事务不同于数据库的事务,JDBC的事务依赖于JDBC驱动文件,拥有独立于数据库的日志文件,因此JDBC的事务可以替代数据库事务。
- D. 如果事务没有提交就关闭了Connection连接,那么JDBC会自动提交事务。
JDBC事务默认为自动提交,每执行一条SQL语句就会开启一个事务,执行完毕之后自动提交事务,如果出现异常自动回滚事务A:调用setAutoCommit方法Connection.setAutoCommit(false)
B:JDBC是一套Java连接数据库的标准。标准就是接口,接口定了标准(规则 == 抽象的方法),接口没有具体的实现。具体的实现由数据库厂商提供的驱动来实现。也就是说,JDBC指定了规范,但是要连接MySQL数据库,得使用的是MySQL数据体提供的驱动程序。又比如,要连接Oracle数据库,得使用Oracle数据库提供的驱动程序来实现。总结:驱动才是对JDBC的具体的实现。
D:数据库连接的自动提交设置为false时,不进行手动提交,关闭数据库连接的时候并不会自动提交事务。
6.下面关于文件流的描述正确的是(A)
- A. 若输出流要打开的文件不存在,将新建一个文件
- B. 若输入流要打开的文件不存在, 将新建一个文件
- C. 建立一个文件流对象,必须同时打开一个文件
- D. 文件流只能完成对磁盘文件的输入、输出。
输出流就是从程序中将文件写到别的地方去,此时如果文件不存在,将新建一个。
7.对于catch子句的排序,下面哪种是正确的(A)
- A. 子类在先,父类在后
- B. 父类在先,子类在后
- C. 先有子类,其他如何排列都无关
- D. 有继承关系的异常不能在同一个try程序段内
catch块内,先有子类,在写父类。否则父类会覆盖子类
8.以下对继承的描述错误的是(C)
- A. 当实例化子类时会递归调用父类中的构造方法
- B. Java中的继承存在着传递性
- C. 定义为final的类可以被继承
- D. 父类更具有通用性,子类更具体
final所修饰的是: 用 final修饰变量是常量, 修饰的类不能被继承, 修饰的方法不能重写
9.下面哪个异常是运行时异常(D)
- A. ClassNotFoundException
- B. NoSuchMethodException
- C. IllegalAccessException
- D. NullPointerException
这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
10.下面不是事务具有的特性(A)
- A. 封闭性
- B. 一致性
- C. 原子型
- D. 隔离型
事物的特点:原子性(Atomic)、一致性(Consistent)、隔离性(Isolated)和持久性(Durable)
11.关于Java的抽象类、接口,以下描述错误的是?(A )
- A. 抽象类和接口中的方法都没有方法体
- B. 一个类只能继承一个抽象类,但可以实现多个接口;一个接口可以继承多个接口
- C. 抽象类不一定含有抽象方法,接口中的方法都是抽象方法
- D. 抽象类可以含有私有成员变量,接口不含有私有成员变量
1.抽象类要被子类继承,接口要被类实现。
2.接口只能做方法声明,抽象类中可以作方法声明,也可以做方法实现。
3.接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
4.接口是设计的结果,抽象类是重构的结果。
5.抽象类和接口都是用来抽象具体对象的,但是接口的抽象级别最高。
6.抽象类可以有具体的方法和属性,接口只能有抽象方法和不可变常量。
7.抽象类主要用来抽象类别,接口主要用来抽象功能。
接口
- 约束
- 定义一些方法,让 不同的人实现
- 接口里面的方法默认是public abstract修饰的
- 接口里面的属性默认是public static final修饰的
- 接口不能被实例化,接口中没有构造方法
- 接口可以实现多个,通过implements实现
- 必须要重写接口中的方法!!
- 接口没有构造方法,没有方法体
- 接口和接口之间可以多继承。一个类implements一个多继承的接口,需要实现他包括他继承的所有方法
12.关于匿名内部类叙述正确的是? (B )
- A. 匿名内部类不能用于形参
- B. 匿名内部类不可以定义构造器
- C. 匿名内部类可以继承一个基类,不可以实现一个接口
- D. 以上说法都不正确
由于构造器的名字必须与类名相同,而匿名类没有类名,所以匿名类不能有构造器
13.关于抽象类的说法哪两个是正确的?(C,D )
- A. 如果父类是抽象类,则子类必须重写父类所有的抽象方法
- B. 接口和抽象类是同一个概念
- C. 抽象类中可以有非抽象方法
- D. 不能用抽象类去创建对象
抽象类:中只要有抽象方法就叫抽象类,接口是接口,类是类
抽象类:需要先实现,才能进行实例化,比如:一个普通类继承抽象类,必须实现父类的所有方法,相当于实例化了;
- 普通类继承,并非一定要重写父类方法。
- 抽象类继承,如果子类也是一个抽象类,并不要求一定重写父类方法。如果子类不是抽象类,则要求子类一定要实现父类中的抽象方法。
- 接口类继承。如果是一个子接口,可以扩展父接口的方法;如果是一个子抽象类,可以部分或全部实现父接口的方法;如果子类不是抽象类,则要求子类一定要实现父接口中定义的所有方法。
简单总结,需要重写的有:
普通类继承抽象类,重写所有抽象类方法;(不包括普通方法)
普通类继承接口,重写所有接口方法。(不包括default关键字修饰的方法)
子抽象类,可以部分或者全部实现父接口
14.使用JDBC事务的步骤是(D )
①取消Connection的事务自动提交方式
②发生异常回滚事务
③获取Connection对象
④操作完毕提交事务
- A. ③①④②
- B. ①②③④
- C. ①②④③
- D. ③①②④
在使用JDBC访问数据库时,首先建立对数据库的连接,创建一个Connection对象。在默认情况下,事务是自动提交的,因此要使用事务时,要先取消Connection的自动提交方式。如果执行发生异常,就回滚事务。操作完成后,提交事务就可以了。
15.Java在方法中用来抛出异常关键字的是(A)
- A. throw
- B. try
- C. finally
- D. catch
Java中有五个异常关键字。Try:里面是可能出现的异常语句或代码块
catch:出现异常怎么办,里面是处理异常的方法
finally:无论是否产生异常都会执行,一般用于资源的清除工作,比如io流或者是jdbc的驱动关闭
throws:用于方法声明时自动抛出
throw:用于实际手动抛出
16.ArrayList和LinkList的描述,下面说法错误的是?(D)
A. LinkedeList和ArrayList都实现了List接口
B. ArrayList是可改变大小的数组,而LinkedList是双向链接串列
C. LinkedList不支持高效的随机元素访问
D. 在LinkedList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在ArrayList的中间插入或删除一个元素的开销是固定的
Arraylist的内存结构是数组,当超出数组大小时创建一个新的数组,把原数组中元素拷贝过去。其本质是顺序存储的线性表,插入和删除操作会引发后续元素移动,效率低,但是随机访问效率高LinkedList的内存结构是用双向链表存储的,链式存储结构插入和删除效率高,不需要移动。但是随机访问效率低,需要从头开始向后依次访问
17.程序按什么顺序编写(C)
A. 释放资源
B. 获得与数据库的物理连接
C. 执行SQL 命令
D. 注册JDBC Driver
E. 创建不同类型的Statement
F. 如果有结果集, 处理结果集
- A. DBEFCA
- B. DBEAFC
- C. DBECFA
- D. BDEFCA
注册JDBC Driver,获得与数据库的物理连接,创建不同类型的Statement,执行SQL 命令,如果有结果集, 处理结果集,释放资源
18.以下对异常的描述不正确的有(C)
A 异常分为 Error 和 Exception
B Throwable 是所有异常类的父类
C Exception 是所有异常类的父类
D Exception 包括 RuntimeException 和 RuntimeException 之外的异常
异常分为:Error和Exception。且Throwable是所有异常的父类,并不是Exception。Exception 包括 RuntimeException 和 RuntimeException 之外的异常。
19.接口是一种引用类型,在接口中可以声明以下哪三个(A,B,C)。
- A. 抽象内部类
- B. 类变量
- C. 抽象方法
- D. 实例方法
准确的说,接口只能包括方法;
但是属性、索引器和事件的实质都是方法,所以可以包括他们三个;
- 约束
- 定义一些方法,让 不同的人实现
- 接口里面的方法默认是public abstract修饰的
- 接口里面的属性默认是public static final修饰的
- 接口不能被实例化,接口中没有构造方法
- 接口可以实现多个,通过implements实现
- 必须要重写接口中的方法!!
- 接口没有构造方法,没有方法体
- 接口和接口之间可以多继承。一个类implements一个多继承的接口,需要实现他包括他继承的所有方法
20.局部内部类可以用哪两个修饰符修饰?( A,D)
- A. final
- B. private
- C. public
- D. abstract
局部内部类就像方法里面的一个局部变量一样,是不能有public,private,protected和static修饰的
21.下面关于java中类的说法不正确的是(D)
- A. 声明为final的方法不能在子类中覆写
- B. 抽象方法不一定声明在抽象类中,也可以在接口中
- C. 抽象类不光可以做父类,也可以做子类
- D. abstract和final能同时修饰一个类
final修饰的类不能被重写和继承,而abstract的类是抽象类,本身没有实现,只能通过子类来实现,也就是说必须被继承。
所以说它们是没法同时做修饰符的。
22.ArrayList和Vector主要区别是什么?(B )
- A. 上述说法都不正确
- B. Vector与ArrayList一样,也是通过数组实现的,不同的是Vector支持线程的同步
- C. Vector是通过链表结构存储数据,ArrayList是通过数组存储数据
- D. Vector与ArrayList一样,也是通过数组实现的,不同的是ArrayList支持线程的同步
Vector是线程安全的,也就是说是同步的 ,而ArrayList 是线程序不安全的,不是同步的
24.下面关于Java反射基本操作方法的描述错误的是(C)
- A. getConstructor()-获取构造器
- B. getField()-获取字段
- C. getName()-获取字段名
- D. getMethods()-获取方法
getName()方法是获取类名
25.以下对JDBC事务描述错误的是(A)
- A. JDBC事务属于容器事务类型
- B. JDBC事务是由Connection发起的,并由Connection控制
- C. JDBC事务属于JAVA事务的一种
- D. JDBC事务可以保证操作的完整性和一致性
Java事务的类型有三种: JDBC事务、JTA(Java Transaction API)事务、容器事务。容器事务主要是J2EE应用服务器提供的,容器事务大多是基于JTA完成,这是一个基于JNDI的,相当复杂的API实现。
26.下面哪个方法只能用于删除LinkedList集合中元素,无法删除ArrayList集合中元素(A)
- A. removeFirst()
- B. remove()
- C. removeAll()
- D. clear()
removeFirst是LinkedList的特有方法。
27.关于异常,下面说法正确的是(A)
- A. 异常是一种对象
- B. 以上说法都对
- C. 一旦程序运行,异常将会被创建
- D. 为了保证程序运行速度,要尽量避免异常控制
异常是一种对象, Throwable是所有异常的父类。它在程序运行出错时被创建。异常控制是 Java语言处理程序出错的有效机制
28.下列说法不是数据库连接池好处的是(D )
- A. 统一的连接管理,避免数据库连接泄漏
- B. 更快的系统响应速度
- C. 资源重用
- D. 可以同时连接多个数据库
数据库连接池是对同一个数据库创建了多个连接,而不是同时连接到多个数据库。
29.在使用 interface 声明一个接口时,其中的类变量不可以使用(D)修饰符修饰
- A. public
- B. final
- C. static
- D. private
Public static final int a = 1;
30.下面对于排序接口的描述错误的是(D)
- A. 排序接口有Comparable和Comparator两种。
- B. Comparable是内部排序接口,Comparator是外部排序接口。
- C. Comparator接口的实现方法Compare(int x,int y)比较大小,返回正数表示正序
- D. 实现了Comparator接口的就自动支持排序。
实现了Comparable接口的就自动支持排序了。
31.下面哪个选项正确抛出了异常(C)
- A. throws new Exception();
- B. try{ }catch(Exception e){ }
- C. throw new Exception(“异常”);
- D. throw Exception(“异常”);
抛出异常为throw new Exception()
32. 下面哪个描述是错误的(B)
- A. Exception分为运行时异常和非运行时异常。
- B. 运行时异常又称为检查异常。
- C. Error异常发生后,程序就会终止。
- D. Java中异常的父类是Throwable
非运行时异常又称为检查异常。
## 33.下面对于Java反射的描述错误的是(C)
- A. Java反射就是通过反射类来看后缀为.class的类文件
- B. 反射是一个动态的机制。
- C. Java反射提高了程序的灵活性,减少开销。
- D. 反射指的是我们可以在运行期间加载、探知、使用编译期间完全未知的类。
Java反射提高了程序的灵活性,增加了开销。
34.JDBC中执行一条SQL语句应调用方法(C)
- A. executeSQL()
- B. sendQuery()
- C. executeQuery()
- D. sendSQL()
方法executeQuery 用于产生单个结果集的语句,例如 SELECT 语句。 被使用最多的执行 SQL 语句的方法是 executeQuery。这个方法被用来执行 SELECT 语句
35.下列正确的是(C)
public static void main(String[] args) {
List list = new ArrayList();
list.add(22);
list.add(54);
list.add(19);
list.add(35);
list.add(89);
list.sort(new Comparator() {
@Override
public int compare(Integer o1, Integer o2) {
if (o1>o2) {
return -1;
} else {
return 1;
}
}
});
System.out.println(list);
}
- A. 运行不通过
- B. 编译不通过
- C. [89, 54, 35, 22, 19]
- D. [19, 22, 35, 54, 89]
如果返回的值小于零,则不交换两个o1和o2的位置;如果返回的值大于零,则交换o1和o2的位置。o1 - o2升序, o2- o1降序
36.判断相等
37.运行结果原理
i先赋值给m,在++,所以输出i等于2,在赋值于m时i变为2所以mm为4