java期末复习题

在这里插入图片描述
1.任何一个Java程序都默认引入一个包,这个包的名字是________________。

正确答案:java.lang

Java程序默认引入的包是java.lang包。这个包是Java语言的核心,它提供了Java中的基础类,包括基本Object类、Class类、String类、基本类型的包装类、基本的数学类等等最基本的类。我们使用java.lang包下的类时,是不需要import类的,默认导入。

2.关于下面程序片段,结论正确的是( )。
String a =”Java”;
String b=”Java”;
String x=”Ja”;
String y=”va”;
String c=x+y;
A.a和b指向同一个实例对象,a和c指向同一个实例对象
B.a和b指向同一个实例对象,a和c不指向同一个实例对象
C.a和b不指向同一个实例对象,a和c指向同一个实例对象
D.a和b不指向同一个实例对象,a和c不指向同一个实例对象

正确答案:B

3.关于多态性的说法正确的是( )。
A. 一个类中不能有同名的方法
B. 子类中不能有和父类中同名的方法
C. 子类中可以有和父类中同名且参数相同的方法
D. 多态性就是方法的名字可以一样,但返回的类型必须不一样

正确答案:C

4.将类的成员的访问权限设置为默认的,则该成员被( )
A.同一包中的类访问
B.其他包中的类访问
C.所有的类访问
D.所有的类的子类访问

正确答案:A

5.有关类的说法,正确的是( )。
A.类具有封装性,所以类的数据是不能被访问的
B.类具有封装性,但可以通过类的公共接口访问类中的数据
C.声明一个类时,必须使用public修饰符
D.每个类中必须有main方法,否则程序无法运行

正确答案:B

6.编译一个定义了两个类和三个方法的Java源文件,总共会生成( )个字节码文件。
A.5个字节码文件,以“.java”为扩展名
B.2个字节码文件,以“.java”为扩展名
C.5个字节码文件,以“.class”为扩展名
D.2个字节码文件,以“.class”为扩展名

正确答案:D

7.下面( )赋值语句不会出现编译警告或错误的是。
A.float f =1.3;
B.char c=”a”;
C.byte b=257;
D.int i=10;

正确答案:D

选项A. float f =1.3; 后面的1.3后的f要加,否则会发生自动类型转换换成double类型

8.字符流和字节流的区别在于( )。
A.前者带有缓冲,后者没有
B.前者是块读写,后者是字节读写
C.二者没有区别,可以互换使用
D.每次读写的字节数不同

正确答案:D

9.Java语言中,String str=”123456789”,System.out.println(str.indexOf(“5”)),输出结果是( )。
A.6 B.5 C.4 D.3

正确答案:C

在字符串 “123456789” 中,字符 ‘5’ 的索引位置为 4。因为在 Java 中索引是从 0 开始计数的,所以字符 ‘5’ 在字符串中的位置是第 5 个位置,对应的索引值为 4。因此,这段代码会输出 4。

10.接口和抽象类的用法区别是什么?
(1)接口中只能包含抽象方法,不能包含普通方法;抽象类中可以包含普通方法。
(2)接口中不能定义静态方法;抽象类中可以定义静态方法。
(3)接口中只能定义静态常量属性,不能定义普通属性;抽象类里可以定义静态常量属性,也可以定义普通属性。
(4)接口不能包含构造器;抽象类可以包含构造器,抽象类里的构造器为了让其子类调用并完成初始化操作。
(5)接口中不能包含初始化块,但抽象类可以包含初始化块。
(6)一个类最多只能有一个直接父类,包括抽象类;但是一个类可以实现多个接口。

11.ObjectOutputStream是_______。

正确答案:对象流

12.Java中的布局管理器,下列说法错误的是( )。
A.FlowLayout以由上到下的方式从左到右排列组件
B.BorderLayout使用“东”、“西”,“南”,“北”,“居中”来指定组件的位置
C.GridLayout可以创建网格布局,网格布局中各组件的大小可以任意调整
D.可以通过容器的setLayout方法为容器指定布局管理器

