V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kideny
V2EX  ›  Java

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

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

    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
    前端太灵活了,所以各种框架~
    lizon
        9
    lizon  
       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   ·   实用小工具   ·   1037 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 19:58 · PVG 03:58 · LAX 11:58 · JFK 14:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.