Java 到底有哪些不好或者说比如其他语言的地方呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kideny
V2EX    Java

Java 到底有哪些不好或者说比如其他语言的地方呢?

  •  1
     
  •   kideny 2016-10-26 12:33:23 +08:00 9296 次点击
    这是一个创建于 3277 天前的主题,其中的信息可能已经有所发展或是发生改变。

    java 有哪些不足,还有那些地方是需要改进的呢?

    45 条回复    2020-01-19 15:56:28 +08:00
    Cbdy
        1
    Cbdy  
       2016-10-26 12:41:18 +08:00
    Java 的泛型不好,不如 C++和 C#。
    有一些历史遗留的繁琐的设计模式的问题。
    有类似 int 、 char 、 float 这种原生类型。

    几乎没法改进,除非像 python2 -> python3 大改,但是你也看到 python 社区的现状了。
    wyntergreg
        2
    wyntergreg  
       2016-10-26 13:03:30 +08:00
    内存管理
    hooluupog
        3
    hooluupog  
       2016-10-26 13:04:21 +08:00
    Generics ;
    first-class function ;
    value type ;
    NullPointerException ;
    这几个感觉是影响比较大的。其他的不是那么有所谓。
    kideny
        4
    kideny  
    OP
       2016-10-26 13:19:43 +08:00
    @wyntergreg 安卓吃内存,是因为这个吗?
    kideny
        5
    kideny  
    OP
       2016-10-26 13:19:55 +08:00
    @hooluupog 英文回答,溜啊。
    yidinghe
        6
    yidinghe  
       2016-10-26 14:02:48 +08:00 via Android   1
    Java 在语法方面的改进可以说是很谨慎的,不是它不愿意改,而是大家的接受需要一个过程,看 Python 就知道。 Java 8 已经出来这么久了,很多开发者甚至对 lambda 表达式毫无概念。 Java 在这之前也推了很多代替旧功能的新 API ,例如 NIO , Paths , LocalDateTime , JavaFX ,但是有多少人认真去学了呢。反观前端社区,对新技术如痴如狂,这才是有活力的社区。
    maomaomao001
        7
    maomaomao001  
       2016-10-26 14:07:34 +08:00 via Android
    看 kotlin
    jp5490
        8
    jp5490  
       2016-10-26 14:10:04 +08:00
    前端太灵活了,所以各种框架~
    x8
        9
    x8  
       2016-10-26 14:14:49 +08:00   3
    murmur
        10
    murmur  
       2016-10-26 14:17:24 +08:00   2
    Java 好就好在 别的语(qian)言(duan)还在热衷于造轮子的时候, Java 已经坐拥一个帝国
    问题也是没有什么国家是十全十美的,有战乱还有起义还有不满
    imcxy
        11
    imcxy  
       2016-10-26 14:24:04 +08:00
    没什么需要更新的,抄 C#就行了, C#有各种语言的开发经验,还有钱。让 C#去创新,踩坑!等成熟了拿过来。。

    这十来年不都这么过的么~有啥问题~
    inisun
        12
    inisun  
       2016-10-26 14:24:44 +08:00 via Android
    @yidinghe 只能说 6 这版本太多人用了,函数式编程本来就不是大众的玩意吧, lambda 对大多数程序员来讲还没以前的写法直观, N IO 感觉都成面试必问了,而且新的玩意不是想用就用,就是 struts 这种大规模使用的都出过不少事了
    WhyAreYouSoSad
        13
    WhyAreYouSoSad  
       2016-10-26 14:27:17 +08:00
    @imcxy 为什么说他抄 c#? for example
    hcymk2
        14
    hcymk2  
       2016-10-26 14:29:15 +08:00
    锤粉和暴白.
    zhuangzhuang1988
        15
    zhuangzhuang1988  
       2016-10-26 14:35:02 +08:00
    <Java is dead, long live Ceylon, Kotlin>
    ZiLong
        16
    ZiLong  
       2016-10-26 15:24:25 +08:00
    - 简单,代码类似白话文,只要你英语稍微好点,基本就能看懂代码了.但是由此被人诟病代码嗦,打字打得手都痛了;
    - 庞大的生态,并且是很多领域的上佳之选(比如 android,大数据,web 应用开发)
    vghdjgh
        17
    vghdjgh  
       2016-10-26 15:41:05 +08:00   1
    1 、语法嗦
    2 、语法表达能力弱
    3 、大部分使用者有过度设计和滥用设计模式的倾向
    lixiaohan
        18
    lixiaohan  
       2016-10-26 15:44:35 +08:00
    没觉得有什么不好,作为大多数人的第一门语言,已经够好了,学好 java 再学习其他语言,顺手拈来
    murmur
        19
    murmur  
       2016-10-26 15:54:37 +08:00
    其实说这个问题很大一部分原因是 java 的第三方类库太牛逼了 除了花哨的语法之外(妈的 c#的语法特性那么多每次都被批判也没见人粉 c#,说语法特性的是最虚伪的) 两套类库(apache utils/guava)基本把语法坑都填平了
    更不要说拉到 tomcat 里就能用的那些重量级跑车
    反观 XodeJS 估计至少几百个 xode_modules 才能搞定
    gowk
        20
    gowk  
       2016-10-26 16:09:55 +08:00
    都发展这么多年了,各种问题都有现成的解决方案,手到擒来的事,除了繁琐一点,其实说起来挺好用的。
    新项目看情况适当考虑别的语言,如 Python , Go
    q397064399
        21
    q397064399  
       2016-10-26 16:18:14 +08:00
    基本上没什么大问题, 仅从语言本身来讲
    泛型
    (确实是个问题,但是问题不大,这么多年不也好好的过来了,何况绝大部分写业务代码 码农们 你 TM 哪有那么多算法需要跟数据类型剥离开来的)
    嗦 (本来就是设计用 IDE 写代码的语言,方便后来人阅读,你非要用记事本装逼,我也没办法)
    拉曼达 (这个与 Java 本身相违背, Java 的设计 包括 J2EE 大家都看得到,驼峰名字能有多长就有多长,好处呢?基本上英语过关,没学过什么代码, Java 代码也能看得懂,而且各种高级别的语法糖真的有意义么?这么多年 C 语言没更新语法糖 不活得好好的)
    语法很笨拙 (在这种有 IDE 的年代,多敲一个不会死人)
    Trim21
        22
    Trim21  
       2016-10-26 17:55:33 +08:00 via Android
    @murmur 连续打错两个字母我还以为出了一门新语言。。。
    altairkuma
        23
    altairkuma  
       2016-10-26 18:16:49 +08:00
    问题就是 Java 的使用者认为 Java 没什么不好。或者认为那么多人都用了这么多年,好不好就这样了。
    lululau
        24
    lululau  
       2016-10-26 18:32:45 +08:00 via iPhone
    对我来说, Java 的最大问题是各种库,包括标准库和各种第三方库,代码写得太抽象,看不懂。。。
    murmur
        25
    murmur  
       2016-10-26 18:43:33 +08:00
    @lululau JAVA 是跟 C++画平行线的语言,是可以作为课本基础学习的,所以底层还得有灵活性,怕抽象直接上 Apache Utils 和 guava
    lydhr
        26
    lydhr  
       2016-10-26 19:20:24 +08:00
    本身运行在 jvm 上,这就是为什么 android 手机感觉比 ios 慢, android 就相当于在手机上开一个虚拟机用
    cjyang1128
        27
    cjyang1128  
       2016-10-26 19:44:54 +08:00
    写复杂的业务逻辑不如脚本语言来的方便,因为 jdk 很多 API 设计的比较底层,或者说不太好用,需要借用其他第三方库才能达到相同的开发速度。比较好的就是不用学很多新框架,或者说用来做后台服务的语言其实不需要这么多框架,稳定是最重要的。所以我觉得服务就用 Java 写好了,前台就用脚本语言,相得益彰。
    enenaaa
        28
    enenaaa  
       2016-10-26 19:56:54 +08:00 via Android
    @lydhr 跟这没什么关系, oc 也是运行在 llvm 上。不爽的话,两边都可以用本地代码库。 android 慢最大原因是流氓太多。
    MetaGen
        29
    MetaGen  
       2016-10-26 20:53:39 +08:00 via Android
    @lydhr jvm 慢? hotspot 可以说是优化做的最好的虚拟机了,基本可以吊打一票动态语言。当然安卓用的是 dalvik 不是 hotspot ,不过不管怎样都不能把锅甩给 java
    NordicShaw
        30
    NordicShaw  
       2016-10-26 21:00:03 +08:00
    语法稍显嗦。
    sudoz
        31
    sudoz  
       2016-10-26 21:19:32 +08:00
    @yidinghe 场景不一样, Web 业务层面,后端的影响面更大,事故会更严重,前端再怎么玩也就是表现层的东西,玩花活玩砸的代价成本没有后端那么高
    oaix
        32
    oaix  
       2016-10-26 21:20:34 +08:00
    泛型擦除
    Allianzcortex
        33
    Allianzcortex  
       2016-10-26 21:34:48 +08:00
    @inisun NIO/New I/O,不搞 Java SE / Web 开发这块的人不知道很正常啊。。。
    linux40
        34
    linux40  
       2016-10-27 08:18:24 +08:00 via Android
    能玩的就只有注解和反射,可是这两个特别难用。。。
    YzSama
        35
    YzSama  
       2016-10-27 11:01:00 +08:00
    @zhuangzhuang1988 来个总结把。视频太长上班不能看 XD.
    coetzee
        36
    coetzee  
       2016-10-27 12:03:44 +08:00
    从一些语法特性来看,的确是比较保守的预言,可玩性较差,但是反过来看,意味着语言自身的语法特性限制会使工程化更强一点,毕竟不会导致太多的黑魔法语法。

    不过很多 JVM 语言可以满足你的语言猎奇心理,我认为做工程化的东西 Java 足够,如果想要更强的语义性语言,那么上 Groovy 或者 Scala ,既能使用各种奇技淫巧,又可以使用丰富的 Java 库和框架。

    总之,现在 Java 界是一个 JVM 生态的群殴体系,而且开源社区发展和商业发展都是不错的。
    sorra
        37
    sorra  
       2016-10-27 12:34:32 +08:00
    Java 提供了坚实的语言基础, JVM 提供了高效的运行环境。 JVM 语言群殴让你一边尝鲜一边做出有用的东西。
    Kotlin 改进了 Java ,包打 Android 和后端,轻松学会,热心人士翻译了文档 http://kotlindoc.com/
    lydhr
        38
    lydhr  
       2016-10-27 12:51:37 +08:00
    @enenaaa 流氓指?
    kamikat
        39
    kamikat  
       2016-10-27 13:27:58 +08:00
    个人意见
    Java 最主要的缺点是用的人太多,满大街都能写。
    JVM 最主要的缺点是泛型不是真泛型。
    ccjeaty
        40
    ccjeaty  
       2016-10-27 14:04:54 +08:00
    用的人太多, 没有优越感了?
    pangliang
        41
    pangliang  
       2016-10-27 15:11:27 +08:00
    楼上说的太对了, 用的人太多, 感觉自己也用一样的东西就太 low 了, 一定要用一点与众不同的东西来提升 B 格
    changwei
        42
    changwei  
       2016-10-27 23:49:02 +08:00
    刚好前天有人在 SegmentFault 上吐槽了 java , https://segmentfault.com/q/1010000007266289?_ea=1290319 这是我的回答

    我觉得 JAVA 对于初学者来说,更多的认识都存在于 myeclipse 之类的 IDE 上,甚至很多人用 IDE 开发了多年,都不知道 JAVA 究竟是怎么编译出来的,也不知道 jre , jdk 是干什么的,我觉得这才是最大的悲哀。

    java 语法本身没什么问题,如果要拿 php 来说, php 本身就是脚本语言,弱类型语言,是用开发效率换执行效率, java 则相反,两个语言解决的方向就不一样,没有可比性。

    java 的包,类库命名长但是规范,但是对于英文不好的新手来说学起来可能是吃力的关键。 jsp 的环境配置和中文支持对新手来说还是比较困难。

    这些说到底,还是 IT 教育本身的问题,不能怪 JAVA 。
    Kaiv2
        43
    Kaiv2  
       2018-10-12 17:35:58 +08:00
    @Cbdy 原生类型有什么问题呢?
    Cbdy
        44
    Cbdy  
       2018-10-12 19:58:51 +08:00 via Android
    @Kaiv2 比如 Valhalla,Boxing 的出现
    tt67wq
        45
    tt67wq  
       2020-01-19 15:56:28 +08:00
    老夫不爱用 ide,这就没法写 java 了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3426 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 10:37 PVG 18:37 LAX 03:37 JFK 06:37
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86