正确答案:C

GridLayout 是一种布局管理器,它将组件排列成网格状的布局。但是,GridLayout 中各个单元格的大小是相等的,不能自由调整。每个单元格中放置的组件大小是相同的,且随着窗口大小的变化,各个单元格的大小也会相应变化。

13.Java中,关于HashMap类的描述,错误的是( )。
A.HashMap使用键/值的形式保存数据
B.HashMap能够保证其中元素的顺序
C.HashMap允许将null用作键
D.HashMap允许将null用作值

正确答案:B

14.Frame对象默认的布局管理器是( )。
A.FlowLayout B. BorderLayout C. CardLayout D.null

正确答案:B

15.一般造成死锁必须同时满足的4个条件是?

(1)互斥条件:至少有一个资源是不可共享的,即一次只能由一个进程使用。
(2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3)非抢占条件:进程已获得的资源在未使用完之前,不能被强行剥夺,只能由持有它的进程自己释放。
(4)循环等待条件:若干进程之间形成一种头尾相接的等待关系,即存在一个进程等待序列,每个进程都在等待下一个进程所持有的资源。

16.关于this和super的说法正确的是( )。
A.都可以用在main()方法中
B.都是指一个内存地址
C.不能用在main()方法中
D.意义相同

正确答案:C

在Java中,this 和 super 关键字都不能直接在 main() 方法中使用。main() 方法是一个静态方法,是程序的入口点,它被声明为 static,意味着它与任何对象实例无关。

17.Java中的字符类型采用的是Unicode编码方案,每个Unicode码占用( )个比特位。
A.8 B.16 C.32 D.64

正确答案:B

18。什么是重载?什么是覆盖?它们二者之间有怎样的区别与联系?

重载是指在同一个类中定义了多个方法名相同,参数列表不同(参数顺序、个数、类型)的成员方法;
覆盖则是指有继承关系的子类中,定义与父类方法名相同,参数列表相同(参数顺序、个数、类型)的成员方法;
重载和覆盖的区别在于:重载是存在于同一个类的不同方法之间的多态关系,它们主要通过参数列表中的参数个数、参数的数据类型和参数的顺序等方面的不同来区分;而覆盖是存在于父类与子类之间的多态关系,它们在引用时通过指出所属类的类名来区分。

19.下列有关HashSet集合的描述中,错误的是( )
A. 向HashSet存入对象时,对象的equals()方法一定会被执行
B. HashSet是Set接口的一个实现类
C. 向HashSet存入对象时,对象一般会重写hashCode()和equals()方法
D. HashSet存储的元素是不可重复的

正确答案:A

在向 HashSet 存入对象时,并不一定会立即执行对象的 equals() 方法。当你尝试向 HashSet 存入一个对象时,首先会调用该对象的 hashCode() 方法来确定该对象的哈希值。然后,HashSet会根据该哈希值确定存储位置,并与已有元素的哈希值进行比较。

20.使用JDBC查询数据库时,如果结果集中没有数据,则?( )
A.获得的ResultSet对象为null
B.获得的ResultSet对象如果调用next()方法会抛出异常
C.获得的ResultSet对象如果调用next()方法会返回false
D.获得的ResultSet对象如果调用getRow()方法会返回-1

正确答案:C

21.关于数据库具有的特征不正确的是( )。
A.原子性 B.一致性
C.唯一性 D.持久性

正确答案:C

22.当对数据库中的数据进行增、删、改操作时,需要调用______________方法。
当对数据库中的数据进行查询操作时,需要调用______________方法。

正确答案:executeUpdate()
executeQuery()

23.对JDK描述错误的是( )。
A.运行Java程序只要有JRE环境就可以,不一定需要全部JDK的功能
B.JDK中包括JVM、核心类库、Java开发工具(java,javac)等
C.JDK本身也是平台无关的,不同的操作系统安装的JDK是一样的
D.JDK的全称是 Java Development Kit

