讨厌java
我认为Java语言的10大问题是:
1、缺少闭包(closure):我想这个不需要解释了。函数式编程已经存在几十年了,但最近几年,它们获得了越来越多的关注,最主要的原因,是它可以自然地编写并行程序。我部分的同意Joshua Bloch强调在Java中引入闭包的问题需要再想一想(BGGA提议的方式真的很糟),至少闭包的缺失,使得在Java中做任何真正的函数式编程都是不可能的。
2、缺少一等函数:这个问题与前一个有些关联,但我认为它更糟糕。在Java里,要达到类似效果的唯一方式,是使用著名的、丑陋悲惨的单方法匿名内部类,但这看上去的确是一个拙劣的方法。甚至在C#中,也通过代理机制,提供了一个更好的实现。
3、原生类型(Primitive types):如果在Java中一切皆对象,那是多么完美啊,但他们偏偏不这样设计。因而,这一点导致了一些问题,比如,不能把一个int放到集合(Collection)里,这个在Java5中通过自动装箱特性得到了解决(下面会提到)。它也造成了传值与传引用上的困扰,原生类型数据是通过值传给方法的(复制一份拷贝,然后传给函数),而真正的对象是通过传递(译注:其实是复制对象地址再传递,因此应该也是传值方式,只是由于函数内部可通过这个对象地址访问对象,因此效果上类似传引用)。
4、自动装箱(Autoboxing)和自动拆箱(autounboxing):这个特性是为了解决因原生类型的存在所导致的问题,在Java5引入的。它允许静默地转换原生类型到相应的对象,但这常常导致其它的问题。比如Integer可以为null,但int不能,因此这时JVM只能抛出一个难以调试的空指针异常(NullPointerException)。此外,它还可能导致其它奇怪的行为,就像下面的例子,我们就很难理解,变量test为什么是false:
Intger a = new Integer(1024);
Intger b = new Integer(1024);
boolean test = a b || a == b || a > b;
5、缺少范型具类化:范型是Java5引入的一个很酷的特征,但是为了保持与旧版本Java的兼容性,导致缺失某些重要的特性,尤其是不能在运行时反省范型的类型。例如,你有一个方法,接受List参数,如果传进来一个List,你却不能知道运行里该范型的确切类型。同理,你也不能创建范型数组。这意味着,尽管下面的代码看起来很自然,但却不编译不了:
List[] listsOfStrings = new List[3];
6、不可避免的范型警告:你有发现过自己陷入不可能去掉的关于范型的警告么?如果你像我一样大量使用范型,我打赌你碰到过。事实上,是这个问题的规模化症状,让他们认为需要引入一个特定的注解(@SuppressWarnings("unchecked"))来处理这种情况,我觉得,范型应该可能被设计的更好。
7、不能传void给方法调用:我得承认,这种给方法传递void的需求,乍一看有些怪异。我喜欢DSL,当我实现自己的DSL库(lambdaj)的一个特定特性时,我不得不需要一个方法声明成这样的签名:void doSomething(Object parameter),这里为这个方法传进来的参数parameter,是另一个方法调用的结果,它唯一的目的,是注册调用(的对象)自身,以可以在以后执行它。让我吃惊的是,即使println方法返回void,看上去也并没有一个好理由,不允许我把代码写成这样,:
doSomething(System.out.println("test"));
8、没有原生的代理机制:代理是一种非常有效和应用广泛的模式,但Java提供的代理机制,只针对接口,而不是具体类。这是为什么象cblib这样提供这种机制的库,被如此多的主流框架,如Spring和Hibernate,采用的原因。此外,由于cglib通过运行时创建被代理类的子类来实现的,因此这些种方式有一个众所周知的限制——不能代理final类,比如String。
9、差劲的Switch...case语句:Java规定,switch...case只能选择int和enum(Java5开始)。这一点如果跟更现代的语言如Scala相比,看起来简直太弱了。
10、受检查异常(Checked exception):类似原生类型,受检查异常也已经成为Java的一个罪孽之源。它迫使程序员必须做下面两件极其糟糕讨厌的事情中的一个:让你的代码里充斥大量的、糟糕难读的、容易出错的try...catch语句,而这样做的最大意义,只是将捕获的异常,包装成运行时异常,然后再重新抛出;或者是让大量的抛出声明子句污染你的API,让接口缺少灵活性和可扩展性。
真正的问题是,这里我提到的这几大主要问题,唯一的解决办法,是要做一个痛苦的决择,定义一套新的语言规范,放下当前版本的向后兼容性。我猜他们永远也不会这么做,虽然我相信,如果编写一个能够自动转换旧Java源码的程序,让它们与假设的新版本兼容,并不是很困难。最后,这就是我决定开始寻找一个更好的JVM兼容语言的原因。
Ⅱ 有哪6种人不适合学习java
1、智力水平低下者不适合做java编程
人的智力有高低,当然并不是说低智力的人就笨,而是因为编程是门需要高智力的工作,尤其是编程中的思想和算法逻辑,并不容易,不是哪个人都能很快的掌握的。一些人智力就低一些,脑子运算比较慢,他做这一行势必困难丛丛,但这恰恰说明,他的过人之处不在这,而是在其他方面,因为每个人都有特长,而只是他的特长不在编程这,那又何必往这个方向挤呢。
2、对新事物没有丝毫兴趣的刻板之人
这类人适合做研究、搞专研,比如从事考古行业、文献行业,但是如果要从事java编程开发的话,则是背道而驰。IT技术日新月异,需要从业者时刻关注新技术的产生和变化。更需要有不断改进的毅力和决心,固守尘封着往往落后人一拍,无所适从。
3、吃不得苦的花花公子
不管是“程序猿”还是“攻城师”,听起来都不像是吃喝玩乐的花花公子,IT行业不比传统企业,也许不讲吃苦耐劳的口号挂在嘴上,但确实不是清闲差事,除了要夜以继日的编码外,还要不断的提升和学习。做码工难易,而作码工的管理者也不见得轻松。所以,吃喝玩乐之徒势必在这行里混不好。
4、没耐心之徒
没耐心的人做java编程是最不靠谱的,一个优秀的软件需要程序员精明实效的优秀代码得以实现,一个程序员苦思数天,没准只为提升一段代码的运行性能;一个程序员也可能被一个微不足道的小bug折磨数天才得以解决。这对于没有耐心的人来说,无疑是噩梦。
5、缺乏理性思考和逻辑思维的人
世界上的人有的偏向于感性思考,有的更善于理性思考。做程序员恰恰需要理性思考能力和逻辑思维能力强的分,这样才能具备强大的分析能力和解决难题的能力,而一个非常感性缺乏理性的人断难在这一行里有所成就,他甚至寸步难行。
6、坐不住的人
程序员最离不开的就是电脑,而对于一些坐不住的人来说,让他长年累月面对电脑,必会厌烦。一个面对电脑十个小时乐此不疲的人和一个座10分钟都乱咋呼的,谁更适合做程序员?
其实想要知道自己是否适合学习Java编程,到动 力 节点上几节体验课,就知道自己是否适合了。对了。明年在深圳也要开分校了。留意下吧
Ⅲ 为什么讨厌 Java 的人比较多且易见
毋庸置疑java作为一门计算机编程语言,J2EE结构堪称完美,第一版软件可以做到如此满意度。毫无疑问,这个问题我们该站在程序员的角度考虑其合理性。
在互联网模式的持续不断修改的今天,互联网软件工程管理上的不足,持续的修修补补导致架构的破坏都一一显露出来。
归根结底就是网上铺天盖地的宣传和公司招聘太多了,用的人多的同时它的弊端诸如其结构和语言的质量低也会被无限放大,同时无味批判的也多,所以导致讨厌java的人较多且易见。
Ⅳ Java 是怎么变得令人讨厌的
几乎和它有关系的框架,即使号称轻量级最后都会变的笨重比如现在spring,当然和其他java框架比起来真的是轻了不少。除了臃肿,就是一些莫名阿妙的错误,C/C++,python这些错误大部分可以通过编译器得知错误原因,但是java,比如调用一个method A,A有好几种(Java的继承和重载导致了它能有好几种),一个是A(int a),另一个是A(int a,string b)。在代码的时候一旦选错就会冒出空指针错误,之后你会网络,但网络的结果肯定没有解决这个的。。。
然后是它的逻辑,说实话开始学java基础的时候感觉逻辑还是可以的,但是到了高级别用框架的时候,很多人都说框架简化的开发,其实本质是少写那几个JDBC重复语言,但是你又得多创建N个XML文件,相信我说框架简化JAVA开发的真的是够了。如果简化了开发?那么为什么JAVA后期工程师的称号是架构师而不是像C++那样直接称呼C++工程师呢?这点我想不言而喻了,框架并没有带来本质的简化,它用多出来的XML逻辑代替了之前手动敲的重复的代码!实质是代码量减少了,逻辑变复杂了。(这点改变感觉可有可无)。
还有就是人方面,目前大型企业普遍采用JAVA这是事实我无法辩驳,但很多高校为了就业统统一律JAVA为主,先不要说高校教育质量怎么样?这么依赖相当于抹杀了中国未来的某些可能是C/C++,PHP或者系统内核类的大牛,出来全他妈在哪里搞网页,这尼玛不是害人吗?而且,学JAVA的那些有几个真心想学,都是因为火就来了。。。而且按照JAVA语言的特性,不像C++开发项目越多约有经验,因为后期都是一样了,这几乎是给那些趁年轻来捞一票然后转会老本的其他专业或者本专业就打算干几年就跑的人提供了不可多得的平台。
我在读大学的时候就在思考,他们只教我JAVA,我30岁以后该怎么办?我深知自己资质平庸,所以若学java,30岁以后我肯定失业。这是我讨厌它的根本原因!java让我这样的人迷惘,它不像其他语言能有经验的积累!
不过最近ORACLE好像抛弃了JAVA,我想着这货的命运终于要到头了,可是我已经毕业了,我除了目前先做下JAVA我又能干嘛呢?这是另一个讨厌的原因,当我需要用你来养活自己的时候,你撑不住了。。。。
Ⅳ 讨厌java.lang.NoSuchMethodException: Action[/loginAction] does not contain specified method (check
form1.action="loginAction.do?method=doLogin";
改成form1.action="/loginAction.do?method=doLogin";
试试
Ⅵ 厌恶java..
建议你去看一下王垠!
清华梦的粉碎,完全用linux 工作等等写的和你现在的想法差不多,
你可以网络了解一下!
我是JAVA刚入门,互相了解一下
Ⅶ java开发的缺点有哪些
我认为Java语言的10大问题是:
1、缺少闭包(closure):我想这个不需要解释了。函数式编程已经存在几十年了,但最近几年,它们获得了越来越多的关注,最主要的原因,是它可以自然地编写并行程序。我部分的同意Joshua Bloch强调在Java中引入闭包的问题需要再想一想(BGGA提议的方式真的很糟),至少闭包的缺失,使得在Java中做任何真正的函数式编程都是不可能的。
2、缺少一等函数:这个问题与前一个有些关联,但我认为它更糟糕。在Java里,要达到类似效果的唯一方式,是使用著名的、丑陋悲惨的单方法匿名内部类,但这看上去的确是一个拙劣的方法。甚至在C#中,也通过代理机制,提供了一个更好的实现。
3、原生类型(Primitive types):如果在Java中一切皆对象,那是多么完美啊,但他们偏偏不这样设计。因而,这一点导致了一些问题,比如,不能把一个int放到集合(Collection)里,这个在Java5中通过自动装箱特性得到了解决(下面会提到)。它也造成了传值与传引用上的困扰,原生类型数据是通过值传给方法的(复制一份拷贝,然后传给函数),而真正的对象是通过传递(译注:其实是复制对象地址再传递,因此应该也是传值方式,只是由于函数内部可通过这个对象地址访问对象,因此效果上类似传引用)。
4、自动装箱(Autoboxing)和自动拆箱(autounboxing):这个特性是为了解决因原生类型的存在所导致的问题,在Java5引入的。它允许静默地转换原生类型到相应的对象,但这常常导致其它的问题。比如Integer可以为null,但int不能,因此这时JVM只能抛出一个难以调试的空指针异常(NullPointerException)。此外,它还可能导致其它奇怪的行为,就像下面的例子,我们就很难理解,变量test为什么是false:
Intger a = new Integer(1024);
Intger b = new Integer(1024);
boolean test = a < b || a == b || a > b;
5、缺少范型具类化:范型是Java5引入的一个很酷的特征,但是为了保持与旧版本Java的兼容性,导致缺失某些重要的特性,尤其是不能在运行时反省范型的类型。例如,你有一个方法,接受List参数,如果传进来一个List,你却不能知道运行里该范型的确切类型。同理,你也不能创建范型数组。这意味着,尽管下面的代码看起来很自然,但却不编译不了:
List[] listsOfStrings = new List[3];
6、不可避免的范型警告:你有发现过自己陷入不可能去掉的关于范型的警告么?如果你像我一样大量使用范型,我打赌你碰到过。事实上,是这个问题的规模化症状,让他们认为需要引入一个特定的注解(@SuppressWarnings("unchecked"))来处理这种情况,我觉得,范型应该可能被设计的更好。
7、不能传void给方法调用:我得承认,这种给方法传递void的需求,乍一看有些怪异。我喜欢DSL,当我实现自己的DSL库(lambdaj)的一个特定特性时,我不得不需要一个方法声明成这样的签名:void doSomething(Object parameter),这里为这个方法传进来的参数parameter,是另一个方法调用的结果,它唯一的目的,是注册调用(的对象)自身,以可以在以后执行它。让我吃惊的是,即使println方法返回void,看上去也并没有一个好理由,不允许我把代码写成这样,:
doSomething(System.out.println("test"));
8、没有原生的代理机制:代理是一种非常有效和应用广泛的模式,但Java提供的代理机制,只针对接口,而不是具体类。这是为什么象cblib这样提供这种机制的库,被如此多的主流框架,如Spring和Hibernate,采用的原因。此外,由于cglib通过运行时创建被代理类的子类来实现的,因此这些种方式有一个众所周知的限制——不能代理final类,比如String。
9、差劲的Switch...case语句:Java规定,switch...case只能选择int和enum(Java5开始)。这一点如果跟更现代的语言如Scala相比,看起来简直太弱了。
10、受检查异常(Checked exception):类似原生类型,受检查异常也已经成为Java的一个罪孽之源。它迫使程序员必须做下面两件极其糟糕讨厌的事情中的一个:让你的代码里充斥大量的、糟糕难读的、容易出错的try...catch语句,而这样做的最大意义,只是将捕获的异常,包装成运行时异常,然后再重新抛出;或者是让大量的抛出声明子句污染你的API,让接口缺少灵活性和可扩展性。
真正的问题是,这里我提到的这几大主要问题,唯一的解决办法,是要做一个痛苦的决择,定义一套新的语言规范,放下当前版本的向后兼容性。我猜他们永远也不会这么做,虽然我相信,如果编写一个能够自动转换旧Java源码的程序,让它们与假设的新版本兼容,并不是很困难。最后,这就是我决定开始寻找一个更好的JVM兼容语言的原因。
Ⅷ 如果讨厌JAVA能学好JSP吗
不一定,你走走出轨的棋会死啊?你要理解JAVA和JSP分别是什么。用JAVA能做出什么效果?能做像QQ界面的程序。JSP是做网页的。语言上来说是有联系。但是你要进行JSP的话不仅仅要学JAVA语言,还要学习 HTML 。你在Java的学习中学会类,接口,继承,封装就够你JSP使用了。但是不要讨厌这门语言。因为你要做JAVA程序员,JAVA的底层东西你必须知道的。