Java基础面试题库(一)
# 1、下列哪个说法是正确的()
A ConcurrentHashMap使用synchronized关键字保证线程安全
B HashMap实现了Collction接口
C Array.asList方法返回java.util.ArrayList对象
D SimpleDateFormat是线程不安全的
D
ConcurrentHashMap 使用segment来分段和管理锁使用ReentrantLock来保证线程安全。
这个是HashMap的源码:
public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
Arrays.asList() 返回 java.util.Arrays.ArrayList 对象,这里的 ArrayList 是 Arrays 私有的内部类;并不是java.util.ArrayList。
SimpleDateFormat没有加同步锁,故不安全。
# 2、下面代码的运行结果是()
public static void main(String[] args){
String s;
System.out.println("s="+s);
}
A 代码编程成功,并输出”s=”
B 代码编译成功,并输出”s=null”
C 由于String s没有初始化,代码不能编译通过。
D 代码编译成功,但捕获到NullPointException异常
C
局部变量没有默认值
# 3、JDK1.8版本之前,抽象类和接口的区别,以下说法错误的是()
A 接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的。
B abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface,实现多重继承。接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用。
C 在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是 static final的,不过在 interface中一般不定义数据成员),所有的成员方法默认都是 public abstract 类型的。
D abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"has-a"关系,interface表示的是"is-a"关系。
D
abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。
接口中:
如果是Java 7以及以前的版本,那么接口中可以包含的内容有:1. 常量;2. 抽象方法 如果是Java 8,还可以额外包含有:3. 默认方法;4. 静态方法 如果是Java 9,还可以额外包含有:5. 私有方法
final变量在使用前必须先赋值
# 5、 关于Java内存区域下列说法不正确的有哪些?
A 程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的信号指示器,每个线程都需要一个独立的程序计数器.
B Java虚拟机栈描述的是java方法执行的内存模型,每个方法被执行的时候都会创建一个栈帧,用于存储局部变量表、类信息、动态链接等信息
C Java堆是java虚拟机所管理的内存中最大的一块,每个线程都拥有一块内存区域,所有的对象实例以及数组都在这里分配内存。
D 方法区是各个线程共享的内存区域,它用于存储已经被虚拟机加载的常量、即时编译器编译后的代码、静态变量等数据。
B C
java虚拟机栈:线程私有,没有类信息,类信息是在方法区中
java堆是被所有线程共享的一块内存区域,而不是每个线程都拥有一块内存区域。
# 6、在java中重写方法应遵循规则的包括()
A 访问修饰符的限制一定要大于被重写方法的访问修饰符
B 可以有不同的访问修饰符
C 参数列表必须完全与被重写的方法相同
D 必须具有不同的参数列表
B C
方法重写要注意的事项: 1.方法重写时, 方法名与形参列表必须一致。 2.方法重写时,子类的权限修饰符必须要大于或者等于父类的权限修饰符。 3.方法重写时,子类的返回值类型必须要小于或者等于父类的返回值类型。 4.方法重写时, 子类抛出的异常类型要小于或者等于父类抛出的异常类型。 Exception(大) RuntimeException(小)
A选项的一定要大于错误,而是子类重写方法的访问权限不能低于父类重写方法的访问权限
D 是重载要求
# 7、要使某个类能被同一个包中的其他类访问,但不能被这个包以外的类访问,可以( )
A 让该类不使用任何关键字
B 使用private关键字
C 使用protected关键字
D 使用void关键字
A
总结:default拒绝一切包外访问;protected接受包外的子类访问
public>protected>default>private
# 8、枚举(enum)属于原始数据类型(primitive type)?
错误
在Java中,变量有两种类型,一种是原始类型,一种是引用类型。
原始类型一共有8种,它们分别是char,boolean,byte,short,int,long,float,double。
# 9、Java语言中,下面哪个语句是创建数组的正确语句?( )
A float f[][] = new float[6][6];
B float []f[] = new float[6][6];
C float f[][] = new float[][6];
D float [][]f = new float[6][6];
E float [][]f = new float[6][];
A B D E
一维长度必须定义,二维可以后续定义
# 10、jdk1.8中,下面有关java 抽象类和接口的区别,说法错误的是?
A 抽象类可以有构造方法,接口中不能有构造方法
B 抽象类中可以包含非抽象的普通方法,接口中的方法必须是抽象的,不能有非抽象的普通方法
C 一个类可以实现多个接口,但只能继承一个抽象类
D 接口中可以有普通成员变量,抽象类中没有普通成员变量
B D
参考第3题答案
抽象类 1.抽象类中可以构造方法 2.抽象类中可以存在普通属性,方法,静态属性和方法。 3.抽象类中可以存在抽象方法。 4.如果一个类中有一个抽象方法,那么当前类一定是抽象类;抽象类中不一定有抽象方法。 5.抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要定义为抽象的。 接口 1.在接口中只有方法的声明,没有方法体。 2.在接口中只有常量,因为定义的变量,在编译的时候都会默认加上 public static final 3.在接口中的方法,永远都被public来修饰。 4.接口中没有构造方法,也不能实例化接口的对象。 5.接口可以实现多继承 6.接口中定义的方法都需要有实现类来实现,如果实现类不能实现接口中的所有方法,则实现类定义为抽象类。
java8中接口 可以有default、static方法,所以B是错的。