正确答案:C

24.以下( )字符串是 Java 中合法的标识符。
A.super
B.3number
C.#number
D.$number

正确答案:D

25.请问,为了使一个名为MyClass的public类成功编译,需要满足以下哪些条件?
A.MyClass必须定义一个正确的main()方法
B.MyClass必须定义在MyClass.java源文件中
C.MyClass必须定义在MyClass包中
D.MyClass类必须被导入

正确答案:B

26.以下哪个标识符不是Java语言的合法用户标识符( )。
A._double
B.$123
C.Main
D.class

正确答案:D

27.下面概念中,不属于面向对象编程范畴的是( )。
A.对象
B.继承
C.类
D.过程调用

正确答案:D

28.下列代码运行结果为:

public class TestClass {
    public static void main(String args[]) {
        String str = new String("World");
        char[] ch = { 'H', 'e', 'l', 'l', 'o' };
        change(str, ch);
        System.out.println(str + " and " + new String(ch));
    }

    public static void change(String str, char ch[])
    {
            str="Changed"; ch[0]='C';
    }
}

A.World and Hello
B.World and Cello
C.Changed and Hello
D.Changed and Cello

正确答案:B

在 Java 中,字符串是不可变的,所以在 change 方法中对 str 进行重新赋值不会影响原始调用中的字符串。当你尝试在 change 方法中更改 str 时,实际上是创建了一个新的字符串对象,并将 str 指向了这个新创建的字符串,而原始的 str 对象并没有改变。
但是,对于字符数组 ch 来说,它是可变的。所以,当你在 change 方法中更改了 ch[0] 的值,这个更改是在原始数组上进行的,因此打印 new String(ch) 的时候会得到更改后的值。

29.关于字符串的方法,如下代码执行结果是( )。

String str1 = "[email protected]";
String str2 = str1.toLowerCase();
System.out.println(str2);
System.out.println(str1);
System.out.println(str1 == str2);

A.
[email protected]
[email protected]
true

B.
[email protected]
[email protected]
false

C.
[email protected]
[email protected]
true

D.
[email protected]
[email protected]
false

正确答案:A

30.关于字符串的方法,如下代码执行结果是( )。

String str1 = "abcd"; 
String str2="sdut";
System.out.println(str1.compareTo(str2)>0);

A.true
B.false
C.1
D.-1

正确答案:B

31.关于字符串对象的比较,==用于比较字符串对象的( )是否相同;equals()方法用于比较字符串对象的( )是否相同。
A.存储地址 字符序列
B.存储地址 存储地址
C.字符序列 存储地址
D.字符序列 字符序列

正确答案:A

32.以下不属于基本数据类型的有( )。
A. char B. String
C. double D. int

正确答案:B

33.在Java中( )。
A) 一个子类可以有多个父类,一个父类也可以有多个子类
B) 一个子类可以有多个父类,但一个父类只可以有一个子类
C) 一个子类可以有一个父类,但一个父类可以有多个子类
D) 上述说法都不对

正确答案:C

34.下列关于int类型变量的定义,错误的是( )。
A: int a=10; B: int b,c=20;
C: int d=e=30; D: int f=40;

正确答案:C

  1. 当一个类中成员变量和局部变量重名时,可以使用哪个关键字进行区分( )
    A: super B: this C: public D: true

正确答案:B

36.以下关于异常说法正确的是( )。
A)编译异常就是指Exception以及其子类
B)编译异常如果产生,可以不用处理
C)编译异常指的就是Error
D)编译异常如果产生,必须处理,要么捕获,要么抛出

正确答案:D

37.下列关于类的叙述不正确的是( )。
A. 类的定义格式为:类修饰符 class 类名 extends 父类 implements 接口{…}
B. 类名可以是任意的符号
C. class是关键字,用来定义类
D. 类的实现包括两部分:类声明和类体

