前因:
记录在牛客上刷题的错题记事本
1. 下面关于volatile的功能说法正确的是哪个
A : 原子性
B : 有序性
C : 可见性
D : 持久性
答案B,C。 synchronized保证三大性,原子性,有序性,可见性,volatile保证有序性,可见性,不能保证原子性。
2. 下面哪些类可以被继承? Java.lang.Thread、java.lang.Number、java.lang.Double、java.lang.Math、 java.lang.ClassLoader
A : Thread
B : Number
C : Double
D : Math
E : ClassLoader
答案A B E 。
- Thread可以被继承,用于创建新的线程
- Number类可以被继承,Integer,Float,Double等都继承自Number类
- Double类的声明为
public final class Double extends Number implements Comparable<Double>
- Math类的声明为
public final class Mathextends Object
- ClassLoader可以被继承,用户可以自定义类加载器
3. 对 Map 的用法,正确的有:
A : new java.util.Map().put("key" , "value") ;
B : new java.util.SortedMap().put("key" , "value") ;
C : new java.util.HashMap().put( null , null ) ;
D : new java.util.TreeMap().put( 0 , null ) ;
答案C D 。
Map家族的继承实现关系如下,注意一点就是顶层的Map接口与Collection接口是依赖关系:
关于Key和Value能否为null的问题:
Map集合类 | Key | Value |
---|---|---|
HashMap | 允许为null | 允许为null |
TreeMap | 不允许为null | 允许为null |
ConcurrentMap | 不允许为null | 不允许为null |
4. 静态内部类不可以直接访问外围类的非静态数据,而非静态内部类可以直接访问外围类的数据,包括私有数据。( )
A : 正确
B : 不正确
-
总的来说一下内部类吧:
1. 静态内部类:
1. 静态内部类本身可以访问外部的静态资源,包括静态私有资源。但是不能访问非静态资源,可以不依赖外部类实例而实例化。
2. 成员内部类:
1. 成员内部类本身可以访问外部的所有资源,但是自身不能定义静态资源,因为其实例化本身就还依赖着外部类。
3. 局部内部类:
1. 局部内部类就像一个局部方法,不能被访问修饰符修饰,也不能被static修饰。
2. 局部内部类只能访问所在代码块或者方法中被定义为final的局部变量。
4. 匿名内部类:
1. 没有类名的内部类,不能使用class,extends和implements,没有构造方法。
2. 多用于GUI中的事件处理。
3. 不能定义静态资源
4. 只能创建一个匿名内部类实例。
5. 一个匿名内部类一定是在new后面的,这个匿名类必须继承一个父类或者实现一个接口。
6. 匿名内部类是局部内部类的特殊形式,所以局部内部类的所有限制对匿名内部类也有效。