16、集合与泛型
(1)要使用TreeSet,下列其中一项必须为真
集合中的元素必须是有实现Comparable的类型(得覆写compareTo(Object o)这个方法)
使用重载、取用Comparator参数的构造函数来创建TreeSet(传入Comparator接口,覆写compare(Object one,Object two)这个方法)
(2)数组的类型检查是在运行期间检查的,但集合的类型检查只会发生在编译期间。如果方法声明中参数为ArrayList<Animal>,它就只会取用ArrayList<Animal>,ArrayList<Dog>与ArrayList<Cat>都不行,因为假设你对Dog[]加入一个Cat(把Dog[]传入声明为Animal[]的参数中是完全合法的操作),编译是可以的,但运行的时候会报错。
(3)在方法参数中使用万用字符时,编译器会阻止任何可能破坏引用参数所指集合的行为,你能够调用list中任何元素的方法,但不能加入元素,也就是说,你可以操作集合元素,但不能新增集合元素。如此才能保障执行期间的安全性,因为编译器会阻止执行期的恐怖行动。
17、包、jar存档文件和部署
无
18、远程部署的RMI
(1)RMI(Remote Method Invocation):远程程序调用
(2)远程接口必须要extend过java.rmi.Remote这个接口,且所有的方法都必须声明RemoteException。
附录B
为什么要在乎String的不变性?
当程序越来越大时,不可避免地会有很多String对象,为了安全性和节省空间(例如在手机上执行)的原因,String是不变的,意思是下面的代码
String s = “0”; for(int x = 1; x < 10; x++){ s = s + x; }
实际上会创建10个String对象(“0”,“01”,“012”.....“0123456789”)。最后会引用到“0123456789”这个值,但此时会存在10个String,创建新的String时,Java虚拟机会把它放到称为“String Pool”的特殊存储区中,如果已经出现同值的String,Java虚拟机不会重复建立String,只会引用已存在者。这是因为String是不变的,引用变量无法改变其它参考变量引用到的同一个String值。
原文:https://www.cnblogs.com/hlyxd/p/14753625.html