正确答案:B

38.下列哪个叙述是正确的?( )
A. Java应用程序由若干个类所构成,这些类必须在一个源文件中
B. Java应用程序由若干个类所构成,这些类可以在一个源文件中,也可以分布在
若干个源文件中,其中必须有一个源文件含有主类
C. Java源文件必须含有主类
D. Java源文件如果含有主类,主类必须是public类

正确答案:B

39.Java语言中,集合类都位于哪个包中( )。
A) java.util B)java.lang
C) java.array D)java.collections

正确答案:A

40.下列关于方法和变量的叙述,哪个叙述是正确的?( )
A. 方法里的局部变量可以用修饰符来修饰
B. 如果方法无返回值,则方法的返回类型可以不写
C. 成员变量与局部变量都可以在类中声明
D. 如果方法有返回值,则在方法体内必须有return语句

正确答案:D

41.创建一个文本框需要使用哪个类( )
A)JButton B)JTextField C)JComboBox D)JLabel

正确答案:B

42.在以下什么情况下,构造方法会被调用?( )
A)使用对象的变量时 B)调用对象方法时
C)创建对象时 D)类定义时

正确答案:C

43.在类的继承关系中,需要遵循以下哪个原则?( )
A. 不能继承 B. 单一
C. 双重 D. 多重

正确答案:B

44.下列关于构造方法的描述中,错误的是( )。
A)构造方法的方法名必须和类名一致
B)构造方法不能写返回值类型
C)构造方法可以重载
D)构造方法的访问权限必须和类的访问权限一致

正确答案:D

45.Statement接口中executeQuery()方法的返回值是( )。
A. Result B. int
C. Boolean D. ResultSet

正确答案:D

46.在下列Java语言的包中,提供图形界面构件的包是( )。
A. javax.swing B. java.io
C. java.net D. java.rmi

正确答案:A

47.下列选项,可用于存储数据库查询结果集的对象是( )。
A)Statement B)Connection
C)ResultSet D)PreparedStatement

正确答案:C

48.在Java中,如果在子类中定义某方法与其父类有相同的名称和参数。这种面向对象程序的特性称为( )。
A. 隐藏 B.重载 C. 重写 D. 封装

正确答案:C

49.在Java中,一个类可同时定义许多同名的方法,这些方法的形式参数个数、类型或顺序各不相同,传回的值也可以不相同。这种面向对象程序的特性称为( )。
A)隐藏 B)覆盖 C)封装 D)重载

正确答案:D

50.下列关于构造方法的叙述中,错误的是( )
A)Java语言规定构造方法名与类名必须相同
B)Java语言规定构造方法没有返回值,但不用void声明
C)Java语言规定构造方法不可以重载
D)Java语言规定构造方法只能通过new自动调用

正确答案:C

51.在使用interface声明一个接口时,接口中的方法默认使用( )进行修饰。
A、private B、protected C、private protected D、public abstract

正确答案:D

52.一个具体类实现接口时,需要重写接口中的( )
A: 成员变量
B: 局部变量
C: 抽象方法
D: 构造方法

正确答案:C

53.下列关于this的说法中,错误的是( )
A)this可以出现在任何方法中
B)在构造方法中,使用this调用构造方法的语句必须位于第一行,且只能出现一次
C)this关键字可以用于区分成员变量与局部变量
D)只能在构造方法中使用this调用其它的构造方法,不能在成员方法中使用

正确答案:AD

54.填空
(1)当方法中的返回值类型是 void 时,可以不写return语句
(2)假若x=5; y=9,则表达式x>y的逻辑值为 false
(3)Java中的异常分为两种,一种是 Exception ,另外一种是Error
(4)在Java中,类的实例是通过 new 关键字创建出来的。
(5)定义一个类的关键字是 class
(6)数组元素的下标总是从 0 开始。
(7)若x = 5,则表达式(x + 5)/3的值是 3
(8)Java的数据类型可以分为两大类: 基本数据类型引用数据类型
(9)面向对象程序设计的三大特征是封装继承多态
(10)接口是一个特殊的类,只由常量抽象方法 组成。
(11) Object 类是所有Java类的最高层父类。
(12)Java应用程序中 main() 方法很重要,是整个程序的入口。

