【明天考试加油!!^^】
1. 请列举Java线程生命周期中的五种状态不包括(D)
A.运行状态
B.消亡状态
C.就绪状态
D.独立状态
【考点:JAVA线程生命周期的五个状态——新建状态、就绪状态、运行状态、阻塞状态、死亡状态】
【新建状态(new)】当一个线程类实例被创建时,线程处于新建状态,此时的线程已经被初始化,并分配了资源;
Thread t=new MyThread();
【就绪状态(Runnable)】已具备运行条件,进入线程队列,排队等待CPU。一旦获得CPU使用权,就可进入运行状态;
t.start();
//注意,如果是使用实现Runnable接口,启动有所不同
Ruanble r=new MyRunnable()//创建接口对象
Thread t=new Thread(a);//创建Thread对象,将a传进Thread()方法中
t.start//通过t来启动
【运行状态(Running)】当处于就绪状态的线程被调度获得CPU资源时,就进入了运行状态。定义在线程体中的run()方法被调用,从方法体的第一条语句开始顺序执行;
class my extends Thread(){//定义线程类去继承Thread
public my(){}
public void run(){}//重写run方法
}
//创建my类对象作为Thread对象的参数
//通过Thread的对象.start(),去启动线程
//一旦获得cpu使用权,则重写的run()方法就被调用,从方法体的第一句开始执行
【阻塞状态(Blocked)】处于运行状态的线程因事件的发生,而导致让出CPU使用权,并终止当前执行,进入阻塞状态——Block、等待、锁定(sleep()、wait()、I/O阻塞......)
【死亡状态(Terminated)】如果线程调用stop()方法或nun()方法正常执行完毕,或者线程抛出一个未捕获的异常(Exception)错误(Error),线程就进入死亡状态。一旦进入死亡状态,线程将不再拥有运行的资格,也不能再转换到其他状态。
2.Java程序中数据库连接的主要步骤不包括(C)B
A.创建连接Connection对象;利用Connection对象生成Statement对象;
B.若是执行查询语句,直接从Connection读取数据
C.创建数据源
D.利用Statement对象执行SQL语句,如查询、更新、插入、删除等
【考点:数据库连接的主要步骤——B选项应该是从Resultset中读取数据】
- 创建数据源——(使用JDBC-ODBC桥式驱动程序的必需);
- 注册、加载特定的驱动程序
-
Class.forName("驱动程序名称");
- 创建连接Connection对象
-
Connection conn = DriverManager.getConnection(url,“用户名", "密码");
- 利用Connection对象生成Statement对象
-
Statement stmt = conn.createStatement( );
- 利用Statement对象执行SQL语句:如查询、更新、插入、删除等
-
ResultSet rs = stmt.executeQuery(“Select 语句”);
- 若是执行查询语句,还要从ResultSet读取数据——next()、getXXX(___)
- 关闭ResultSet、Statement、Connection等。
3. 在Java中,一个类可同时定义许多同名的方法,这些方法的形式参数个数、类型或顺序各不相同,传回的值也可以不相同。这种面向对象程序的特性称为(A)
A.重载
B.引出
C.重写
D.隐藏
【考点:方法重载的性质】
方法重载:方法名相同、参数类型与数目不同。
方法重写(覆盖):方法名相同、参数类型与数目相同、方法体不同,通常是在类与类继承的情况下使用。
4. 下列中整数型数组声明错误形式的是(C)
A.int s[ ];
B.int [ ]s;
C.int [s];
D.int[ ] s;
【考点:整数型数组声明形式——数组的大小必须是一个常量表达式,而不能是变量或未知的大小。因此,声明“int [s]”是不合法的】
A. int s[];
这是一个常见的声明整数型数组的方式,其中“[]”表示数组的维度可以在后面定义。
B. int []s;
这是另一种声明整数型数组的方式,其中“[]”表示数组的维度可以在后面定义。
D. int[] s;
这也是一个常见的声明整数型数组的方式,其中“[]”表示数组的维度可以在后面定义。
举例 :声明一个长度为5的整数型数组
- 声明数组变量并指定长度
int[] array = new int[5];
- 声明数组变量并初始化元素
int[] array = {1, 2, 3, 4, 5};
- 声明数组变量并在后续代码中为其分配空间
int[] array; array = new int[5]; // 先声明数组变量,后在代码中为其分配空间
- 声明多维数组
int[][] multidimensionalArray = new int[3][4];
// 声明一个3行4列的二维整数型数组
5.当“X extends Y”是正确时,下面哪是正确的?(A)
A.X、Y同时是类或者接口;
B.X是父类,Y是子类;
C.X是父接口,Y是子接口;
D.X是类,Y是一个接口;
【考点:继承关键字extends——“X extends Y”表示X继承于Y,可以类继承类,也可以接口继承接口,X表示子类(接口),Y表示父类(接口)】
6. JDBC加载驱动程序正确的方法是(A)
A.Class.forName()
B.Class.forDrive()
C.Class.forManager()
D.Class.setDrive()
【考点:JDBC加载驱动程序—— Class.forName()
,BCD这些方法是不存在的】
7. Java的java.awt包中定义了5种布局类,分别是(D)、BorderLayout、CardLayout、GridLayout和GridBagLayout。
A.3DLayout
B.PanleLayout
C.TestLayout
D.FlowLayout
【Java Swing的标准式布局管理器——FlowLayout(流布局)、BorderLayout(边界布局)、CardLayout(卡片布局)、GridLayout(网格布局)和GridBagLayout、BoxLayout(盒布局)】
-
BorderLayout: BorderLayout 是 Java Swing 中最常用的布局管理器之一。它将容器分为 5 个区域:北(North)、南(South)、东(East)、西(West)和中央(Center)。每个区域只能放置一个组件。如果某个区域没有放置组件,则该区域将不可见。BorderLayout 可以根据窗口大小自动调整组件的位置和大小。
-
CardLayout: CardLayout 是一种适用于多个组件需要在同一个区域中显示的布局管理器。它允许将多个组件“垂直”叠加在一个容器中,只有一个组件处于可见状态。通过切换可见组件,CardLayout 可以实现面板之间的快速切换,因此被广泛用于实现轮播图、向导和切换不同的操作区域等。
-
GridLayout: GridLayout 是一种网格布局管理器,可以将组件按行列排列在容器中。网格布局管理器的大小被设置为 M 行 N 列。每个空间中都可以容纳一个组件,每个组件的大小相等。如果没有足够的组件填充容器,则剩余的位置将留空。GridLayout 可以用于创建表格、网格、矩阵等结构化的布局。
-
GridBagLayout: GridBagLayout 是一种相对灵活的布局管理器,允许将组件放置在一个网格中的任意位置。每个组件都有一个 GridBagConstraints 对象,该对象包含了组件所在行列的位置、大小、对齐方式等信息。GridBagLayout 可以用于创建复杂的、非常灵活的布局。
-
FlowLayout: FlowLayout 是一种简单的流式布局管理器,可以将组件按顺序排列在容器中,如果容器宽度不足以放置所有的组件,则会自动换行。FlowLayout 可以根据容器的大小自动调整组件的大小和位置。它通常用于创建工具栏、按钮组、标签等需要按顺序排列的组件。
-
BoxLayout:可横向或纵向排列组件,可以指定它们应该是同一个宽度或者高度。
8. 创建两个字符串String s1="seig"、String s2="seig"对象,s1.equals(s2)比较两个字符串中对应的每个字符是否相等,返回的结果是(D)
A.right
B.false
C.wrong
D.true
【考点:equals()】
拓展:s1.equals(s2)———进行字符串之间的值比较,相同返回ture,不同返回false值。
s1==s2——进行字符串地址的比较。
String s1="2023"——存放到常量池中;
String s1=new String("2003");——在堆中生成地址;
9.语句 “int a[ ] = { 3, 9, 8};”属于数组的 (D) 初始化。
A.动态
B.无状态
C.拟态
D.静态
【考点:数组的初始化形式】
- 静态初始化:在定义数组的同时,为数组元素赋初值。
int[] arr1 = {1, 2, 3}; // 声明一个int类型数组,元素为1、2、3
String[] arr2 = {"hello", "world"}; // 声明一个String类型数组,元素为"hello"、"world"
- 动态初始化:只指定数组的长度,而不指定数组元素的值,数组元素的默认值为0(对于基本类型)或null(对于引用类型)。在声明数组后,再为数组元素赋值。
int[] arr1 = new int[3]; // 声明一个int类型数组,长度为3
arr1[0] = 1; // 为数组第一个元素赋值
arr1[1] = 2; // 为数组第二个元素赋值
arr1[2] = 3; // 为数组第三个元素赋值
- 静态初始化和动态初始化结合使用:
int[] arr = new int[]{1, 2, 3};
- Java 8中新增的Stream流方式——将一个数字流转换为数组。
int[] arr = Stream.of(1, 2, 3).mapToInt(Integer::intValue).toArray();
需要注意的是,Java中的数组是定长的,一旦定义长度后,就不能再改变长度。因此,在动态初始化时,只能指定长度,不能指定数组元素的值。如果需要为数组元素赋初值,必须使用静态初始化或静态初始化和动态初始化结合使用的方式。
10.Java中,按流传输基本单位,分为两种:字节流和字符流(Unicode)。字节流中抽象类:InputStream负责输入流,OutputStream负责( A )。
A.输出流
B.字符流
C.视频流
D.输入流
【考点:文件的输入输出流——这里放一张上课课件里的思维导图】
11. 创建线程可以通过继承( C )类和实现Runnable接口实现。
A.String
B.List
C.Thread
D.Collection
【考点:创建线程的方法——继承Thread类和实现Runnable接口】
继承Thread类步骤:
(1)创建一个继承Thread的子类,并重写run()方法,,该方法是线程的执行体,线程启动后会自动执行该方法中的代码。
public class MyThread extends Thread {
public MyThread(){
// 代码
}
public void run() {
//代码
}
}
(2) 创建MyThread的实例对象,然后调用start()方法启动线程
MyThread thread = new MyThread();
thread.start();
实现Runnable接口步骤:
(1)定义一个类,实现Runnable接口。重写Runnable接口中的run()方法
public class MyThread implements Runnable {
public void run() {
// 代码
}
}
(2)需要创建MyThread的实例对象,然后将该对象传递给Thread类的构造方法中,最后调用start()方法启动线程
MyThread myThread = new MyThread();
Thread thread = new Thread(myThread);
thread.start();
12. Java应用程序中的静态方法用关键字(B)来声明。
A.const
B.static
C.public
D.final
【考点:static关键字——被static修饰 的方法可以用类去调用,无需再创建对象去调用
13. 数组一般要经过声明、创建、初始化等操作才能使用,初始化操作分为静态初始化和(_C_)初始化
A.拟态
B.自动
C.动态
D.无状态
【考点:数组的初始化操作——看第四题】
14.(B) 是类中的一种特殊方法,它没有返回值类型,其名称与类名称相同,主要作用是初始化新创建的对象。
A.测试方法
B.构造方法
C.销毁方法
D.析构方法
【考点——构造方法的性质】
15.使用 (A)关键字声明的方法就称为抽象方法。抽象方法必须声明在抽象类中,但抽象类可以没有抽象方法,可以包含具体方法。
A.abstract
B.final
C.class
D.static
【考点——abstract关键字】
16. Java处理异常时,不管异常被不被处理,哪个块中(C)的代码一定会被执行?
A.final
B.try
C.finally
D.catch
【考点——异常处理】
try {
// 可能发生异常的代码
} catch (Exception e) {
// 异常处理代码
} finally {
// 一定会执行的代码,例如关闭文件或释放资源等
}
17. 面向对象程序设计的三大特征是:封装、(D)、多态。
A.传递
B.重写
C.覆盖
D.继承
【考点——面向对象的三大特征】
18. 在Java中,(C)类是类层次结构的根类,所有的类的默认父类都是该类。
A.system
B.super
C.object
D.test
【考点——object】
在Java中,所有类的默认父类是Object类。Object类是类层次结构的根类,它包含所有对象都具有的通用方法,例如equals()、hashCode()、toString()等
19.Inputstream类表示8位的(C)。
A.输入字符流
B.输入字节流
C.输出字节流
D.输出字符流
【考点——文件的输入输出流——(回顾第10题)】
20.在Java中为使用JDBC提供了一系列的概念,并有专门的类和接口与之对应。其中用来执行查询和更新操作的是(D)
A.ResultSet
B.DriverManager
C.Connection
D.Statement
【考点——数据库连接主要步骤之一——(回顾第2题)】
21.异常处理是由try、(D) 和finally块三个关键字所组成的程序块。
A.final
B.teach
C.default
D.Catch
22. 接口是抽象方法和常量值的定义的集合,使用 (C) 关键字定义接口。
A.static
B.abstract
C.interface
D.class
【考点:接口】
- 接口可以看做是一种特殊的抽象类,所有的方法都是抽象方法,方法体为空。
- 接口使用
interface
关键字定义。 - 接口可以被类实现,关键字是implements。
- 接口中的方法默认为
public abstract
,不允许定义成员变量,但允许定义常量。 - 接口可以继承多个接口,形成接口的继承关系。在Java 8开始,接口可以定义默认方法和静态方法,这些方法可以有自己的实现。
- 接口的主要作用是实现类之间的解耦。通过定义方法的签名,接口使得不同的实现类可以提供不同的实现,从而在程序设计中提高了灵活性和可扩展性。在某些特定的场景中,接口还可以用作回调函数的实现。
- 使用接口可以帮助我们在代码设计和软件架构上做出良好的决策,提高代码的可重用性和可维护性。
23.Java通过java.io包中File类的众多方法来实现文件I/O操作。下面哪个方法 指定路径创建File对象 ?(C)
A.GetFile(String pathname)
B.GetPath(String pathname)
C.File(String pathname)
D.CPath(String pathname)
【考点:File对象创建的形式】
File file = new File("file.txt"); // 相对路径
File file = new File("/home/username/file.txt"); // 绝对路径
24.Java的集合接口框架中, ( A )接口,(又称列表)是一种有序集合,也称为序列;它允许存在重复的元素。
A.list
B.array
C.tree
D.map
【考点——集合接口框架——list】
Collection
:表示一组元素,可能包括重复元素。
Set
:表示一组不包含重复元素的元素。
List
:表示一个有序的元素序列,可以包含重复元素。
Queue
:表示一组按特定顺序排列的元素,通常使用队列或优先级队列实现。
Deque
:表示一个双端队列,支持在队列的两端添加和删除元素。
(1)实现 Collection
接口的类称为集合类。常见的集合类有:
ArrayList
:基于数组实现的可动态扩容的列表。LinkedList
:基于链表实现的列表,支持在任意位置插入和删除元素。HashSet
:基于哈希表实现的无序集合类。TreeSet
:基于红黑树实现的有序集合类。LinkedHashSet
:基于哈希表和链表实现的有序集合类。
(2)Map
接口表示映射,即一组键/值对。与 Collection
系列接口不同,Map
接口并不继承自 Collection
接口,而是独立存在的。Map
接口的实现类包括:
HashMap
:基于哈希表实现的无序映射。TreeMap
:基于红黑树实现的有序映射。LinkedHashMap
:基于哈希表和链表实现的有序映射。
25. 泛型将原本确定不变的数据类型参数化。其本质是参数化类型,即所操作的数据类型被指定为一个参数,示例: List <String> list = new ArrayList<String>,下面说法错误的是(A)
A.可以往集合添加整型数字
B.从集合取元素出来自动转换为String类型
C.提高程序的安全性、可维护性、可靠性
D.这种泛型集合里面允许存放重复的元素
【考点:泛型】
泛型可以让类、接口和方法在定义时不指定具体使用的数据类型,而在使用时再确定数据类型
作用:
-
类型安全:泛型可以在编译期间检查类型,避免了运行时类型转换错误的问题。
-
可读性和重用性:泛型代码比非泛型代码更易读且更容易重用,可以减少代码量。
-
高效性:泛型可以消除类型转换的开销,因为在编译时会将泛型代码转换成具体的类型。
注意:
-
泛型类型参数不能是基本数据类型,只能是类或接口类型。
-
泛型实例化时,类字面量后面需要带上尖括号,并在尖括号中指定具体的类型参数。在使用Diamond语法时
<>
可以省略。 -
泛型类型擦除:在泛型代码被编译成字节码后,泛型类型参数都会被擦除掉,变成了普通的类或接口类型。这意味着在运行时无法获取泛型类型参数的信息。
26. Java允许在一个类的内部再定义一个不命名其它的类,这个类称为(A) 。
A.匿名内部类
B.外部类
C.起名内部类
D.异常类
【考点:匿名内部类】
28. Swing包含一套图形对象,用来辅助窗体完成与用户的互交功能,组件通常要添加到容器中。下面哪个不是Swing组件?(D)
A.JTextArea
B.JTextField
C.JRadioButton
D.InputStream
29. 为了让一个类不允许被继承,可以用(C)关键字修饰这个类。
A.private
B.class
C.final
D.public
30.( B )是Java Runtime Environment的简称,即Java运行环境。
A.JDK
B.JRE
C.JAVAC
D.JPA
31. Java的数据类型分两大类:基本数据类型和(C)
A.字符类型
B.数字类型
C.引用数据类型
D.字符串类型
32. 事件委托模型中,要让事件侦听器能够处理相应事件,必须向(A )注册,并实现相应侦听接口的所有方法。
A.事件源
B.事件
C.抽象类
D.监听器实例
【考点:事件处理】
拓展:
(1)事件委托模型三要素
事件(Event)——用对象表示,它描述了发生什么事情。
事件源(Event source)——产生事件的组件。当这个事件源内部状态以某种方式改变时,就产生了相应事件对象。
事件处理(Event Process)——事件发生之后,要做什么事情
(2)事件处理的实现三步骤:
- 创建侦听器类
class MyListener implements ActionListener {
// 重写ActionListener接口中的事件处理方法actionPerformed()
public void actionPerformed(ActionEvent e) {
......
}
}
- 创建侦听器对象
MyListener listener = new MyListener();
- 事件源注册侦听器对象
button.addActionListener(listener);
(3)在Java中,通过事件源对象的addXXXListener()
方法来向其注册事件监听器。例如,要向一个按钮注册点击事件监听器,可以使用按钮的addActionListener()
方法。
33. 在控制台的命令行模式中,执行 Java 字节码文件命令的是(C)
A.javac
B.jdk
C.java
D.jre
【考点:JAVA概述】
- javac(编译)是Java编译器的命令行工具,用于将Java源代码编译成Java字节码文件。它的作用是将Java源代码转换为平台无关的字节码,以便在Java虚拟机(JVM)中运行。
- JDK (Java Development Kit) 是Java开发工具包,包含了Java编译器、Java虚拟机、Java类库、开发工具和Java API文档等工具和资源。它的作用是为Java开发人员提供一个完整的开发环境,使他们可以开发、测试和部署Java应用程序和Java Applet。
- java(运行 )是Java源代码文件的扩展名,它包含了Java程序的源代码。Java程序员使用文本编辑器编写Java源代码,并将其保存为.java文件。然后使用Java编译器将.java文件编译成Java字节码文件。
- JRE (Java Runtime Environment) 是Java运行时环境,包含了Java虚拟机(JVM)和Java类库。它的作用是为Java应用程序提供运行环境,使Java应用程序能够在计算机上运行。与JDK不同,JRE不包含Java编译器和其他开发工具。
34. 如果容器组件p的布局是BorderLayout,则在p的下边中添加一个按钮b,应该使用的语句是(C)
A.p.add(b);
B.p.add(b,"North");
C.p.add(b,"South");
D.b.add(p,"North");
35. Java类中对象的类型转换有两种方式:( B ):称为向上类型转换。
A.子类转换成子类
B.父类转换成子类
C.父类转换成父类
D.子类转换成父类