java核心面试题
简答题Java 核心1.基本语法1、一个“.java“源文件中是否可以包括多个类(不是内部类)?有什么限制答:可以有多个类,但只能有一个 public 的类,并且 public 的类名必须与文件名相一致。2、Java 有没有 goto?java 中的保留字,现在没有在 java 中使用。3、八种基本数据类型和包装类以及大小。八种基本数据类型 包装类 大小 byte Byte 8 位 -2^7 ~ 2^7-1short Short 16 位 -2^15 ~ 2^15-1 int Integer 32 位 -2^31 ~ 2^31-1long Long 64 位 -2^63 ~ 2^63-1float Float 32 位 -2^31 ~ 2^31-1double Double 64 位 -2^63 ~ 2^63-1char Character 16 位 \u0000 ~ \uFFFF boolean Boolean 1 位 4、说说(3)另外, String 实现了 equals 方法,new String(“abc”).equals(newString(“abc”)的结果为true,而 StringBuffer 没有实现 equals 方法, 所以 new StringBuffer(“abc”).equals(newStringBuffer(“abc”)的结果为 false。27、数组有没有 length()这个方法 ? String 有没有 length()这个方法?数组没有 length()这个方法,有 length 的属性。String 有有 length()这个方法。28、介绍Collection框架的结构可以更详细的叙述每个集合。29、 ArrayList和Vector和LinkedList的区别?1)ArrayList 和Vector底层实现是基于数组的实现 而LinkedList底层实现是基于链表的实现。2)ArrayList和Vector 实现了List接口(List继承于Collection接口) 、而LinkedList除了实现了List接口以外还实现了Deque接口。3)他们都是有序集合,即存储在集合中的元素的位置都是有顺序的,我们以后可以按位置索引号取出某个元素, ,并且其中的数据是允许重复的。4)从同步性来说 Vector是属于线程安全的而ArrayList 和LinkedList 不是线程安全的5)从效率来说ArrayList和Vector底层属于数组 查找修改速度快 增加删除效率慢LinkedList底层是链表 所以 增删比较快 查改 慢6) (这个可以选择回答)从数据增长来说:ArrayList与 Vector都有一个初始的容量大小,当存储进它们里面的元素的个数超过了容量时。在jdk1.7中 ArrayList底层实现增长的方式是int newCapacity = oldCapacity + (oldCapacity >> 1); Vector实现增长的方式是int newCapacity = oldCapacity + ((capacityIncrement > 0) ? capacityIncrement : oldCapacity);30、 HashMap和Hashtable 的区别1)继承不同。public class Hashtable extends Dictionary implements Mappublic class HashMap extends AbstractMap implements Map2)Hashtable 中的方法是同步的 (线程安全的),而 HashMap 中的方法在缺省情况下是非同步的(线程不安全的) 。在多线程并发的环境下,可以直接使用 Hashtable,但是要使用 HashMap 的话就要自己增加同步处理了3)Hashtable 不允许使用 null 作为key和value ,否则会引发空指针异常, HashMap允许空(null )作为键值( key)和Value,但最多只能有一项 key-value中key为null,但是key-value中可以有多个value为null31、Collection和 Collections的区别Collection 是集合类的上级接口,继承与他的接口主要有 Set 和 List.Collections 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。32、Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用== 还是 equals()?它们有何区别?Set 里的元素是不能重复的,元素重复与否是使用 equals()方法进行判断的。equals()和==方法决定引用值是否指向同一对象 equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。33、象值相同(x.equals(y) == true),但却可有不同的 hash code,这句话对不对?对。如果对象要保存在 HashSet 或 HashMap 中,它们的 equals 相等,那么,它们的hashcode 值就必须相等。如果不是要保存在 HashSet 或 HashMap,则与 hashcode 没有什么关系了,这时候hashcode 不等是可以的,例如 ArrayList 存储的对象就不用实现 hashcode,但是通常都会去实现的。34、TreeSet 里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的 compareTo 方法,还是使用的子类的 compareTo 方法,还是抛异常!当前的 add 方法放入的是哪个对象,就调用哪个对象的 compareTo 方法,至于这个 compareTo 方法怎么做,就看当前这个对象的类中是如何编写这个方法的。public class Parent implements Comparable {private int age = 0;public Parent(int age) {this.age = age;}public int compareTo(Object o) {System.out.println(“ of parent“);Parent o1 = (Parent) o;return age > o1.age ? 1 : age < o1.age ? -1 : 0;}}public class Child extends Parent {public Child() {super(3);}public int compareTo(Object o) {System.out.println(“of child“);return 1;}}public class TreeSetTest {public static void main(Stri