网站首页 > java教程 正文
谈谈Java的起源和发展
程序设计语言的发展
第一代语言:机器语言 0011 1100 ……
第二代语言:汇编语言 ADD 12,0x13
第三代语言:已经到了高级语言阶段,面向过程的语言 ,C ,Basic
第四代语言:面向对象的语言,Java ,C#,C++
第五代语言:SQL语句
java大概诞生于1995年初,Sun公司把java发布到互联网上,免费提供给大家使用
1996年1月23日,Sun发布了JDK1.0
关于Java的更多历史,这里就不过多介绍了……
Java的几个版本:
JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版)
JavaEE(J2EE)(Java 2 Platform,Enterprise Edition,java平台企业版)
JavaME(J2ME)(Java 2 Platform Micro Edition,java平台微型版)。
Java的特点:
1.java的风格类似C++,从某种意义上讲,java是C++的一个变种
2.java摒弃了C、C++中的容易引发错误和难以理解的指针,结构,以及内存管理等
3.java提供了丰富的类库,很方便开发程序
4.java是完全面向对象的语言,支持 继承,重载,多态等面向对象的特性
C++是面向对象和面向过程的混合语言, C是纯面向过程的语言
5.java是一种强类型的语言,比C/C++检查还要严格,java区分大小写字母
6.java提供了自动垃圾回收机制gc,有效避免了C、C++的内存泄漏问题
7.java禁止非法访问内存,因为java没有指针,内存的申请和释放
8.跨平台,java的源代码编译成结构中立的中间格式,这种格式与机器无关,只要在安装有JVM(java虚拟机)
的电脑上,都能运行这种与机器无关的中间文件,.class ,
java一次编译,到处运行
9.对于不同的操作系统,会有不同的java虚拟机,这也就决定了java的可移植性
10. java支持多线程,简单理解,如果是单核CPU,那么会通过时间片轮转的方式,多线程执行程序,如果是多核CPU,那么就可以
理解为,两个或多个线程同时运行。
谈谈Java9最受期待的五大新特性
虽然Java9要等到明年才正式发布,但是现在网上已经有了各种各样的有关Java9新特性的文章了,今天小编也将为大家分享除了通常猜测之外的一些很值得期待的5个新特性。
1.Java + REPL = jshell
之前我们猜测Kulla项目是否会在Java 9中准时发布,现在已得到官方确认,Java9中将会有称为jshell的新命令行工具,它会添加本地支持和以Java方式对REPL(交互式解释器)进行推广。这就意味着,如果你想只运行几行Java代码,就不必把它包装进一个单独的工程或者方法了。
同时,你也可以忘记掉哪些分号了:
-> 2 + 2
| 表达式的值是4
| 将临时变量$1的类型设为int
还有一些像REPL加载项一样的替代品会增加到流行的IDE和解决方案中,就像Java REPL网页控制台。但目前为止,还没有官方的或者合适的方式来这么做。jshell在早期的版本中已经可以用了,等着你给它来个测试运行。
2、微基准测试要来了
由Alexey Shipilev开发的Java微基准测试套件在其进化的下一阶段,将加入Java作为官方基准解决方案。从事Java开发的人,肯定都很喜欢在Takipi做基准,所以一套标准化的执行方式是很值得大家期待的。
JHM是一组用来编译、运行和分析nano/micro/milli/macro基准的套件。当涉及到精确基准评估,对结果产生很大影响的能力将备受关注,比如预热时间和优化。当以微秒或纳秒计时的情况下尤其如此。所以,如果想要更加精确的结果来帮助跟踪基准以做出正确的决定,JMH是最佳的选择——并且现在它已经成为Java9的同义词了。
3、G1会成为新的默认垃圾收集器吗?
之前很多人对Java都存在一个误解:Java只有一个垃圾收集器,而事实上它有4个。Java 9中,仍有一个运行提议,关于替换由Java 7引入的G1默认垃圾收集器(并行/吞吐量收集)的讨论。通常来说,G1被设计来更好地支持大于4GB的堆,并且不会造成频繁的GC暂停,但当暂停发生时,往往会处理更长时间。
4、未来是HTTP 2.0
官方的HTTP 2.0标准是几个月之前被批准的,基于Google的SPDY算法构建。SPDY已经展示了相对HTTP 1.1巨大的速度提升,范围在11.81%到47.7%之间,并且它已经存在于大多数现代的浏览器中了。Java 9将全面支持HTTP 2.0,并且为Java配备一个全新的HTTP客户端来替代HttpURLConnection,并且同时还实现HTTP 2.0和websockets。
5、进程API得到了巨大的推动
到目前为止,通过Java来控制和管理操作系统进程能力有限。例如在早期版本的Java中,为了做一些简单的事情,像得到进程PID,要么访问本机代码,要么用某种神奇的临时解决方法。此外,还可能需要一个对于每个平台提供不同实现来保证你得到正确的结果。
而Java 9中,除了获取Linux PID的代码,现在都这样来获取:
public static void main(String[] args) throws Exception {
Process proc = Runtime.getRuntime().exec(new String[]{ "/bin/sh", "-c", "echo $PPID" });
if (proc.waitFor() == 0) {
InputStream in = proc.getInputStream();
int available = in.available();
byte[] outputBytes = new byte[available];
in.read(outputBytes);
String pid = new String(outputBytes);
System.out.println("Your pid is " + pid);
}
}
转向像这样的代码(同样也支持所有的操作系统):
System.out.println("Your pid is" + Process.getCurrentPid());
这一更新将扩展Java与操作系统交互的能力:全新的直接操作PID、进程名和状态的方法,操作JVM线程和进程等等能力。
谈谈 Java 的未来
未来Java还会有哪些重大改变谁也说不准,不过相信Java会吸取其他语言的优势来改进自己,这点相信不会另Java爱好者失望的。下面是书中的一些未来猜想
1.集合
集合比数组功能更强大,不过也确实了部分数组的有点,比如我们可以用下面的方法声明一个数组
Double []a = {1.2,3.4,5.9};
却不好用如此简单的方法声明map等集合,后续可能会支持使用新方式声明集合,如:
Map<String,Integer> map = #{"Raoul" -> 23,"Mario" -> 40,"Alan" -> 53};
2.更多的类型推断
最初在Java中,我们使用一个变量或方法都需要同时给出它的类型,随着时间的推移,这种限制被逐渐放开了,首先你可以在一个表达式中忽略泛型参数的类型,通过上下文决定其类型。比如:Map<String,String> map = new HashMap<String,String>();
在Java7之后就可以缩略为 Map<String,String> map = new HashMap<>();
其次,利用同样的思想,可以将由上下文决定的类型交由一个表达式决定,即由Lambda表达式决定,如
Function<Integer,Boolean> p = (Integer x) -> booleanExpression; 省略类型后可以简化为 Function<Integer,Boolean> p = x -> booleanExpression;
这两种情况都是由编译器对省略的类型进行推断的。
Scala和C#都允许使用关键词var替换本地变量的初始化声明,编译器会依据右边的变量填充恰当的类型,以后Java中也可能会支持这种方式。
3.更加丰富的泛型形式
目前泛型中只支持对象,而不支持基本类型,如果Java支持ArrayList<int>这种类型的泛型,那么你就可以在堆上分配由简单数据值构成的ArrayList对象了,不过这样一来ArrayList容器就无法了解它所容纳的到底是一个对象类型的值,比如String还是一个简单的int值,比如42。
某种程度上看,这并没有什么危害。不过问题还是存在,那就是垃圾回收,因为一旦确实了ArrayList中内容的运行时信息,JVM就无法判断ArrayList中的元素13到底是一个Integer的应用(可以被垃圾回收)还是int类型的简单数据(几乎可以说是无法跟踪的)。
C#语言中,ArrayList<String> ArrayList<Integer>以及ArrayList<int>的运行时表示在原则上就是不同的,即使他们的值是相同的,也伴随着足够的运行时类型信息,这些信息可以帮助垃圾收集器判断一个字段值到底是引用还是简单数据,这呗称为具化泛型。
4.对不变性更深层的支持
目前来说我们使用final来表示不可变,不过final并未真正意义上达到这个目标,比如我们用final修饰数组,只是数组的引用不会变,却不能阻止数组中的值发生改变,修饰一个List也不能阻止像list中添加元素,删除元素等。那么我们如何解决这个问题呢,由于函数式编程对不能修改现存数据结构有非常严格的要求,所以它提供了一个更强大的关键字,比如transitively_final,该关键字用于修饰引用类型的字段,确保无论是直接对该字段本身的修改,还是对通过该字段能直接或间接访问到的对象的修改都不会发生。
总结
以上是对JAVA历史由来以及未来发展总结,分享给大家,希望大家可以了解什么是JAVA历史由来以及未来发展。觉得收获的话可以点个关注收藏转发一波喔,谢谢大佬们支持。(吹一波,233~~)
猜你喜欢
- 2024-09-11 Java 9最终发布可能会推迟8周,到9月21日
- 2024-09-11 JAVA9模块化详解(一)——模块化的定义
- 2024-09-11 java 9 更新内容整理(java基础知识点整理)
- 2024-09-11 轻松上手Java 9模块化开发核心原则与实践
- 2024-09-11 Java 9 揭秘-模块化系统(二)(java9安装教程)
- 2024-09-11 Java9系列第8篇-Module模块化编程
- 2024-09-11 Java 9揭秘-模块依赖(十二)(java9模块化为啥没大规模使用)
- 2024-09-11 Java 9揭秘-模块依赖(七)(java9是什么版本)
- 2024-09-11 Java9新特性Jigsaw和Jshell(java9 模块化 系统)
- 2024-09-11 Java9新特性中的模块化到底是什么
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)