55.程序阅读题

(1)阅读以下程序,给出运行结果。

class A{
public static void main(String args[]){
int j=0;
for( int i=1; i<=10; i++ ){
 			j=j+i;
}
System.out.println("j="+j);
}
}

运行结果是: j=55

(2)阅读以下程序,给出运行结果。

class Person{
	Person(){
       System.out.print("This is a person.");
	}
}
public class Student extends Person{
	Student (){
		System.out.print("This is a student");
    }
public static void main(String[] args){
    Student stu = new Student();
}
}

运行结果是: This is a person.This is a student

(3)阅读以下程序,给出运行结果。

public class Case{
public static void main(String args[]){
float x = 11;
float y = 4;
int z = (int) ( x%y ) ;
switch ( z ){
case 1:
     				x = x+1 ;
case 2:
     				x = x+2 ;
default :
     				x = x+3 ;
}
System.out.println(Value of x is :+ x );
}
}

运行结果是: Value of x is : 14.0

(4)阅读以下程序,给出运行结果。

class MultiCatch {
	public static void main(String args[]) {
		try {
			int a = args.length;
			int b = 44 / a;
			int c[] = { 2, 6 };
			c[44] = 100;
			System.out.println("b=" + b);
		} catch (ArithmeticException e) {
			System.out.println("除0异常");
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("数组超越边界异常");
		}finally {
			System.out.println("程序执行结束");
		}
}
}

运行结果是: 除0异常
程序执行结束

(5)

public class StarDemo {
	 public static void main(String[] args) {
	   for(int i=0;i<3;i++)
	  {
		  for(int j=0;j<=i;j++)
			  System.out.print("*");
		  System.out.println();
	  }
	}
}

运行结果是:

*
**
***

(6)写出程序运行结果。

class Point{      
  int x, y;  
  Point(int x, int y){ 
	  this.x=x; 	
	  this.y=y;  
	  System.out.println("父类构造函数被调用!");   
  }
} 
class Circle extends Point{
   int  radius;   
   Circle(int r, int x, int y){
	  super(x, y); 	  
	  this.radius=r;
	  System.out.println("子类构造函数被调用!");   
   }
} 
public class testInherence {
    public static void main(String args[ ]) {
		Circle  c1=new Circle(2,2,2);	
	}
} 

运行结果:

父类构造函数被调用!
子类构造函数被调用!

(7)请写出程序运行的结果。(5分)

public class AAA {
	public static void main(String[] args) {
		int  m = 0, n = 0,t = 1234;
	      try{  
	      		m = Integer.parseInt("6666");
	            n = Integer.parseInt("89ab"); 
	            t = 8888;  
	      }
	      catch(NumberFormatException e) {
	            System.out.println("发生异常");     
	      }
	      System.out.println("m=" + m + ",n= "+ n +",t="+t);
	}
}

运行结果:

发生异常
m=6666,n= 0,t=1234 

在该代码段中,Integer.parseInt(“6666”) 能够成功将字符串 “6666” 转换为整数并将其赋值给 m。但是 Integer.parseInt(“89ab”) 的字符串 “89ab” 并不能被解析为一个整数。因为 “89ab” 中包含字符 ‘a’ 和 ‘b’,它们不是十进制数字字符,所以这一行代码会抛出 NumberFormatException 异常。
由于在 catch 块中捕获了 NumberFormatException 异常,所以程序不会因为异常而终止,而是执行了 System.out.println(“发生异常”); 这行代码。由于异常发生后,n 的赋值操作未能成功执行,因此 n 的值保持初始值 0。
至于变量 t,即使在 try-catch 块中发生异常,t 的赋值操作也不受影响。在 catch 块中并没有修改 t 的值,因此它仍然保持着在初始化时的值 1234。

