final
关于final的说法正确的是(ABC)
A.
final修饰类,类不能被继承, String就是final类
B.
final修饰的方法,不能被重写,但是可以重载
C.
final不能修饰抽象类,抽象类是用来继承的
D.
final一般修饰静态变量,静态变量不会发生变化
final修饰变量,则等同于常量
final修饰方法,则方法不能被重写,可以被重载。
final修饰类,则类不能被继承
final不能用于接口中,接口的唯一目标是让类实现它们,并且由于接口中的方法不能有任何实现,所以使它们成为最终的没有意义:它们将没有实现,并且不能被重写
final 不能修饰抽象类,因为抽象类就是用来继承的,类似接口
final不修饰静态变量,因为static本就是全局共享,经过final修饰后变成常量,不可修改了
final修饰的变量表示赋值之后不能再进行更改,系统赋默认值也算赋值,因此系统也不会赋默认值。
如果不在定义的时候或者构造函数中对final变量进行赋值的话,则生成的对象中final变量的值是未知的(编译器也会直接报错),因此必须进行初始化。
如果用static final同时修饰变量的话,则变量必须在定义的时候进行初始化。因为static变量属于类,在调用构造函数之前就已经被系统赋予默认值了。
如果不在定义的时候初始化,那么既无法在构造函数中初始化,系统也不会赋默认值。则该变量被定义出来是毫无意义的。
集合
[单选]
在一个数据集合中,经常需要做数据查找的操作(不考虑线程安全),请问使用哪个数据结构最合适:
HashTable
LinkedList
**HashMap**
ConcurrentHashMap
Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。
以下哪种数据结构的内存是连续的:
map
set
**vector**
list
vector内存连续
Collection是java.util下的接口,它是各种集合结构的父接口;
Collections是java.util下的类,它包含有各种有关集合操作的静态方法
关于HashSet和TreeSet的描述不正确的是( )
**二者都实现了Set接口,元素无序不可重复**
HashSet是由一个hash表来实现的,元素无序
TreeSet是由一个树形的结构实现的,元素有序
加入TreeSet中的元素需实现比较器规则
TreeSet是由一个树形的结构实现的,其中的元素并不像其它Set实现一样无序,相反它是有序的。
空指针equals空指针异常
有下面代码
import java.util.*;
class Student {
int age;
String name;
public Student(){}
public Student(String name, int age){
this.name = name;
this.age = age;
}
public int hashCode(){
return name.hashCode() + age;
}
public boolean equals(Object o){
if (o == null)
return false;
if (o == this)
return true;
if (o.getClass() != this.getClass())
return false;
Student stu = (Student) o;
if (stu.name.equals(name) && stu.age == age) **加粗样式**
return true;
else
return false;
}
}
public class TestHashSet{
public static void main(String args[]){
Set set = new HashSet();
Student stu1 = new Student();
Student stu2 = new Student("Tom", 18);
Student stu3 = new Student("Tom", 18);
set.add(stu1);
set.add(stu2);
set.add(stu3);
System.out.println(set.size());
}
}
下列说法正确的是( D )
0分 错误
A.
编译运行都正确,输出结果为3
B.
编译运行都正确,输出结果为2
C.
编译错误
D.
编译正确,运行时异常
在执行equals方法时,引用equals方法的对象不能为空
map
以下Java代码的运行结果为
Map<String,String>dogs = new HashMap<String,String>();
dogs.put(“dog1”,”丢丢”);
dogs.put(“dog2”,”皮皮”);
dogs.put(“dog3”,”豆豆”);
dogs.put(“dog2”,”花花”);
Set<String>keys=dogs.keySet();
for(String key:keys){
System.out.print(key+””);
}
0分 错误
A.
正常运行,但是什么也不输出
B.
编译错误
C.
输出:dog1 dog2 dog3 dog2
D.
输出:dog1 dog3 dog2 √
map集合中key不可以重复。后面相同的key会覆盖前面的key
try catch finally不可达问题
有如下代码
public class TestTryAndTry {
public static void main(String args[]){
System.out.println(ma());
}
public static int ma(){
try{
return 100;
}finally{
try{
return 200;
}finally{
return 500;
}
return 1000;//不可达
}
}
}
选择正确答案( )
0分 错误
A.
输出200
B.
输出500
C.
编译错误 √
D.
输出100
#IO
下面哪个流类属于面向字符的输出流()
0分 错误
A.
ObjectInputStream
B.
InputStreamReader
C.
BufferedWriter √
D.
FileOutputStream