转贴:Java语言的十大问题及引申思考
转自:http://blog.163.com/gordonkkk/blog/static/63425684200962795039630/
从CSDN上看到一篇批评Java语言诸多问题的翻译文章,原文作者是Mario Fusco。他指出了Java语言落后于时代,积重难返的10个问题。看过之后引起了我的一些联想。下面列出他所说的10大问题。桔黄色字体是我一点点不成熟的思考。
1、缺少闭包(closure):我想这个不需要解释了。函数式编程已经存在几十年了,但最近几年,它们获得了越来越多的关注,最主要的原因,是它可以自然地编写并行程序。我部分的同意Joshua Bloch强调在Java中引入闭包的问题需要再想一想(BGGA提议的方式真的很糟),至少闭包的缺失,使得在Java中做任何真正的函数式编程都是不可能的。
闭包的定义和特性,Java里很难体会,因为Java里没有真正意义的闭包,我也是从JavaScript里对闭包有了大致的了解。Java是个逻辑严格自洽的语言,严密到了一定程度,以至于目前的Java里根本没有闭包的容身之处——闭包中引用的外围局部变量,到底放在堆栈中,还是托管堆中?他们的作用域和生存期如何处理?又该如何被GC回收?但闭包确实是好东西。即使我自认为是一个Java程序员,在写多了JavaScript代码又回到Java后,对于不能随时随地的写一段{}括起来的代码块,感觉很不自由。针对闭包问题,Java还是有自己能将就的办法,那就是内部类。至少还有内部类,至少内部类还有一部分的闭包特性,使得一些优雅的设计(如集合框架迭代器)能够存在。
2、缺少一等函数:这个问题与前一个有些关联,但我认为它更糟糕。在Java里,要达到类似效果的唯一方式,是使用著名的、丑陋悲惨的单方法匿名内部类,但这看上去的确是一个拙劣的方法。甚至在C#中,也通过代理机制,提供了一个更好的实现。
所谓一等函数,面向对象的Java没有似乎不能强求。但它带来的问题,就是Java里有时候策略模式的拙劣实现。C#作为一个高级语言,又是强类型的,也一样可以有delegate,匿名方法,甚至Lambda表达式。Java里就只能生造出一个单方法接口,new一个无意义的对象,来承载其中的函数。
3、原生类型(Primitive types):如果在Java中一切皆对象,那是多么完美啊,但他们偏偏不这样设计。因而,这一点导致了一些问题,比如,不能把一个int放到集合(Collection)里,这个在Java5中通过自动装箱特性得到了解决(下面会提到)。它也造成了传值与传引用上的困扰,原生类型数据是通过值传给方法的(复制一份拷贝,然后传给函数),而真�
相关文档:
package thread.lock;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* @file_name ReadAndWriteLockDemo.java
* @description 读� ......
1. 关于Connection Pool
JDBC本身不提供连接池技术,需要第三方库的支持。
在需要频繁获得连接的Application中最好用Connection Pool,如Web Application中
对于一般的Java Application则可以直接用JDBC连接数据库。
2. Java Application中连接DB2
安装DB2 Personal Edition V9之后,在其� ......
我现在已经大四了,学的是软件专业,我必须承认我们学校的软件专业很不好,所以大部分要靠自己。
以前从来没写过博客,这次在这里开博就是想通过csdn结识更多的学习JAVA的朋友,我深知自己的JAVA功底甚浅,所以只有孜孜不倦的习,和不厌其烦的发问才能使自己强大。
最近我也从网� ......
Java Applet 是用Java 语言编写的一些小应用程序,这些程序是直接嵌入到页面中,由支持Java的浏览器(IE 或 Nescape)解释执行能够产生特殊效果的程序。它可以大大提高Web页面的交互能力和动态执行能力。包含Applet的网页被称为Java-powered页,可以称其为Java支持的网页。
当用户访问这样的网页时,Ap ......
最近做java客户端 jre+installanywhere+jar 打包发布.exe安装客户端。打包出来无奈jre太大beta版程序只有几百k 可是jre打包下来有将近30M,在网上搜索精简版客户端,可是版本确实太精简了有些类没有,而这版本又和自己装的版本有不同,在网上找寻半天不得jre的旧版本最后终于找到,这里提供地址(java各版本下载地址� ......