1、对classes文件的校验,jdk7中method的增加了堆栈映射表属性用于校验。因此任何工具修改字节码文件时都要必须修改更新
堆栈映射表。
2、改进的异常处理导致不兼容。例如以下是jdk6的代码在jdk7里不兼容
class Foo extends Exception {}
class SonOfFoo extends Foo {}
class DaughterOfFoo extends Foo {}
...
try {
throw new DaughterOfFoo();
} catch (final Foo exception) {
try {
throw exception; // used to throw Foo, now throws DaughterOfFoo
} catch (SonOfFoo anotherException) { // Reachable? }
}
第1个不兼容:throw exception。在jdk6里是抛出Foo,但在jdk7里抛出的是DaughterOfFoo。
第2个不兼容:catch (SonOfFoo ...) 。在jdk6里是可达,但jdk7里不可达。
3、MirroredTypeException 现在是 MirroredTypesException的子类。
4、java.lang.Float.parseFloat(String) 和 parseDouble(String)可能会抛出一个NullPointerException,当参数为null时。
5、在空的TreeMap,TreeSet中插入了null元素可能会导致NullPointerException。在jdk6中不会抛出NullPointerException。
6、Formatter.format() 抛出了FormatFlagsConversionMismatchException
7、子类不允许直接访问父类的私有成员变量。
8、方法重载中,不允许参数相同返回值不同的情况。例如以下代码不允许:
class A {
int m(List<String> ls) { return 0; }
long m(List<Integer> ls) { return 1; }
}
9、不允许子类重写父类方法时,参数存在继承关系,例如:
class A{
public int compareTo(Object o){
return 0;
}
}
class B extends A implements Comparable<B> {
public int compareTo(B b){
return 0;
}
}
10、不允许出现超过1个参数相同的接口。例如:
public interface Test extends Iterable<Class>, Iterable<Class> {}
11、不允许通过new Outer.Inner()方式实例静态内部类,例如:
class Outer {
static Inner{};
}
Inner in = new Outer.Inner();
12、当http响应码为-1时,Http协议处理程序将会关闭连接,此时再次调用getInputStream()时将抛出IOException。
版权声明
本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者Saturn和本文原始地址:
https://ndtm-idea.blogspot.com/2013/08/jdk-6-jdk-7.html
Wednesday, August 7, 2013
Subscribe to:
Post Comments (Atom)
0 comments:
Post a Comment