java API相关

super.getClass()方法调用

  1. import java.util.Date;
  2. public class GetClassTest {
  3. public static void main (String[] args) {
  4. new GetClassTest().test();
  5. }
  6. public void test() {
  7. System.out.println(super.getClass().getName());
  8. }
  9. }

输出结果:

GetClassTest

由于getClass()在Object类中定义成了final,子类不能覆盖该方法,所以在test方法中调用getClass().getName()方法,其实就是在调用从父类继承的getClass()方法等效于调用super.getClass().getName()方法,所以,super.getClass().getName()方法返回的也应该是GetClassTest;
如果想得到父类的名称,应该用如下代码: getClass().getSuperClass().getName();

Math.round(11.5)等于多少?Math.round(-11.5)等于多少?

Math.round()表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。

下面代码的输出结果

public class Test {
  public static void main (String[] args) {
    System.out.println(Math.min(Double.MIN_VALUE, 0.0d));
  }
}

输出:

0.0

Double.MIN_VALUE = 4.9E-324D是所有double中数值最小的。Double.MIN_VALUE > 0;

1.0 / 0 会输出什么?会异常?编译错误?

不会抛出ArithmeticException而是返回Double.INFINITY

1 / 0 会输出什么?会异常?编译错误?

会抛出”ArithmeticException / by zero”

2 / 3 会输出什么?会异常?编译错误?

输出0,整数相除,返回的数也是整数。相除结果是小数,则只返回整数部分

2 / 3f 会输出什么?会异常?编译错误?

输出0.6666667, 2会先转换成float再进行运行。

数组有没有length()这个方法? String有没有length()这个方法

数组没有length()这个方法,有length的属性。String有有length()这个方法

Collection和Collections的区别

  • Collection是集合类的上级接口,继承与他的接口主要有Set和List。
  • Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

    List,Set,Map是否继承自Collection接口

    List,Set是;
    Map不是

    List、Map、Set 三个接口,存取元素时,各有什么特点?

    相同点:

  • List和Set都是单列元素的集合,有共同的父接口Collection。

不同点:

  • Set 里面不允许有重复的元素,所谓重复,即不能有两个相等(注意, 不是仅仅是相同)的对象。
  • Set 取元素时,没法说取第几个,只能以 Iterator 接口取得所 有的元素,再逐一遍历各个元素。
  • List 表示有先后顺序的集合,可以有重复元素,可以调用 get(index i)来明确取第几个。

    Vector和ArrayList、LinkedList区别

    相同点:

  • 继承了List接口(List接口继承了Collection接口)

  • 是有序集合
  • 可以按位子索引号取出某个元素
  • 其中的数据是允许重复的

不同点:

  • LinkedList内部以链表形式存储数据;ArrayList内部以数组形式存储数据;Vector同ArrayList,不过它与ArrayList比较起来是线程安全(thread-safe)的。
  • Vector增长原来的一倍,ArrayList增加原来的0.5倍;Vector(setSize())可以设置空间的大小,而ArrayList不行。

    Hashtable和HashMap之间的区别

    相同点:

  • HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口

不同点:

  • HashMap允许空(null)键值(key);HashTable不允许,Value的值也不能为null
  • HashMap在单线程下,效率高
  • HashMap没有contains方法,有containsKey(),containsValue(),方法;HashTable三个都有
  • HashTable实现了Dictionary类,也继承Map接口;HashMap只继承了Map接口。

    String,StringBuffer,StringBuilder之间区别

    相同点:

  • 用来存储和操作字符串

不同点:

  • String提供的是数值不可改变的字符串,其它两个是可改变的,StringBuffer是线程安全的,而StringBuilder不是线程安全的。
  • String实现了equals方法,其它两个没有。new String(“abc”).equals(newString(“abc”)的结果为true,而StringBuffer没有实现equals方法,所以,new StringBuffer(“abc”).equals(newStringBuffer(“abc”)的结果为false。