5.0中引入了可变参数:
invoke(Object obj,Object... args)
1.4中使用的还是数组:
invoke(Object obj ,Object[] args)
为了兼容1.4版本,如果在向invoke中传入的对象是一个数组类型的时候,我们要么再加一层数组嵌套,要么利用强制转换告诉jvm这里是一个对象。因为如果没有特殊处理的话,jvm将按照1.4的方法处理,即把数组拆开!
MethodCharAt.invoke(str,new Object[]{new int[]{2}});
MethodCharAt.invoke(str,(Object)new int[]{2});
可变参数特点:
1,只能出现在参数列表的最后;
2,... 位于变量类型和变量名之间,前后有无空格都可以。
3,调用可变参数的方法时,编译器为该可变参数隐含创建了一个数组,在方法中以数组的形式访问可变参数。
由于可变参数这个特性是在jdk5.0出现的,所以为了兼容老版本,在使用可变参数时,如果我们希望传入的是一个数组,那么jvm会把这个数组拆开,为了避免这样的情况我们可以,在这个数组外面再加一层数组或者申明这个数组是Objecct的。
Example:
在反射中我们用到的这段代码:
MethodCharAt.invoke(str,new Object[]{new int[]{2}});
MethodCharAt.invoke(str,(Object)new int[]{2});
增强for语句(for\in or foreach):
5.0出现的新特性。格式:for(type variableName : variabaleSet){...}
注意事项:
1,迭代的变量必须在()中定义;
2,集合变量可以是数组集合或实现了Iterable接口的集合类。
注释快捷键:ctrl+shift+/ ;
取消注释快捷键:ctrl+shift+\ ;
如何获得新的知识?去oracle官网下载最新JDK的语言规范(langspec)
英语词汇:specification 规范,明确说明,说明书。
自动装箱:基础数据类型(primitive data type)——>相应的对象。
Integer iObj = 12;
自动拆箱:对象——>相应的基础数据类型。
sop( iObj + 12 );
java中在创建一个小于127的Integer对象时,先到缓冲池中去找有没有一个一样的对象,如果没有就创建一个,如果有直接指向那个对象,这是因为小于127的比较常用,所以可以节省内存资源,这里使用了享元设计模式。
强调:Integer小于127的如果内存中存在相同的,就不再建立新的对象。
享元模式(flyweight):如果有很多很小的对象,我们会经常用到,用的时候该对象的内部状态都没有变化,那么就可以把他变成一个对象。那些不同的属性把它变成方法的参数(外部状态),那些相同的属性叫内部状态。
Alt+shift+x:运行;
Alt+shift+x j:运行java Application;