JVM1.5和JVM1.4有什么区别?

zhousqy 2008-12-12 11:06:20
你好,请问JVM1.5和JVM1.4有什么区别? JDK1.4编译的class文件在JVM1.5运行下哪些方面会有影响?
...全文
1001 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
lihan6415151528 2008-12-12
  • 打赏
  • 举报
回复
路过学习
ZangXT 2008-12-12
  • 打赏
  • 举报
回复
java5增加的那些新特性,基本是编译器特殊处理了,class文件格式基本没什么变化。
虚拟机的改进一般是垃圾回收,对象管理等具体处理上的优化,跟class文件的兼容关系并不大。
ZangXT 2008-12-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 gongfuliang 的回复:]
就像我在1.4中定义一个变量名为:enum,这个是完全没有问题的。

但是在1.5中enum成为了关键字,那么你的class就不能在高版本中运行了。

在JDK版本升级的时候,还是需要仔细验证的。
[/Quote]
class文件中并没有enum这个东西,也是编译为特殊的类,这个没有影响。
zhousqy 2008-12-12
  • 打赏
  • 举报
回复
谢谢ls各位,还有没有补充的阿。
leo_bogard 2008-12-12
  • 打赏
  • 举报
回复
up
gongfuliang 2008-12-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 java2000_net 的回复:]
JDK1.4编译的class文件在JVM1.5运行 没有任何问题

反向肯定不行

内部区别,俺没有研究过。 不过JDK和JVM是关联的,JDK的新东西,在JVM里面肯定得支持才行。
[/Quote]

并不能说没有任何问题,就像我在1.4中定义一个变量名为:enum,这个是完全没有问题的。

但是在1.5中enum成为了关键字,那么你的class就不能在高版本中运行了。

在JDK版本升级的时候,还是需要仔细验证的。
gongfuliang 2008-12-12
  • 打赏
  • 举报
回复
晕死,没仔细看。

Java的版本原则上是向下兼容的,起码彼此相近的版本,高版本是兼容低版本的,如果相距太远的话,可能有的方法被设置成,不建议使用、或者被删除的话,或者低版本中的变量名等在高版本变成的关键字,那么就不能在高版本运行了。

但是高版本编译的文件不能在低版本上运行,会提示版本错误。

就LZ的问题来说,1.4的编译文件在1.5上运行基本来说是没有问题的。
老紫竹 2008-12-12
  • 打赏
  • 举报
回复
JDK1.4编译的class文件在JVM1.5运行 没有任何问题

反向肯定不行

内部区别,俺没有研究过。 不过JDK和JVM是关联的,JDK的新东西,在JVM里面肯定得支持才行。
haoxiongok 2008-12-12
  • 打赏
  • 举报
回复
还真没仔细了解过,关注下。。。。。
lshy168 2008-12-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gongfuliang 的回复:]
1.泛型(Generic)

Java在1.5之前一直没有相对应的功能。一个集合可以放任何类型的对象,相应地从集合里面拿对象的时候我们也不得不对他们进行强制得类型转换。猛虎引入了泛型,它允许指定集合里元素的类型,这样你可以得到强类型在编译时刻进行类型检查的好处。

2.For-Each循环

  For-Each循环得加入简化了集合的遍历,并且避免了强制类型转换。

3.自动装包/拆包(Autoboxing/unboxing)

  自动装包/拆…
[/Quote]
楼主问的是JVM不是JDK。
gongfuliang 2008-12-12
  • 打赏
  • 举报
回复
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排序的默认支持等。
fenghaolun 2008-12-12
  • 打赏
  • 举报
回复
学习 学习
小曦子 2008-12-12
  • 打赏
  • 举报
回复
学习了..呵
luoguofeng 2008-12-12
  • 打赏
  • 举报
回复
学习
gongfuliang 2008-12-12
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 ZangXT 的回复:]
赞楼上的动手精神,6楼只是没有把编译和运行两个过程分开而已。
[/Quote]

... 想想就到了1.5的编译上了,不好意思,差点误导
恋空 2008-12-12
  • 打赏
  • 举报
回复
飘过 学习
zhousqy 2008-12-12
  • 打赏
  • 举报
回复
感谢ZangXT!我去看看你给的资料。
cotton5i 2008-12-12
  • 打赏
  • 举报
回复
学习了~~~~
ZangXT 2008-12-12
  • 打赏
  • 举报
回复
http://java.sun.com/j2se/1.5.0/compatibility.html
今天学到不少东西,高兴,呵呵。
fuyueyue 2008-12-12
  • 打赏
  • 举报
回复
学习下
加载更多回复(10)

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