Java基础复习题+知识点概括(上篇)

1.下列描述中,(  )不属于finally 语句应该执行的功能

A.释放资源     B.关闭文件     C. 分配资源     D. 关闭数据库

捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口。可以执行资源释放、确保最终执行、清理工作等功能。

2.Fileoutputstream 类的父类是(  )。

A.File          B.FileOutput          C.OutputStream              D.InputStream

在 Java 中,FileOutputStream 类的直接父类是 OutputStreamFileOutputStream 是用于将数据写入文件的输出流类,而 OutputStream 是所有输出流类的抽象父类。

因此,FileOutputStream 继承了 OutputStream 中定义的一些基本方法,例如 write() 方法用于写入字节数据。

3.下列属于 Java 语言的特点的一项是(  )。

A. 运算符重载   B. 类间多重继承     C.指针操作     D. 垃圾回收

A. 运算符重载:Java 不支持运算符重载。在 Java 中,运算符有固定的语义,不能根据操作数的类型或上下文而改变其含义。

B. 类间多重继承:Java 不支持类的多重继承。一个类只能直接继承一个类,这是为了避免多继承可能带来的复杂性和问题。

C. 指针操作:Java 是一门相对安全的语言,不直接支持指针操作。指针可以导致许多常见的错误,如悬挂指针、内存泄漏等。Java 采用引用来代替指针,通过引用访问对象而不是直接操纵内存地址。

D. 垃圾回收:Java 是一门面向对象的编程语言,其中有一项重要的特点是自动内存管理和垃圾回收。在 Java 中,程序员不需要手动管理内存,因为Java的垃圾回收器会负责自动检测和释放不再被程序引用的内存,从而避免了内存泄漏的问题。运算符重载、类间多重继承以及指针操作都不是 Java 的特点。

4.下列关于byte 类型的说法中,正确的一个是(  )。

A.byte 类型的长度为8位

B.byte 类型可以自动转换为所有的简单类型

C.128 是合法的 byte 类型数值

D.byte 存储顺序是从高到低

A. byte 类型的长度为8位:byte 类型在 Java 中是8位的,即占用8个比特(bit)的空间。byte 类型的取值范围是 -128 到 127(包括 -128 和 127),因为一个字节的有符号整数可以表示的范围是从 -2^7 到 2^7 - 1。

B. byte 类型不可以自动转换为所有的简单类型。可以自动转换为 shortintlongfloatdouble 类型,但不可以自动转换为 char

C. byte 类型的范围是 -128 到 127。

D. byte 存储顺序是从低位到高位,而不是从高到低。在一个字节中,最低有效位(最右边的位)存储在最低的内存地址,最高有效位(最左边的位)存储在最高的内存地址。

5.下列选项中,不属于Java虚拟机执行特点的一项是(  )。

A. 异常处理     B. 多线程       C. 动态链接     D. 简单易学

Java虚拟机的特点:

  1. 字节码执行: Java源代码编译后生成字节码,而不是本地机器代码。JVM通过解释器或即时编译器将这些字节码转换为机器代码执行。这使得Java程序具有跨平台性,因为相同的字节码可以在任何支持Java的平台上运行。

  2. 垃圾回收: JVM具有自动内存管理机制,包括垃圾回收器,用于自动回收不再被程序引用的内存。这减轻了程序员的负担,避免了内存泄漏等问题。

  3. 动态内存分配: Java程序在运行时可以动态分配内存,而不需要程序员手动管理内存。这使得Java程序更容易编写和维护,同时减少了内存错误的可能性。

  4. 异常处理: JVM提供了强大的异常处理机制,使程序员能够更容易地识别和处理运行时错误。异常可以在程序的任何地方被抛出,并且可以被程序的某个地方捕获和处理。

  5. 即时编译(JIT): JVM具有即时编译器,它能够在运行时将热点代码(经常执行的代码)编译成本地机器代码,从而提高程序的执行速度。这种优化有助于减少解释执行的性能损失。

  6. 多线程支持: JVM提供了对多线程的良好支持,使得Java程序可以更轻松地实现并发操作。Java程序员可以使用内置的线程机制或使用Java.util.concurrent包提供的工具。

  7. 安全性: JVM提供了一系列安全性机制,如沙箱安全模型,通过控制访问资源和执行权限来增强程序的安全性。这有助于防止恶意代码对系统造成危害。

