我看Java二十年:它是如何永远改变编程的。

转自jdon的小文章:来自Infoworld的一篇纪念Java诞生20周年的文章。主要讲述了一些在今天习以为常但是在20年前却难以想象的情况。请记住,在1995年那时的编程不是一件很容易的事情,面向对象概念已经接受,但是很难实践,那时没有多少真正的面向对象语言,最多是将C代码粉饰一下,比如用class替代struct等,用这些技术编写的程序经常由于指针错误或内存泄漏崩溃,源代码仅仅能够在Unix不同版本之间移植,使用同样二进制代码运行在不同处理器和操作系统上简直是疯狂的笑谈。Java改变了这一切,第一次我们使用一种跨平台 垃圾回收和面向对象的编程语言进行产品化的编码,紧跟着Java的语言,比如最引人注目的C#,将Java创建的生产力提高到一个新高度。Java开天辟地实现其他语言没有的异常检测,Java也是第一个在原生字符类型和源代码中使用Unicode。java的核心力量是它为做好工作建立一套实践性的工具,它从早期语言导入好的主意,然后以让熟悉的格式包装它们,尽管,Java不是一个严格的C的超集合(C++和Objective-C是),移除了一些东西以后,Java变得更简单,更易于学习。Java并没有structs, unions, typedefs, 和header ,这是一个新的面向对象编程语言,没有被要求能够运行遗留老的代码,Java明智地忽略了一些在其他语言被尝试然后发现不足的一些特点,比如多重继承 指针运算和operator overloading,这种好的风格一直在Java中保持到现在。正如Martin Fowler所说:在软件开发领域从来没有一种语言被这么多人次和这么多行代码使用,这种语言就是Java。二十年以后,Java不再是新贵,它已经成为其他语言“造反”的对象,更轻量语言如Ruby和Python(banq注:还有Go语言与Rust语言的呢个)已经大举进入Java领土,特别是追求开发速度的创业工作。当然,Java也不是静止不动,也正在不断添加新的语言特点,比如函数语言的Lambda表达式等,这些新的编程方式还是Java领域新的概念。尽管还有很多程序员不知道Java,但是无论他们知道与否,今天每一个程序员已经受到它的影响。Java at 20: How it changed programming forever | I

点评:Java对每个程序员的影响可能还要首推Android安卓开发,因为后端开发语言选择越来越多,而前端客户端因为资源等影响,包括安卓

的普及度,随着智能终端的发展和万物联网,借助安卓平台,Java可能会实现当初Java applet的梦想。

博主自己的看法:

1、Java是C和C++的继承者和延伸

2、Java所谓的跨平台根本是个伪概念

3、Java的异常机制一方面带来好处,一方面也带来恶心

4、Java越做越难用了

5、现在Java应当分裂

时间: 2024-12-22 15:52:10

我看Java二十年:它是如何永远改变编程的。的相关文章

看Java中==、equals、hashCode的来龙去脉

我有一个哥们去参加了面试,面试官这样问一个Java问题: 你说一下java对象的equals方法调用什么方法呢?我这个哥们想了想,回答说"应该是比较的引用".听了这个答案之后,那个面试官摇头晃脑的说:"不对,你回答的不对,equals方法调用的是hashCode方法".于是乎,我那个技术还不错的哥们就悲壮地栽在这道题目上了. 今天晚上,西安历史上少有的热,那就好好总结一下这个题目的来龙去脉好了,也方便给后面的朋友们提个醒,不要栽在这么简单的问题上.你说这个面试官回答

从JVM的角度看JAVA代码--代码优化

从JVM的角度看JAVA代码–代码优化 从JVM的角度看JAVA代码代码优化 片段一反复计算 片段二反复比較 在JVM载入优化为class文件,运行class文件时,会有JIT(Just-In-Time)的介入,它会做进一步优化,这样就须要考虑是否可能被JIT优化. 片段一:反复计算 // 反复计算,这里b()被计算两次 Object a = b() == null ? "" : b(); // 优化代码 Object c = b(); Object a = c == null ? &

Java:过去、未来的互联网编程之王

Java对你而言是什么?一门你大学里学过的语言?一个IT行业的通用语言?你相信Java已经为下一次互联网爆炸做好了准备么?Java 一方面为嵌入式计算做了增强,而另一方面为实时应用做了精简,本文将介绍为什么 Java 是IoT(物联网)开发的最佳语言. 为嵌入式计算增强.为实时系统精简——为什么Java是最适合IoT的语言 自1969年至今,我们可以看到网络设备爆炸式的增长:从最初四个大学的计算机群构建成的ARPANET,直到现今互联网上有两亿活跃用户.而不 久之后的将来这一数字将会呈指数级的增

java笔记--使用线程池优化多线程编程

使用线程池优化多线程编程 认识线程池 在Java中,所有的对象都是需要通过new操作符来创建的,如果创建大量短生命周期的对象,将会使得整个程序的性能非常的低下.这种时候就需要用到了池的技术,比如数据库连接池,线程池等. 在java1.5之后,java自带了线程池,在util包下新增了concurrent包,这个包主要作用就是介绍java线程和线程池如何使用的. 在包java.util.concurrent下的 Executors类中定义了Executor.ExecutorService.Sche

看书小记8(《C专家编程》)

int setjmp(jmp_buf env); void longjmp(jmp_buf env, int val); 系统跳转函数 ,可以直接在函数之间跳转 (比goto 强大多了) 将上下文 ,就是cpu和内存的信息保存到env中 ,然后调用 longjmp的时候跳转到使用env中的信息 ,恢复上下文 .如果是第一回调用setjmp 它会返回 0,如果从longjmp 跳转过来的 ,那就返回 longjmp的参数 val,根据setjmp的返回值, 我们就可以决定执行可能发生错误的代码还是

看书小记6(《C专家编程》)

typedef不常见但值得一提的用途: 1. 用typedef来定义与平台无关的类型. 比如定义一个叫 REAL 的浮点类型,在目标平台一上,让它表示最高精度的类型为: typedef long double REAL; 在不支持 long double 的平台二上,改为: typedef double REAL; 在连 double 都不支持的平台三上,改为: typedef float REAL; 也就是说,当跨平台时,只要改下 typedef 本身就行,不用对其他源码做任何修改. 标准库就

看书小记5(《C专家编程》)

函数指针 1. 函数与函数指针类型要匹配: 2. 函数指针用来保存函数首地址,即可以通过该指针访问函数: 3. 函数指针可以指向一类函数,而不是一个函数,即可以重新赋值. int maxNumber(int a, int b) { return a > b? a: b; } void fileFunc(){ cout<<"fileFunc"<<endl; } void editFunc(){ cout<<"editFunc"

运维经验分享(四)--关于 java进程管理的服务控制脚本编程思路分析

运维经验分享作为一个专题,目前共7篇文章 <运维经验分享(一)-- Linux Shell之ChatterServer服务控制脚本> <运维经验分享(二)-- Linux Shell之ChatterServer服务控制脚本二次优化> <运维经验分享(三)-- 解决Ubuntu下crontab不能正确执行Shell脚本的问题(一)> <运维经验分享(四)--关于 java进程管理的服务控制脚本编程思路分析> <运维经验分享(五)-- 改进的java进程管

看书小记9(《C专家编程》)

哈希表简单实现,练个手 #include "stdafx.h" #include <iostream> using namespace std; #define HASHSIZE 12 typedef struct HashTable { int *elem; int count; }HashTable; int m = 0; void Print(HashTable* h) { for (int i = 0; i < h->count; i++) { cout