2021年08月25日 java1

考点1:

一个以”. java”为后缀的源文件,哪些说法是正确的?

  • A 只能包含一个类,类名必须与文件名相同
  • B 只能包含与文件名相同的类,以及其中的内部类
  • C 只能有一个与文件名相同的类,可以包含其他类
  • D 可以包含任意类

解析

显示答案/隐藏答案正确答案: C

一个java文件可以包含多个java类,但是只能包含一个public类,并且public类的类名必须与java文件名相同。

考点2:

默认RMI采用的是什么通信协议?

  • A HTTP
  • B UDP/IP
  • C TCP/IP
  • D Multicast

解析

显示答案/隐藏答案正确答案: C

RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制。 而TCP/IP是远程通讯的主要手段。

考点3:

下面有关java final的基本规则,描述错误的是?

  • A final修饰的类不能被继承
  • B final修饰的成员变量只允许赋值一次,且只能在类方法赋值
  • C final修饰的局部变量即为常量,只能赋值一次。
  • D final修饰的方法不允许被子类覆盖

解析

显示答案/隐藏答案正确答案: B

考点3:

下面有关java final的基本规则,描述错误的是?

  • A final修饰的类不能被继承
  • B final修饰的成员变量只允许赋值一次,且只能在类方法赋值
  • C final修饰的局部变量即为常量,只能赋值一次。
  • D final修饰的方法不允许被子类覆盖

解析

显示答案/隐藏答案正确答案: B

答案为:B

final修饰的成员变量为基本数据类型是,在赋值之后无法改变。
当final修饰的成员变量为引用数据类型时,在赋值后其指向地址无法改变,但是对象内容还是可以改变的。
final修饰的成员变量在赋值时可以有三种方式。
1、在声明时直接赋值。
2、在构造器中赋值。
3、在初始代码块中进行赋值。

final修饰的方法,不允许被子类覆盖。
final修饰的类,不能被继承。
final修饰的变量,不能改变值。
final修饰的引用类型,不能再指向别的东西,但是可以改变其中的内容。

final所修饰的成员变量只能赋值一次,
可以在类方法中赋值,
也可以在声明的时候直接赋值,

而final修饰的局部变量可以在声明的时候初始化,也可以在第一次使用时,通过方法或者表达式给它赋值。

final修饰的成员的赋值方式

第一种:修饰成员变量时有3种初始化方式:
1,在定义变量时直接赋值
2,声明完变量后在构造方法中为其赋值
3,声明完变量后在构造代码块中为其赋值 { }

第二种:修饰类变量(静态变量)
1,在定义类变量时直接赋值

2,在静态代码块中赋值

考点4:

以下程序执行的结果是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class X{
Y y=new Y();
public X(){
System.out.print("X");
}
}
class Y{
public Y(){
System.out.print("Y");
}
}
public class Z extends X{
Y y=new Y();
public Z(){
System.out.print("Z");
}
public static void main(String[] args) {
new Z();
}
}
  • A ZYXX
  • B ZYXY
  • C YXYZ
  • D XYZX

解析

显示答案/隐藏答案正确答案: C

类初始化顺序

涉及继承:
a.初始化父类中的静态成员变量和静态代码块
b.初始化子类中的静态成员变量和静态代码块
c.初始化父类的普通成员变量和构造代码块(按次序),再执行父类的构造方法
d.初始化子类的普通成员变量和构造代码块(按次序),再执行子类的构造方法

考点5:

下面程序输出结果为():

1
2
3
4
5
6
7
8
public class Demo{
public static void main (String [] args) {
String lx = "LeXin";
String nb = lx;
lx = "Fenqile";
System.out.println(nb);
}
}
  • A 程序异常,编译不通过
  • B 程序编写正常,可正常运行
  • C 程序输出值为”LeXin
  • D 程序输出值为”Fenqile

解析

显示答案/隐藏答案正确答案: BC

考点6:

JDK1.7版本之前,接口和抽象类描述正确的有( )

  • A 抽象类没有构造函数。
  • B 接口没有构造函数。
  • C 抽象类不允许多继承。
  • D 接口中的方法可以有方法体。

解析

显示答案/隐藏答案正确答案: BC

A.抽象类可以有构造方法,只是不能直接创建抽象类的实例对象而已
B.在接口中 不可以有构造方法,在接口里写入构造方法时,编译器提示:Interfaces cannot have constructors。
C.Java不允许类多重继承
D.jdk1.8后接口中的方法可以有方法体,jdk1.8之前不可以有方法体

JDK1.8后,接口中可以有静态方法,静态方法必须有方法体。

考点7:

根据下面这个程序的内容,判断哪些描述是正确的:( )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Test {
public static void main(String args[]) {
String s = "tommy";
Object o = s;
sayHello(o); //语句1
sayHello(s); //语句2
}
public static void sayHello(String to) {
System.out.println(String.format("Hello, %s", to));
}
public static void sayHello(Object to) {
System.out.println(String.format("Welcome, %s", to));
}
}
  • A 这段程序有编译错误
  • B 语句1输出为:Hello, tommy
  • C 语句2输出为:Hello, tommy
  • D 语句1输出为:Welcome, tommy
  • E 语句2输出为:Welcome, tommy
  • F 根据选用的Java编译器不同,这段程序的输出可能不同

解析

显示答案/隐藏答案正确答案: CD

Java语言是静态多分派,动态单分派的。 如果是重载方法之间的选择,则是使用静态类型。 如果是父类与子类之间的重写方法的选择,则是使用动态类型。 如A a = new B(); 会使用类型B去查找重写的方法,使用类型A去查找重载的方法。 所以此题的输出分别为

Welcome, tommy
Hello, tommy

考点8:

错误的有:

  • A public abstract final class Test { abstract void method(); }
  • B public abstract class Test { abstract final void method(); }
  • C public abstract class Test { abstract void method() { } }
  • D public class Test { final void method() { } }

解析

显示答案/隐藏答案正确答案: ABC

A、final修饰的类为终态类,不能被继承,而抽象类是必须被继承的才有其意义的,因此,final是不能用来修饰抽象类的
B、final修饰的方法为终态方法,不能被重写。而继承抽象类,必须重写其方法。因此,final不能修饰抽象方法
C、抽象方法是仅声明,并不做实现的方法。也就是不能带有方法体:{ }