(8)

 class Animal {
	void shout() {
		System.out.println("动物叫!");
	}
}
class Cat extends Animal {
	void shout() {
		System.out.println("喵喵……");
		super.shout();
	}
}
public class Test03 {
	public static void main(String[] args) {
		Animal animal = new Cat();
		animal.shout();
		
	}
}

运行结果:

喵喵……
动物叫! 

56.编程题
<1>. 请编写程序,实现对数组{3,24,22,76,10,6,28} 的元素求最小值。

public class Main {
    public static void main(String args[]) {
       int arr[]={3,24,22,76,10,6,28};
       int min=arr[0];
        for (int i = 0; i < arr.length; i++) {
                if(min>arr[i]) {
                    int temp = arr[i];
                    arr[i] = min;
                    min = temp;
                }
        }
        System.out.println(min);
    }
}

<2>. 请编码实现动物世界的继承关系,要求:
(1)父类动物类(Animal)具有属性:name;行为:吃饭(eat)、睡觉(sleep)
(2)子类为兔子类(Rabbit)
(3)不同的动物吃的行为各不相同(兔子吃草);但睡觉的行为是一致的。
(4)通过继承实现以上需求,并编写测试类AnimalTest进行测试。

class Animal {
    protected String name;

    public Animal(String name) {
        this.name = name;
    }

    public void eat() {
        System.out.println(name + " is eating.");
    }

    public void sleep() {
        System.out.println(name + " is sleeping.");
    }
}

// 子类 Rabbit 继承自 Animal
class Rabbit extends Animal {
    public Rabbit(String name) {
        super(name);
    }

    @Override
    public void eat() {
        System.out.println(name + " is eating grass.");
    }
}

// 测试类 AnimalTest
public class AnimalTest {
    public static void main(String[] args) {
        Animal animal = new Animal("Generic Animal");
        animal.eat();
        animal.sleep();

        Rabbit rabbit = new Rabbit("Peter Rabbit");
        rabbit.eat();
        rabbit.sleep();
    }
}

<3>.编写程序,计算1到100之间所有偶数的和,即:计算2+4+6+8…+98+100,并输出计算结果。

public class Main {
    public static void main(String args[]) {
       int sum=0;
        for (int i = 1; i <=100; i++) {
            if(i%2==0){
                sum+=i;
            }
        }
        System.out.println(sum);
    }
}

<4>. 通过实现Runnable接口的方式创建一个新线程,要求main线程打印120此次“main”,新线程打印80次“new”。

class MyRunnable implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 80; i++) {
            System.out.println("new");
        }
    }
}

public class Main {
    public static void main(String[] args) {
        MyRunnable myRunnable = new MyRunnable();
        Thread newThread = new Thread(myRunnable);

        for (int i = 0; i < 120; i++) {
            System.out.println("main");
        }

        newThread.start();
    }
}

57.简述题
(1)简述String和StringBuffer有什么区别。

String 是不可变的。一旦创建了一个 String 对象,它的内容就不能被修改。每次对 String 执行字符串操作时,都会创建一个新的 String 对象。
StringBuffer 是可变的。StringBuffer 对象的内容可以被修改,而不需要创建新对象。因此,对字符串进行频繁的操作时,使用 StringBuffer 通常更有效率。
StringBuffer会开辟一块字符串缓冲区来修改字符串,而String每次修改都会重新申请内存。 StringBuffer操作字符串效率性能优于String。
方法不同:比如追加字符串,Stirng用“+”,StringBuffer用append方法。

(2)简述继承的概念以及继承的好处。

答:继承是一个类可以获得另一个类的特性机制,在原有类的基础上,经过适当的扩充和完善可以派生出新的类。
通过类的继承关系可以实现程序代码的重用,避免重复设计,提高软件开发效率。通过继承还可以在代码中利用多态。

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