2021年08月26日 java1

考点1:

java 中哪个关键字可以对对象加互斥锁?

  • A transient
  • B synchronized
  • C serialize
  • D static

解析

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

transient修饰符是指字段不会被序列化。
synchronized修饰符是指对象锁. 用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这个段代码
serialize序列化.

volatile:用来确保将变量的跟新操作通知到其他线程,当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。然而,在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比 synchronized关键字更轻量级的同步机制。

  • static 修饰符,用来创建类方法和类变量。
  • final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
  • abstract 修饰符,用来创建抽象类和抽象方法。
  • synchronized 用于多线程的同步。用来给对象和方法或者代码块加锁,各线程互斥访问。
  • volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
  • transient:序列化的对象包含被 transient 修饰的实例变量时,java
  • 虚拟机(JVM)跳过该特定的变量。

A、transient,反序列化修饰符,序列化的时候,类中的属性都会被复制,但是被transient和static修饰的属性不会被复制。

考点2:

在Web应用程序的文件与目录结构中,web.xml是放置在( )中。

  • A WEB-INF目录
  • B conf目录
  • C lib目录
  • D classes目录

解析

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

Java Web应用程序目录结构

web.xml文件是用来初始化配置信息,web.xml是放置在WEB-INF目录中

Web工程的目录结构如图所示

(1)/WEB-INF/web.xml 是部署描述文件
(2)/WEB-INF/classes 用来放置应用程序用到的自定义类(.class),必须包括包(package)结构。
(3)/WEB-INF/lib 用来放置应用程序用到的JAR文件。

考点3:

java语言中的数组元素下标总是从0开始,下标可以是整数或整型表达式。()

  • A 正确
  • B 错误

解析

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

例如平时有这样的用法

1
2
3
for(int i=0;i<10;i++){
a[i+1]=a[i];
}

这个i+1就是整数型表达式 或者a[5+3]就是a[8]

考点4:

类A1和类A2在同一包中,类A2有个protected的方法testA2,类A1不是类A2的子类(或子类的子类),类A1可以访问类A2的方法testA2。( )

  • A 正确
  • B 错误

解析

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

访问控制符作用范围

作用域 当前类 同一package 子孙类 其他package
public
protected ×
default × ×
private × × ×
@ public protected default private
当前类 y y y y
同包中 y y y n
子类 y y n n
其它 y n n n

考点5:

下面对静态数据成员的描述中,正确的是

  • A 静态数据成员可以在类体内进行初始化
  • B 静态数据成员不可以被类的对象调用
  • C 静态数据成员不受private控制符的作用
  • D 静态数据成员可以直接用类名调用

解析

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

静态数据成员可以直接用类名调用,前提是访问权限修饰符为public。
本类的私有静态数据成员,无法被其他类调用。

考点6:

将下列哪个代码(A、B、C、D)放入程序中标注的【代码】处将导致编译错误?

1
2
3
4
5
6
7
8
class A{
public float getNum(){
return 3.0f;
}
}
public class B extends A{
【代码】
}
  • A public float getNum(){return 4.0f}
  • B public void getNum(){}
  • C public void getNum(double d){}
  • D public double getNum(float d){return 4.0d}

解析

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

A是重写
B是重写,但是返回值类型不对
C是重载
D是重载

方法重写 两同两小一大

方法重写要遵循“两同两小一大”规则,

  • “两同”即方法名相同、形参列表相同
  • “两小”指的是子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等;
  • “一大”指的是子类方法的访问权限应比父类方法的访问权限更大或相等。

并且,覆盖方法和被覆盖方法要么都是类方法,要么都是实例方法,不能一个是类方法一个是实例方法。

方法重载 两同一不同

方法重载的要求就是“两同一不同”:

  • 同一个类中
  • 方法名相同,
  • 形参列表不同

子类重载方法:参数列表不同

什么时候发生子类方法和父类方法的重载?
如果子类定义了一个与父类方法有相同的方法名,但参数列表不同的方法,就会形成父类方法和子类方法的重载,

如何区分重载和重写

看参数列表,
如果参数列表相同,就认定为重写。
如果参数列表不同,就认定为重载。