java知识点

1. String和StringBuffer

        (1)String是不可变类,所以当执行如下代码的时候:

String str = 'abc';
str = str + 'def';

        首先,‘abc’和‘def’是两个单独的对象,编译的时候会拜放到常量池中。然后执行String str = ‘abc’将str‘abc’指向这个常量,然后str = str + ‘def’会重新创建一个‘abcdef’的对象,并将str指向这个对象。所以以上的代码中,我们共创建了3个对象。

        (2)StringBuffer是可变类,经常被运算的字符串对象可以被定义为StringBuffer,但是StringBuffer没有实现equals方法。

StringBuffer stringBuffer1 = new StringBuffer("abc");
StringBuffer stringBuffer2 = new StringBuffer("abc");        
System.out.println(stringBuffer1.equals(stringBuffer2));

        上面的代码返回的是false。StringBuffer操作字符串可以用append和delete方法。

        (3)String是final类,不可以继承。

        (4)String str = “abc”和 String str = new String(“abc”)的区别

        第一种:str和常量池中的“abc”是同一个对象。

        第二种:str和常量池中的“abc”是不同的对象。

2. try catch finally

        (1)如果try中有一个return,那么finally中的语句执行不执行?什么时候执行?

        执行!先将运算结果return给调用函数,然后在执行finally中的语句,然后再执行调用函数的接下来代码。

        (2) final、finally、finalize:

        final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

        finally是异常处理语句结构的一部分,表示总是执行。

        finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用。

3. HashTable和HashMap

        (1)HashMap允许空的键名和键值,但是HashTable不可以。

        (2)HashTable是线程同步安全的,HashMap不是。

4. 未完待续,挖个大坑慢慢填吧~

笔者只是初学者,开此博客的初衷是为了给自己的学习过程留一个痕迹。所以您可能发现笔者措辞不严谨、逻辑不合理,甚至代码有错误、结论很偏颇等等。笔者感激各位的讨论和指正,并在此不胜感激!拜谢!欢迎加QQ群讨论:852410026
原文地址:https://www.cnblogs.com/LOVE0612/p/5306470.html