2015-04-12一些知识点
1、一个关于内部类的小程序
package com.lk.C; public class Test1 { static class one{ private static class two{ public static void main(String[] args) { System.out.println("two"); } } } }
输出
two
2、Object 类下的两个方法:getClass()作用是返回一个对象的运行时类;toString()方法返回该对象的字符串表示。
3、Java的集合:Vector容器确切地知道它所持有的对象隶属于什么类别,Vector不进行边界检查。
边界检查:在设计或实现某种集合的时候,经常会遇到集合边界值的情况。例如,从集合中取一个元素,必须得考虑这个集合是否非空;向一个有限集合添加元素,必须考虑集合满的情况。而对于包含异常处理的编程语言来说,如果遇到集合操作边界,我们常见的编程约定有两种:一种选择是将边界条件作为异常来处理。另一种选择是不将边界操作作为异常来处理,而是用某个特定值来表示(如null)。
4、关于Collections:Collections是针对集合类的一个帮助类,它提供了一些列静态方法实现对各种集合的搜索、排序、线程安全化等操作。相当于对Array进行类似操作的类--Arrays。
Collections.max(Collection coll)//取coll中最大的元素 Collections.sort(List list)//对list中元素排序
5、如何选择容器类:
1)容器类和Array的区别,择取:
容器类仅能持有对象引用(指向对象的指针),而不是将对象信息复制一份至数列某位置,一旦将对象置入容器内,便损失了该对象的类别信息。
2)在各种Lists中,最好的做法是以ArrayList作为默认选择。当插入、删除频繁时,使用LinkedList();Vector总是比ArrayList慢;
在各种Sets中,HashSet通常优于HashTree(插入、查找)。只有当需要产生一个经过排序的序列,才用TreeSet。TreeSet的意义是用来维护其内元素的排序状态;
在各种Maps中,HashMap用于快速查找。当元素个数固定时,最好使用Array,因为Array的效率是最高的。
6、一个关于构造函数的实例:子类继承父类时构造函数的执行顺序等的问题
package com.lk.C; public class Test2 extends X{ Y y = new Y();//步骤3:再次构造Y,输出Y Test2(){ System.out.println("Z");//步骤4:最后调用Test2本身的构造函数,输出Z } public static void main(String[] args) { // TODO Auto-generated method stub new Test2(); } } class X{ Y b = new Y();//步骤1:若Test2继承X,构造Test2,则先构造X,进入X类运行Y b = new Y();输出Y X(){ System.out.println("X");//步骤2:接着输出X } } class Y{ Y(){ System.out.println("Y"); } }
Y
X
Y
Z
7、在继承结构中,父类的内部细节对于子类是可见的。所以,通过继承的代码复用是一种“白盒式代码复用”。
组合是指通过对现有的对象进行拼装(组合)产生新的更复杂的功能。因为在对象之间,各自的内部细节是不可见的,所以,我们也说这种方式的代码复用是“黑盒式代码复用”。
8、静态的方法不能被重写,一下程序输出
package com.lk.C; public class Test4 { public static void main(String[] args) { Father f = new Father(); Father c = new Child(); System.out.println(f.getName()); System.out.println(c.getName()); } } class Father{ public static String getName(){ return "Father"; } } class Child extends Father{ public static String getName(){ return "Child"; } }
Father
Father
9、子类的构造函数如果要引用super()方法,必须把super放在函数的首位,否则会编译不通过。