6.Java 中以下(  )集合类可以确保元素的唯一性。

A.ArrayList            B.LinkedList       C.HashSet       D.TreeMap

在 Java 中,Set 接口及其实现类可以确保元素的唯一性。Set 不允许包含重复的元素,每个元素都必须是唯一的。

常见的 Set 实现类有:

  1. HashSet: 基于哈希表实现,不保证元素的顺序,但提供快速的查找速度。由于其使用哈希算法,元素的唯一性是通过哈希码来保证的。

  2. LinkedHashSet:HashSet 的基础上,维护了一个双向链表,可以按照插入顺序迭代元素。

  3. TreeSet: 基于红黑树实现,可以确保元素有序,同时具有唯一性。元素按照升序或指定的排序顺序进行排列。

 7.下面(  )方法可以用于启动一个线程。

A.start()                   B.run()                    C.execute()              D.begin()

在 Java 中,启动一个新线程需要调用 start() 方法。这个方法会在新线程中调用 run() 方法,从而执行线程的任务。直接调用 run() 方法只会在当前线程中执行,而不会启动新的线程。execute() 方法通常与线程池相关,用于将任务提交给线程池执行。它是 Executor 接口中定义的方法,而不是 Thread 类的方法。在多线程编程中,使用线程池可以更有效地管理和调度线程。

8.在Java 中,可用于读取文件的类是(  )。

A.FileReader      B.FileLoader    C.FileProcessor    D.FileReaderStream

FileReader 类是用于读取字符文件的类。它继承自 InputStreamReader,并提供了一些方法来读取文件的字符数据。通常用于读取文本文件中的字符内容。

9.在成员方法的访问控制修饰符中,规定访问权限包含该类自身,同包的其它类和其他包 的该类子类的修饰符是(  )。

A.默认         B.protected             C.private        D.public

Protected 修饰符规定允许该类自身、同包的其他类以及其他包中的该类的子类访问该成员方法。

默认的访问级别是包级私有。这意味着只有在同一个包中的其他类可以访问该成员。

private 修饰的成员方法只能在声明它们的类内部访问。其他类、同包的类均无法访问。

public 修饰的成员方法可以被任何类访问,无论是否在同一包中。这是最宽松的访问权限,任何类都可以访问这些成员。

10.下面关于类和对象的叙述,正确的是(  )。

A.Java 的类分为两大部分:系统定义的类和用户自定义的类

B.类的静态属性和全局变量的概念完全一样,只是表达形式不同

C. 类的成员至少有一个属性和一个方法

D.类是对象的实例化

A. Java 的类分为两大部分:系统定义的类和用户自定义的类。这些类提供了程序所需的各种功能。

B. 静态属性是属于类的属性,而全局变量通常是在类中但不属于类的属性,它通常是对象的属性。静态属性通过类名访问,而全局变量需要通过对象实例访问。

C. 一个类的成员可以包括属性、方法、构造函数等,但并不要求至少有一个属性和一个方法。一个类可以没有属性或方法,具体取决于设计的需要。

D.类定义了对象的结构和行为,对象是类的实例化。

11.在 Java 中,可用于执行 SQL 语句的是(  )。

A.ResultSet              B.Statement         C.Connection         D.SQLSet

在Java中,用于执行SQL语句的主要类和接口来自java.sql包,主要有:

  1. Statement: 用于执行静态SQL语句,并返回它所生成结果的对象。

  2. PreparedStatement: 继承自Statement,用于执行预编译的SQL语句。与Statement相比,PreparedStatement实例可以提供SQL注入攻击的防护,并且通常比Statement更高效。

  3. CallableStatement: 继承自PreparedStatement,用于执行数据库中的存储过程。

12.下列关于抽象类的描述中,错误的是(  )。

A. 抽象类是用修饰符 abstract 说明的    B. 抽象类是不可以定义对象的

