你好,请问JVM1.5和JVM1.4有什么区别? JDK1.4编译的class文件在JVM1.5运行下哪些方面会有影响?

解决方案 »

  1.   

    1.泛型(Generic)    Java在1.5之前一直没有相对应的功能。一个集合可以放任何类型的对象,相应地从集合里面拿对象的时候我们也不得不对他们进行强制得类型转换。猛虎引入了泛型,它允许指定集合里元素的类型,这样你可以得到强类型在编译时刻进行类型检查的好处。2.For-Each循环  For-Each循环得加入简化了集合的遍历,并且避免了强制类型转换。3.自动装包/拆包(Autoboxing/unboxing)  自动装包/拆包大大方便了基本类型数据和它们包装类地使用。  自动装包:基本类型自动转为包装类.(int >> Integer)  自动拆包:包装类自动转为基本类型.(Integer >> int)
    4.枚举(Enums)  JDK1.5加入了一个全新类型的“类”-枚举类型。为此JDK1.5引入了一个新关键字enmu. 我们可以这样来定义一个枚举类型。
      枚举类型还提供了两个有用的静态方法values()和valueOf(). 我们可以很方便地使用它们,例如
    5.可变长参数(Varargs)  可变参数使程序员可以声明一个接受可变数目参数的方法。注意,可变参数必须是函数声明中的最后一个 参数。假设我们要写一个简单的方法打印一些对象,      util.write(obj1);
          util.write(obj1,obj2);
          util.write(obj1,obj2,obj3);
          …6.静态导入(Static Imports)  要使用用静态成员(方法和变量)我们必须给出提供这个方法的类。使用静态导入
            可以使被导入类的所有静态变量和静态方法在当前类直接可见,使用这些静态成员无需
            再给出他们的类名。        import static java.lang.Math.*;
             …….
            r = sin(PI * 2); //无需再写r = Math.sin(Math.PI);  不过,过度使用这个特性也会一定程度上降低代码地可读性。
    另外就是对组件功能的增强,比如对JTabel排序的默认支持等。
      

  2.   

    JDK1.4编译的class文件在JVM1.5运行 没有任何问题反向肯定不行内部区别,俺没有研究过。 不过JDK和JVM是关联的,JDK的新东西,在JVM里面肯定得支持才行。
      

  3.   

    晕死,没仔细看。Java的版本原则上是向下兼容的,起码彼此相近的版本,高版本是兼容低版本的,如果相距太远的话,可能有的方法被设置成,不建议使用、或者被删除的话,或者低版本中的变量名等在高版本变成的关键字,那么就不能在高版本运行了。但是高版本编译的文件不能在低版本上运行,会提示版本错误。就LZ的问题来说,1.4的编译文件在1.5上运行基本来说是没有问题的。
      

  4.   


    并不能说没有任何问题,就像我在1.4中定义一个变量名为:enum,这个是完全没有问题的。但是在1.5中enum成为了关键字,那么你的class就不能在高版本中运行了。在JDK版本升级的时候,还是需要仔细验证的。
      

  5.   

    class文件中并没有enum这个东西,也是编译为特殊的类,这个没有影响。
      

  6.   

    java5增加的那些新特性,基本是编译器特殊处理了,class文件格式基本没什么变化。
    虚拟机的改进一般是垃圾回收,对象管理等具体处理上的优化,跟class文件的兼容关系并不大。  
      

  7.   

    当然,class文件中有个属性为版本号,这个应该是跟jvm对应的。
      

  8.   

    我试了一下,下面的代码用JDK1.4编译后,在JVM5.0的环境下是可以正常运行的。import java.util.Vector;
    import java.util.Enumeration;public class MiniTest
    {
    public static void main(String[] args)
    {
    Vector list = new Vector();

    list.add("AAAAAAA");
    list.add("BBBBBBB");
    list.add("CCCCCCC");

    Enumeration enum = list.elements();

    while (enum.hasMoreElements())
    {
    System.out.println(enum.nextElement());
    }
    }
    }
      

  9.   

    一般看来,1.4的class文件在1.5的平台上运行是没有问题的。可以这么认为吗?
    找不到官方的说明,客户要求调查JVM1.4和JVM1.5的差异,有没有权威文档来作为证据阿。
      

  10.   

    http://java.sun.com/j2se/JM_White_Paper_R6A.pdf
    这有一个老版本向新版本的迁移指南。
    自己在sun的java网站上找找吧,可以看一些白皮书之类的资料。
      

  11.   

    http://java.sun.com/javase/technologies/compatibility.jsp
    The Java Platform, Standard Edition(Java SE) is strongly compatible with previous versions of the Java platform. Each version of Java SE has upwards binary-compatibility with the previous version, except for the incompatibilities noted in the documentation. Java SE does not support downward source compatibility, however: If source files use new language features or Java SE platform APIs, they will not be usable with an earlier version of the Java platform.The documentation describes any compatibility issues between the current version and the version immediately preceding it. 
    下面有相关的不兼容的说明。
    自己看看吧。
      

  12.   

    http://java.sun.com/j2se/1.5.0/compatibility.html
    今天学到不少东西,高兴,呵呵。
      

  13.   

    感谢ZangXT!我去看看你给的资料。