设为首页收藏本站

爱吱声

 找回密码
 注册
搜索
查看: 8862|回复: 43
打印 上一主题 下一主题

[科普知识] 简单聊聊Java 7吧

  [复制链接]
  • TA的每日心情
    开心
    2023-1-5 00:48
  • 签到天数: 2591 天

    [LV.Master]无

    跳转到指定楼层
    楼主
    发表于 2011-8-10 01:05:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 老兵帅客 于 2011-8-9 12:35 编辑
    ! R: p9 J1 C3 V; W* R4 w! n% e7 }" [! A# w3 e$ n. T- J
    咱们这里没有科技版面,那我就把这个帖子发在天下杂谈的科技分类里面好了。7 w& c( _+ Z! U

    2 R* [/ {4 L6 G5 S- z' ?/ O0 ~) T! eJava 7已经于7月28日终于正式发布了,虽然它之前几次跳票,并且已经有很长时间的测试版存在。我抽时间看了一下这东西的新特性,找自己感兴趣的摸了摸,下面就是一点体会,贴出来抛砖引玉哈。
    0 j/ \4 _% U- O7 o  x& U: H; `' N; w2 p
    Java 7的新特性有很多,但是我只关心它语言级别上的新特性,其它的我用不着,于是略过,有兴趣的读者可以补充哈。下面就是我关心的新特性:7 U/ X  `' S( f: N3 ?
    . V& f2 O: A) }7 P1 {
    一。switch可以用string类型的数据作分类了。这点很好,因为有很多的时候,我们得到的是string类型的数据,希望用它来直接获得对应分类的相关处理。在以前这是不可能的,你需要把它转化为int/long这类类型,否则switch是不干活的,现在你则可以一步到位了。我没有对该特性做实现方法分析,但是我怀疑它只是用string的hash code来做障眼法,因为这样就无须在字节码方面作任何修改,直接可以用以前的jvm。
    % w7 j- W( e1 ?  p
    ( [& }4 O5 M( k- |! e6 `# T5 [% C' G  @二。多个Exception的同时处理。以前你需要对同级的不同Exception单个处理,现在则可以一起处理了,也就是一次写一样的代码来处理它们,而不象以前那样需要把这些代码放到一个method来重用。这个特性的具体实现我估计也是障眼法,也就是实际上还是老的字节码处理办法,只是在源程序级的编译方作了些手脚而已,但是无论如何还是方便了许多。
    % @9 r, Y) W: f
    7 g, K, O) U, }+ z" A三。数字常量的二进制/十六进制易读表示,它指的是你可以用0x16bc_1a32来表示一个十六位整数。用这样的写法你可以方便自己的阅读,可以按照字节(八位)甚至四位的方式来阅读。但是个人感觉这属于锦上添花,有没有都差不多的事情,重要性远没有前两个高。
    9 w6 y% Y3 w. g) j0 _; v. z! ^
    8 U1 J5 w2 p; B, L/ b3 O6 e个人感觉,这个版本的语言级新特性并不很多,完全没法和Java 5那样的大手笔相比,但是很实用,这个版本的关键好处在于性能提高。8 x( P9 b& U8 I
    . l% @% _" q" Q( U+ u
    顺便说一下目前Java IDE对它的支持程度,Netbeans据说已经正式支持它了,这里的意思是对语言特性的编辑级支持。Eclipse Indigo/3.7目前的正式版本还不行,你需要用它的nightly build,这个从7月29日的nightly build开始就可以了。但是nightly build只提供基本版,其它的版本估计要等到3.7.1出来了。
    7 w4 l# P& P9 k5 v# j

    评分

    参与人数 1爱元 +5 收起 理由
    万里风中虎 + 5

    查看全部评分

  • TA的每日心情
    擦汗
    16 小时前
  • 签到天数: 2856 天

    [LV.Master]无

    沙发
    发表于 2011-8-10 02:42:28 | 只看该作者
    IT门外汉仰望一下!
  • TA的每日心情
    慵懒
    2019-6-5 13:01
  • 签到天数: 115 天

    [LV.6]出窍

    板凳
    发表于 2011-8-10 08:55:57 | 只看该作者
    混JAVA饭的码农飘过~
    * C# G! C; L: S1 V, h
  • TA的每日心情
    奋斗
    2017-11-19 12:44
  • 签到天数: 149 天

    [LV.7]分神

    地板
    发表于 2011-8-10 10:10:04 | 只看该作者
    一.switch 支持string了,挺好。
    5 L! n; y( g8 [1 x0 U/ p二.多个异常同时处理,不太明白。
    . l" i" _& \: z- D是下面形式?- V. K% ~  C2 m& O; v: S
    try {
    : q2 R" o. G: X; V8 l( Z$ [...
    ) Y" Y" w- O- i8 f}0 m1 k) d* b: K3 U5 s# |% {' w
    catch (XxxxException A, YyyyException B, ZzzzException C) {
    ( j% L6 t1 e, ^9 _6 i, b, X1 X; W..... @, I7 U7 {. u8 }/ V3 C9 D) ^
    }
    " l( B0 {. n( s* u4 r
    9 ^" R, e% C+ a% J* G6 ?. R+ S6 N第三个同感,可有可无。。。
  • TA的每日心情
    开心
    2023-10-20 22:53
  • 签到天数: 12 天

    [LV.3]辟谷

    5#
    发表于 2011-8-10 10:15:35 | 只看该作者
    最中意第一条特性,不过等单位用java7得800年后,俺这里还有的项目还是1.4的呢···
  • TA的每日心情
    开心
    2023-1-5 00:48
  • 签到天数: 2591 天

    [LV.Master]无

    6#
     楼主| 发表于 2011-8-10 10:15:56 | 只看该作者
    回复 不感冒 的帖子
    , g) k# J* [% e- d7 [; F. }5 P& _# G# L4 x
    对,就是你想象的那样。前两个很有用,第三个多余。
  • TA的每日心情
    开心
    2023-1-5 00:48
  • 签到天数: 2591 天

    [LV.Master]无

    7#
     楼主| 发表于 2011-8-10 10:16:24 | 只看该作者
    回复 明月回春 的帖子* v5 i2 n( ]/ u. e8 Q$ I4 E

    - G  j0 s* j& q+ Q3 `3 w多说两句嘛
  • TA的每日心情
    慵懒
    2019-6-5 13:01
  • 签到天数: 115 天

    [LV.6]出窍

    8#
    发表于 2011-8-10 11:14:53 | 只看该作者
    其实吧,我最近在想.net和java平台的区别到底是什么。每次做一个基于java平台的系统,最先面对的问题就是架构。开源的,商业的,山寨的,根据预算规模和项目级别先挑一个。而.net只有一个问题就是用还是不用。多则惑,少则灵。选择太多也不好,而且java人员的技术背景也是五花八门。! V; U9 X1 C$ T( s5 W* c. W
    我以为.net的优势在于时间快,人员素质整齐。虽然单一,但是熟练度也高,学习曲线不是那么陡峭。适合中小项目的开发,不过受平台限制,一般也就仅限于此。/ d3 P; d" w$ L  {3 W
    而java的优势在于空间。能够在各种平台灵活部署,甚至各种平台间形成集群,这个好像别的还真不行。只是流派太多,如果一直使用开源框架,上手别的分支还好。可是如果一开始就使用的山寨的封装框架,可能换个环境就不知所措了。。。大型的政府或银行机构的项目至少我见到过的多是java的系统。还有一些老的系统是C的,都处于维护期。  i# q) V3 Z# J/ \- g
    不过java或者其他的新语言发展的确实比较快,很多新概念都是首先提出来的。如果是用来学习和研究,再好不过了。
    " C: X, z! l# P至于语言本身倒是差别不大,区别在于用途。每次我想给自己做个什么小东西自己用的时候,面对java都有无所适从的感觉。。。
  • TA的每日心情
    开心
    2023-1-5 00:48
  • 签到天数: 2591 天

    [LV.Master]无

    9#
     楼主| 发表于 2011-8-10 21:55:29 | 只看该作者
    回复 明月回春 的帖子
    ! l1 K) }* b) B9 \% O( r" T6 m* R" B
    嘿嘿,探讨一下哈。
    6 ?3 q/ o4 p/ r5 d. `0 M, `' H
    # y2 |1 ?& F$ D6 [其实Java和C#的设计理念相当不同,早先的后者只是前者的微软抄袭版本,但是后来则完全不同了,微软加进去了很多很奇怪的特性,例如在语言级别提供数据访问能力,而该类功能传统上是由类库或者函数库来提供的。也就是说,微软的设计理念出了问题,它违反了语言的基本设施应该尽可能简练,而附加的功能通过类库或者函数库来提供这一原则。
    0 D! H' o, a' J& G5 }, v1 L+ K8 n# |
    , b% z) V; K4 ^' u/ h- DJava和.Net的本质区别在于思想,前者是自由民主、自由竞争那套,它来自于unix世界,而后者则是唯一可用的官方资源,这里咱们不涉及政治而只论技术。其结果就是前者有大量的可替代选择,也就是第三方类库,而后者则基本没有。对于技术人来说,其实只要你掌握了思想,那些可替代资源的掌握以及选择都不困难;但是如果连选择都没有的话,有些事情就很难作了。
    ) t# C* V$ l" p: H3 B% Z) s% f- |4 e6 n2 h, J
    至于开源,其实那只是个神话,它的主要用处是方便偷东西,对于客户化和修复错误用处并不大,因为适应曲线和regression test都是问题。

    点评

    毁产品专家来了  发表于 2011-8-10 23:40
    Java社区比较活跃,当年ORACLE收购SUN的时候你是什么心情呢?  发表于 2011-8-10 23:06
  • TA的每日心情
    开心
    2023-1-5 00:48
  • 签到天数: 2591 天

    [LV.Master]无

    10#
     楼主| 发表于 2011-8-11 08:49:40 | 只看该作者
    回复 qqq54 的帖子
    , @6 P  O' f* M7 {4 k+ ~  m% L6 F5 V; Z3 C5 `
    我这里也一样,从1.4到java 6,用上7起码是明年的事情了。另外,目前支持java7的java ee服务器只有glassfish 3.1.1,因此要等到websphere和weblogic都支持了,它才会有市场吸引力。
  • TA的每日心情
    慵懒
    2019-6-5 13:01
  • 签到天数: 115 天

    [LV.6]出窍

    11#
    发表于 2011-8-11 13:44:02 | 只看该作者
    回复 老兵帅客 的帖子% ?; v; i# Y! a8 U8 P; A
    : O0 y$ Y; b/ [- c8 d# n( s3 O
    呵呵,我主要是从项目与用途的角度看的。# ^) x- ^+ u4 C2 f
    具体到技术层面,我只会用java。。。而且水平一般。.net的感受来自对其他人与项目的观察与交流。基本就是上面说的那些。
    * s7 q3 ^8 E6 D3 ~% R6 L' }0 s.net基本上是一个封闭的平台,也没有考虑过跨平台。所以,在效率上具有优势,你说的那个语言级访问数据库,我真不知道。不过这个也可以看作是一种效率的优化,至少是一种尝试。+ e, i3 ^* k0 T) v5 r
    java最初也是面向桌面应用的,我当初学的时候没事就画个图神马的,虽然后来就再也没有用到过。在我看来,java真正的革命性特性是反射(具体哪个版本出现的已经想不起来了)。没有反射,jdbc、参数化配置以及各种华丽的框架就都扯淡了。没有了框架后来的主战场——企业级应用也就不可能出现了。现在吃java饭的基本都是J2EE,主要的推手就是18M。开源社区也有18M的影子,比如eclipse是哪来的?而且开源社区开花多,结果少。营利模式基本靠着被收购,否则就是练手,赚吆喝。
    4 j# W+ D: T/ X1 W虽然java是SUN发明的,但是真正赚到钱的却是18M与Oracle。现在,18M的股价已经超过M$了。SUN去那里了呢 ?4 X3 T6 P& e' r7 A- g$ T5 L
    java技术上百花齐放,业务上一枝独秀。实际上本来就是在90年代中后期抬出来对抗M$的。一种语言范围内的自由是假自由,平台的自由更自由,至于什么是真自由,这个我也不知道。。。* M+ F0 Y- }+ P) X! z- b$ y
  • TA的每日心情
    慵懒
    4 天前
  • 签到天数: 1477 天

    [LV.10]大乘

    12#
    发表于 2011-8-12 12:28:51 | 只看该作者
    回复 明月回春 的帖子8 j  B2 M$ V7 I  q! B$ k: I4 s

    3 K; o/ d/ u8 o" T7 x% V% a0 `主要的问题是可替代性。微软的东西,万一碰到某个东西他不支持或者支持的不好,就很悲痛了。

    点评

    两个原因要用ms的,一个是营业范围局限在客户端,所以跨平台的必要性不大。二是为了引入竞争。两者之间,后者为大。  发表于 2011-8-16 09:40
    但是微软的东西离不开windows,这个很要命,因此只要考虑跨平台它就没戏了。  发表于 2011-8-16 03:09
    倒也不是,真见过电信有ms做大项目的。  发表于 2011-8-12 22:05
    各有所长。一般的小项目.net够了。大型项目没有人敢用ms的东西,万一被卡脖子就完蛋了  发表于 2011-8-12 20:25
  • TA的每日心情
    开心
    2023-1-5 00:48
  • 签到天数: 2591 天

    [LV.Master]无

    13#
     楼主| 发表于 2011-8-16 03:11:29 | 只看该作者
    回复 明月回春 的帖子/ p. @* J9 `3 G4 i7 k$ n5 K: G" [
    - W) D4 m) x. \
    客气了。3 |: F5 q& k( v9 Y# i6 S

      m6 ^9 N" t# K; ^$ N6 m9 s; W3 k/ x从运行效率上来看,.Net表现一般,没有Java服务器模式好。语言一级支持数据访问和效率无关,是为了抄袭其他语言的特性,赶时髦而已。

    该用户从未签到

    14#
    发表于 2011-8-16 23:06:47 | 只看该作者
    回复 明月回春 的帖子
    ) ^: g7 [) R& u# V1 ], p
    - V: k. e3 O" z' K" v4 J2 S语言级访问数据库说的是Linq to Sql吧。那东西基本上就是个语法糖,而且微软也已经停止支持了,转而发展Entity Frameworks去了。
    ! A6 y- D+ R9 p2 m  f  D& f0 dLinq用起来还是很爽的,用类似于sql的集合操作语言,用来对付collections和xml dom之类的东西写起来真的很省力(当然效率是个问题)

    点评

    十分认同。太奇怪了,数据访问搞成语言特性干什么。  发表于 2011-8-17 12:27
  • TA的每日心情
    开心
    2023-1-5 00:48
  • 签到天数: 2591 天

    [LV.Master]无

    15#
     楼主| 发表于 2011-8-17 10:31:41 | 只看该作者
    回复 并非马甲 的帖子7 t$ E) g3 i% W% F  [$ l5 v
    5 {. Y  ~% S0 y/ M/ F: n0 S" C+ n
    但是从语言设计讲是个败笔,因为数据访问不应该是语言特性。
  • TA的每日心情
    开心
    2023-1-5 00:48
  • 签到天数: 2591 天

    [LV.Master]无

    16#
     楼主| 发表于 2011-8-17 10:35:40 | 只看该作者
    回复 明月回春 的帖子( Z6 P2 m& j" Z: B: A
    3 d4 U% y9 o' y- V
    顺便说一下,reflection不是java的发明,至迟在C++里面已经有类似的东西了,虽然比较原始。
  • TA的每日心情
    慵懒
    2019-6-5 13:01
  • 签到天数: 115 天

    [LV.6]出窍

    17#
    发表于 2011-8-17 11:02:21 | 只看该作者
    回复 老兵帅客 的帖子
    9 L! A  B2 g0 I; g) h) V3 |9 L7 T2 V, X' }( W- w/ d4 N$ i
    在wikipedia上搜了一下reflection C++。6 l* Y, E. ~7 W' Y' ~8 ]0 f+ D, u: F7 Y
    Qt/C++
    # g: Q$ o9 p3 k/ @% q8 I* m
    ! w, g3 b/ L- VQt framework extends C++ with its meta-language and provides reflection ability of member/method reference and query by name for Qt objects with QMetaObject class, which contains meta-information about the Qt objects.
    Objective-C is a reflective, object-oriented programming language that adds Smalltalk-style messaging to the C programming language.
    ' ]- f# E- q( t" a8 K5 M0 b; M
    貌似并不能直接支持,但是可以实现类似效果。
    6 \  D$ O; _0 r; ?* `( E1 ic++ reflection5 Z' c. [, [: L( l; ~
  • TA的每日心情
    开心
    2023-1-5 00:48
  • 签到天数: 2591 天

    [LV.Master]无

    18#
     楼主| 发表于 2011-8-17 11:22:08 | 只看该作者
    回复 明月回春 的帖子
    7 Z6 r# O, v% a7 q; }4 C
    ; }. \, b9 Z) h* A5 B我指的是C++/RTTI

    该用户从未签到

    19#
    发表于 2011-8-17 12:58:40 | 只看该作者
    回复 老兵帅客 的帖子
    - @- |( W8 {& a2 K6 |0 g# V3 L8 a! R1 j
    澄清一点,Linq和Linq to Sql不是同一个东西。
    8 c3 M8 x- ~5 k8 ]Linq是.NET引入的一种新的语言特性,是一种类似于sql的集合操作语法。Linq是个有意义的尝试,有了它对集合操作的coding效率大大提高了。Linq可以操作所有集合类型(例如System.Collections命名空间下的所有集合类),除了Linq to Sql之外,还有Linq to Xml, Linq to Dataset等等。! j; W5 N0 l! a  W2 i( t# u' Q

    ! x0 `  M" c6 i& S9 ^Linq to Sql是架构在Linq上的一层对数据库访问的支持。对数据库的访问还是通过API来做的。微软停止的是API的开发,Linq的语言特性是保留的。
  • TA的每日心情
    慵懒
    4 天前
  • 签到天数: 1477 天

    [LV.10]大乘

    20#
    发表于 2011-8-17 13:30:10 | 只看该作者
    回复 老兵帅客 的帖子" S% R4 A" l* O6 j, W" k

    : N" ^+ N& c/ N# q其实我仅对java 7 jvm虚拟机的性能改进有兴趣,大规模网站访问,有5%-10%提高就很高兴了。

    手机版|小黑屋|Archiver|网站错误报告|爱吱声   

    GMT+8, 2024-4-26 16:59 , Processed in 0.044793 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表