C. 抽象类是不可以有构造方法的        D. 抽象类通常要有它的子类

  • A. 在Java中,抽象类是通过abstract关键字定义的。
  • B. 抽象类是不可以定义对象的,不能直接实例化。
  • C.抽象类是可以有构造方法的。虽然不能直接实例化抽象类来创建对象,但抽象类可以包含构造方法。这个构造方法可以在派生类(子类)的构造方法中被调用,以便执行抽象类中的初始化操作。接口不能有构造方法:接口的主要目的是定义一个类必须实现的方法,而不是如何实现这些方法。
  • D. 抽象类的主要目的是为了被其他类继承。虽然理论上可以有没有任何子类的抽象类,但这样做通常没有实际意义。
13.下列关于构造方法的叙述中,错误的是( )。

A. 构造方法名与类名必须相同         B. 构造方法没有返回值,且不用 void 声明

C. 构造方法只能通过 new 自动调用     D. 构造方法不可以重载,但可以继承

A. 构造方法的名称必须与其所在类的名称完全相同。

B. 构造方法不是普通方法,它不返回任何值,也不使用 void 或其他返回类型声明。

C. 构造方法是在创建类的新实例时自动调用的,通常通过使用 new 关键字来触发。

D. 构造方法是可以重载的,这意味着一个类可以有多个构造方法,只要它们的参数列表不同。另一方面,构造方法不可以继承。子类不能继承父类的构造方法,但子类的构造方法可以调用父类的构造方法。

14.编译Java 程序的命令文件名是(  )。

A.java                B.java.c             C.javac        D.appletviewer.exe

编译 Java 程序的命令是 javac

当你想要编译一个 Java 源代码文件(Example.java),你会使用如下命令:

javac Example.java

这个命令会生成 Java 字节码文件,通常是 .class 文件,这些文件随后可以被 Java 虚拟机(JVM)执行。

Expansion:怎么在命令提示符中运行Java程序:

写程序→打开cmd→使用cd定位到Java文件位置→使用javac编译Java程序

javac Example.java

生成一个Example.class文件→使用java命令运行该文件

java Example

注意不带class尾缀→输出结果

15.Java 中 (  )处理多个异常类型。

A.使用多个 try-catch  块              B. 使用一个 try  块和多个 catch  块

C. 使用一个 catch  块和多个 try  块     D. 使用 throw 关键字

一个 catch 块必须对应一个 try 块,要处理多个异常类型最好使用try-多个catch块。

throw 关键字用于抛出异常,而不是处理异常。处理异常通常是使用 try-catch 块完成的。

16.Java 中用于终止当前线程并释放其资源的方法是(  )。

A.sleep()                 B.exit)            C.kill()           D.interrupt()

用于终止当前线程并释放其资源的方法是 interrupt()。

A. sleep():这是一个静态方法,使当前执行的线程暂停执行指定的时间段,但并不释放任何资源或终止线程。

B. exit():这不是 Java 线程控制的标准方法。在 Java 中,System.exit() 用于终止整个程序,而不是单个线程。

C. kill():在 Java 中,没有名为 kill() 的标准方法用于线程。

D. interrupt():这个方法用于中断线程。当线程在 sleep, wait, join 等操作中时,interrupt() 会导致这些阻塞操作抛出 InterruptedException。被中断的线程可以选择如何响应中断请求。

17.Java 中 (  )关键字用于防止子类对某个方法的重写。

A.override            B.final                  C.static                    D.const

 A. override: 这不是一个用来限制方法重写的关键字。实际上,@Override 注解用于指示某个方法打算重写超类中的方法。它主要用于编译时检查,确保方法确实重写了超类中的方法。

B. final: 这个关键字用于声明方法不能被重写。如果你在一个方法前面加上 final 关键字,那么任何继承此类的子类都不能重写这个方法。

C. static: 虽然静态方法不能被重写(它们可以被隐藏),但 static 关键字的主要目的是指示一个方法或变量属于类本身,而不是类的实例。

D. const: 这实际上不是 Java 语言中的关键字。

18.在Java中,用于建立客户端和服务器通信连接的类是(  )

A.ServerSocket         B.Socket         C.DatagramSocket          D.InetAddress

A. ServerSocket用于服务器端。ServerSocket 在服务器端监听客户端的连接请求。当 ServerSocket 接受一个连接请求时,它会返回一个 Socket 对象来建立服务器端和客户端之间的通信。

B. Socket用于创建客户端套接字(Socket)。客户端使用 Socket 类连接到服务器。一旦连接建立,客户端和服务器就可以通过这个 Socket 实例进行通信。

C. DatagramSocket用于发送和接收数据报包,用于无连接的数据传输(例如 UDP 协议)。它不是用来建立客户端和服务器之间的持久连接的。

D. InetAddress用于封装 IP 地址。它本身并不用于建立客户端和服务器之间的连接。

19.以下关于构造方法及其重载的说法正确的是(  )。

A. 类定义了构造方法, Java 就不会自动为该类创建默认的不带参数的构造方法

B. 构造方法不能对私有变量初始化

C.一个类中含有几个构造方法,称为构造方法的重载。对于重载的方法,其参数列表可以 相同。

D. 重载的构造方法之间可以通过关键字this 在构造方法中的任意位置相互调用 

A. 如果为一个类显式定义了至少一个构造方法(不管是带参数的还是不带参数的),Java 编译器就不会自动为该类提供默认的无参构造方法。

B. 构造方法完全可以访问和初始化类的私有变量。实际上,初始化私有变量是构造方法的常见用途之一。

C.重载的方法,包括构造方法,必须有不同的参数列表(即参数的类型、数量或顺序不同)。如果两个方法的参数列表相同,则它们不是重载的关系。

D. 使用 this 关键字来调用一个类的另一个构造方法必须是构造方法中的第一个语句。

20.下列常见的系统定义的异常中, (  )是数组越界异常。

A.ArrayIndexOutOfBoundsException          B.IOException

C.NullPointerException                                 D.ArithmeticException

数组越界异常由 ArrayIndexOutOfBoundsException 表示。当尝试访问数组的一个不存在的索引时(例如,索引小于 0 或大于等于数组的长度),会抛出这个异常。

IOException与异常与输入输出操作有关,通常在处理文件、网络通信等过程中出现错误时抛出。

NullPointerException:当尝试使用 null 引用访问对象成员(如方法或属性)时,会抛出这个异常。

ArithmeticException:当异常与数学运算错误有关,如除以零时会抛出这个异常。

21.下列关于变量的叙述,错误的是(  )。

A. 局部变量在使用前必须被初始化

B.实例变量是类的成员变量

C. 实例变量用关键字 static 声明

D. 在方法中定义的局部变量在该方法被执行时创建

A. 局部变量在使用前必须被初始化:这是正确的。在 Java 中,局部变量不会自动初始化,必须在使用前显式地初始化。

B. 实例变量是类的成员变量:这也是正确的。实例变量是定义在类中但在方法、构造方法或任何块之外的变量。它们是类的成员变量,每个类的实例都有自己的一套实例变量。

C. 使用 static 关键字声明的变量是静态变量,不是实例变量。静态变量是类的成员,而不是任何类实例的成员。所有实例共享同一个静态变量。

D. 在方法中定义的局部变量是在方法调用时创建的,并且当方法执行结束后,这些局部变量会被销毁。

22.下面关于ArrayList 的描述中,错误的是(  )。

A.ArrayList 是 List 接口的一个实现类。

B.ArrayList 内部的数据存储结构是数组

C.ArrayList 不太适合做大量的增删操作

D.使用 ArrayList 集合既不适合增删操作,也不适合随机访问操作

ArrayListList 接口的一个常用实现,提供了动态数组的功能。ArrayList 内部基于数组实现,这使得它对于随机访问操作(即通过索引直接访问元素)非常高效。数组允许快速的定位和读取操作。

23.以下关于foreach 的说法中,  (   )是错误的。

A.使用 foreach 遍历集合时,可以对元素进行修改。

B.foreach 可以对数组进行遍历。

C.foreach 可以对集合进行遍历。

D.foreach 循环是一种更加简洁的 for 循环,也称增强 for 循环。

 使用 foreach 遍历集合时,不能直接对集合的元素进行修改。尽管在 foreach 循环中可以访问集合的元素,但是在修改元素时会抛出 ConcurrentModificationException 异常。这是因为 foreach 循环在迭代过程中使用了迭代器,而直接修改集合可能导致迭代器的不一致性。如果需要修改集合中的元素,建议使用迭代器的 remove() 方法。

你可能感兴趣的:(Java复习,java,开发语言)