Java的常识

1.java的发展史

### 1991 年

Java 的历史要追溯到 1991 年, 由 Sun 公司带领的开发小组, 想设计一种小型的计算机语言,主要用于有线电视转换盒这类的消费设备。 由于这类设备的处理能力和内存都非常有限,所以语言就必须设计的非常小且能够生成紧凑的代码。 另外,由于不同的厂商会选择不同的 CPU, 因此很重要的一点就是这种语言不应该与任何特定的体系结构绑定。这个项目被命名为 “Green”。

Sun 公司的人都有 Unix 的应用背景, 所以开发的语言用了 C++ 为基础。并把这种语言称为 “Oak”, 后来, Sun 公司的人后来发现, Oak 是一种已经有的计算机语言的名字, 于是, 将其改名为 “Java”。

### 1992 年

1992 年, Green 项目发了第一个产品,这个产品可以提供非常智能的远程控制,遗憾的是, Sun 公司对这个产品并不感兴趣。

### 1993 年

1993 年,Green 项目(新名字 “First Person 公司”)在一这一整年以及 1994 年上半年, 一直苦苦寻求买家购买他们的技术。 然后一个也没有找到, 然后在 1994 年,First Person 公司解散了。

而且在这一年,1994年4月20日,一条64K的国际专线从中科院计算机网络中心(NCFC工程)通过美国Sprint公司连入Internet,实现了中国与Internet的全功能连接。从此中国被国际上正式承认为第77个真正拥有全功能Internet的国家。

当这些在 Sun 公司发生的时候, Internet 的万维网也在日渐发展壮大, 当时的万维网关键是把浏览器超文本页面转换到屏幕上。 在 1994 年大多数都在使用 Mosaic, 这是 1993 年出自伊利诺伊大学超级计算中心的一个非商业化的 Web 浏览器。 在1994 年中期,Java 语言的开发者意识到, 要是能够建立一个相当酷的浏览器, 在客户/服务器主流框架中, 浏览器恰好需要我们完成一些工作: 体系结构中立、实时、可靠、安全。这些问题在工作站环境中并不太重要。 所以决定开发浏览器。

### 1995 年

实际的浏览器是由 Patrick Naughton 和 Jonathan Payne 开发的,并演变为 HotJava 浏览器. HotJava 浏览器采用Java 编写,为了炫耀 Java 语言的超强能力。这个浏览器可以在网页中执行内嵌的 Java 代码。 也就是 Java Applet。这一 “技术证明” 在 1995 年 5 月 23 日的 SunWorld'95 大会上展示,同时引发了人们对他的追逐, 一直延续延续到现在。诞生几个月后, 就超过了 10 万人下载 Java 语言。

### 1996 年

1996 年初, Sun 发布了第一个 Java 1.0 版本。 但是这个版本 Java 1.0 并不能用来进行真正的应用开发。虽然后来 Java 1.1 弥补了其中很多的不足和明显的缺陷。大大改进了反射能力, 并未 GUI 编程增加了新的事件处理模型,单是它仍然有很大的局限性, 并没有为 Java 的黄金时期到来做好准备。

**JDK 1.0**  开发代号为 Oak ( 橡树 )。

### 1997 年

1997 年 2 月, 发布了 Java 1.1。 JavaOne 会议召开, 参与者逾一万人, 创下了当时全球同类会员规模记录。

**JDK 1.1**  引入的新特性包括:

- 引入JDBC(Java Database Connectivity);

- 支持内部类;

- 引入Java Bean;

- 引入RMI(Remote Method Invocation);

- 引入反射(仅用于内省)。

### 1998 年

1998 年 JavaOne 会议的头号新闻就是发布 Java 1.2 版本, 将这个早期玩具式的 GUI 和图形工具包括一些工具包。 在这个版本发布的 3 天后, Sun 公司的市场部将它改名为更加吸引人的 “Java 2 标准版软件开发 1.2 版”。

也就在这个时候, 除了标准版(Standard Edition)J2SE 之外, Sun 公司还推出了另外两个版本: 一是, 手机嵌入式设备“微型版”(Micro Edition)J2ME。另一个是用于服务器端的处理“企业版”(Enterprise Edition)J2EE。

**JDK 1.2** 开发代号为Playground(操场)

- 引入的新特性包括:

- 引入集合(Collection)框架;

- 对字符串常量做内存映射;

- 引入JIT(Just In Time)编译器;

- 引入对打包的Java文件进行数字签名;

- 引入控制授权访问系统资源的策略工具;

- 引入JFC(Java Foundation Classes),包括Swing 1.0、拖放和Java 2D类库;

- 引入Java 插件;

- 在JDBC中引入可滚动结果集、BLOB、CLOB、批量更新和用户自定义类型;

- 在Applet中添加声音支持。

### 1999 年

1999 年 4 月 27 日, HotSpot 虚拟机发布。

### 2000 年

2000 年 5 月 8 日, J2SE 1.3 发布。

**JDK 1.3**   开发代号为Kestrel(红隼)

- 引入的新特性包括:

- 引入Java Sound API;

- jar文件索引;

- 对Java的各个方面都做了大量优化和增强。

### 2001 年

2001 年 9 月 24 日, J2EE 1.3 发布。

### 2002 年

2002 年 2 月 26 日, J2SE 1.4 发布, 标准版 1.3 和 1.4 版本对最初的 Java 2 版本做出了增量式的改进,提供了不断扩展的标准类库。 提高了性能, 并且还修复一些 bug。在这个期间, 原先对 Java Applet 和客户端应用的炒作逐渐消退, 但是 Java 则成为服务器应用端的首选平台。

并且在这个版本上出现了大量的开源框架。

**JDK 1.4**  开发代号为Merlin(隼)

- 引入的新特性包括:

- XML处理;

- Java打印服务;

- 引入Logging API;

- 引入Java Web Start;

- 引入JDBC 3.0 API;

- 引入断言;

- 引入Preferences API;

- 引入链式异常处理;

- 支持IPv6;

- 支持正则表达式;

- 引入Image I/O slot machine API。

### 2004 年

2004 年 9 月 30 日, 下午 18:00, J2SE 1.5 发布。 这成为了 Java 语言的里程碑,这个版本对 Java 语言做出了重大的改进,为了表示该版本的重要性, 这个版本原来定位 1.5 版, 在 2004 年的 JavaOne 大会之后, 版本直接升为 5.0,对外宣布 Java SE 5.0。内部还是使用 Java 1.5。 这个版本加入了泛型的支持,另外受到了 C# 的启发, 还增加了几个很有用的语言特性: for each 循环、自动装箱、注解、枚举、可变长参数等。

**JDK 1.5**  开发代号为Tiger(老虎)

- 引入的新特性包括:

- 引入泛型;

- 增强循环,可以使用迭代方式;

- 自动装箱与自动拆箱;

- 类型安全的枚举;

- 可变参数;

- 静态引入;

- 元数据(注解);

- 引入Instrumentation。

### 2005 年

2005 年 6 月,JavaOne 大会召开,Sun 公司公开 Java SE 6。并且,对 Java 的各种版本进行更名,取消其中的数字“2”:J2EE 改名为 Java EE,J2SE 改名为 Java SE,J2ME 改名为Java ME。单内部版本不变化还沿用之前的写法。一直延续至今。 这个版本没有对语言方面进行修改, 而是做了其他性能改进, 并增强了类库。

### 2006 年

2006 年 12 月, Sun 公司发布了 Java EE 6, 并且宣布, 将 Java 语言作为免费软件对外发布。使用 GPL v2 (GNU General Public License v2) 协议下公开了源码。并且建立了 OpenJDK 组织对这些源码进行独立管理。除了极少量的产权代码外(Encumbered Code,这部分代码大多是 Sun 公司本身也无权限进行开源处理的),OpenJDK 几乎包括了 Sun JDK 的全部代码外,OpenJDK 的质量主管曾经表示,在 JDK 1.7 中,Sun JDK 和 OpenJDK 除了代码文件头的版权注释之外,代码基本上完全一样,所以 OpenJDK7 与 Sun JDK 1.7 本质上就是同套代码库开发的产品。

**JDK 1.6**  开发代号为Mustang(野马)

- 引入的新特性包括:

- 支持脚本语言;

- 引入JDBC 4.0 API;

- 引入Java Compiler API;

- 可插拔注解;

- 增加对Native PKI(Public Key Infrastructure)、Java GSS(Generic Security Service)、Kerberos和LDAP(Lightweight Directory Access Protocol)的支持;

- 继承Web Services;

- 做了很多优化。

### 2009 年

JDK 1.6发布以后,由于代码复杂性的增加、JDK开源、开发 JavaFX、经济危机及Sun 公司收购案等原因,SUN公司在JDK发展以外的事情上耗费了很多资源,JDK的更新没有再维持两年发布一个主版本的发展速度。并且在 2009 年 4 月 20 日,被 Oracle 以 74 亿美元收购 Sun 公司,取得了 Java 的商标版权(Java语言本身并不属于哪个公司所有,它由JCP组织进行管理,尽管JCP主要是由Sun 公司或者说 Oracle 公司所领导的)。也就在这两年 Java 的开发停滞了一段时间。一直到了 2011 年。

**JDK 1.7**  开发代号是Dolphin(海豚)

- 引入的新特性包括:

- switch语句块中允许以字符串作为分支条件;

- 在创建泛型对象时应用类型推断;

- 在一个语句块中捕获多种异常;

- 支持动态语言;

- 支持try-with-resources;

- 引入Java NIO.2开发包;

- 数值类型可以用2进制字符串表示,并且可以在字符串表示中添加下划线;

- 钻石型语法;

- null值的自动处理。

### 2011 年

2011 年 7 月,JavaSE 7 发布。但是很多规划在这个版本的特性,其中 Lambda 项目 ( Lambda 表达式、函数式编程)、Jigsaw 项目(虚拟机模块化支持)、动态语言支持、GarbageFirst 收集器和 Coin 项目(语言细节进化)等子项目都没有实现在这个版本中, 而是用了 Oracle 公司实行的 “B计划”。

### 2014 年

2014 年 3 月,JavaSE 8 发布。 这个版本, 在近 20 年中这个版本变更最大, Java SE 8 包含了 “函数式” 编程方式,可以很容易的表述并发执行的计算。 这个版本也是现在企业中使用范围最广的一个版本。 就想一开始说的那样, 能跟上时代的进步, 就不会被淘汰。

**JDK 1.8**  开发代号是Spider(蜘蛛)

- 支持 lambda支持;

- 增强日期与时间API的功能;

- 对垃圾回收的性能也进行了改进;

- 并且移除了permgen区。

- Lambdas表达式与Functional接口

- 接口的默认与静态方法

- 方法引用

- 重复注解

- 更好的类型推测机制

- 扩展注解的支持

### 2017 年

2017 年 7 月,Oracle 公司将发布 JDK 9。这个版本算是比较大的调整,加入了很早之前就规划的模块化功能。并且对整个 JDK 基于模块进行了重新编写。Java 9 提供了轻量级 JSON API; 使用 G1 作为默认的垃圾收集器,替代了之前默认使用的 Paralel GC; 引入了 jShell 这个交互性工具。并且全面支持 HTTP 2.0。

也就是在这一年,2017 年 8 月,Oracle 决定将 Java EE 移交给开源组织,最后 Eclipse 基金会接手。

由于甲骨文不允许开源组织用 Java 的名号,于是 Eclipse 选出了 "Jakarta EE" 和 "Enterprise Profile" 两个后续名字,最终前者以 64.4% 的票数获胜。

也就是说,Java EE 已经正式更名为 Jakarta EE(雅加达)。

### 2018 年

从 2018 年开始, 每6个月就会发布一个 Java 版本, 以更快地引入新特性。这里又分为 LTS 版和最新版。 生产环境中最好只使用 LTS 版本, 因为这个版本更加稳定, 维护周期更长。

2018 年 3 月 21 日, Java 10 发布。

2018 年 9 月 25 日, Java 11 LTS 发布。

### 2019 年

2019 年 2 月 Java 12 发布

2019 年 9 月 Java 13 发布

### 2020 年

2020 年 3 月 17 日,Java 14 发布。

2020 年 9 月 15 日,Java 15 发布。

### 2021 年

2021 年 3 月 16 日,Java SE 16 发布。

2021 年 9 月 14 日,Java SE 17 LTS 发布。

这个是继 Java 11 之后的有一个长期支持版本, 并且直接支持到了 2029 年 9 月。这可能是下一个 Java 8。所以学习的话, 可以直接学习这个版本。当然也可以直接学习 Java 17 这样的话, 对于工作来说 3 年之内不会有大的变化。

重要事件如下图

2.Java的三大平台

1.J2SE 标准版(Standard Edition)

后改名javase

2.J2EE 手机嵌入式设备“微型版”(Micro Edition)

  2008年前后逐渐消失,javaee

3.J2ME 用于服务器端的处理“企业版”(Enterprise Edition)

 后改名javame

3.JDK、JRE、JVM是什么?安装jdk后为什么要配置环境变量?

1.JDK(java Development Kit) java开发工具包

(1)编译器

(2)解释器

(3)源代码

2.JRE(Java Runtime Environment)java运行时的环境

3.JVM(java Virtual Machine) 可运行java字节码文件的虚拟机

JDK包含JRE,JRE包含了JVM

安装JDK后配置换环境变量方便计算机找到jdk来调用里面的javac和java。、

4.java语言跨平台的原理

5. Java程序执行的过程

1.由程序员编写java源代码*.java文件

2.使用javac编译生成*.class字节码文件

3.使用java解释执行

6.javac和java的区别

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。

javac工具读由java语言编写的类和接口的定义,并将它们编译成字节代码的class文件。

javac负责的是编译,将.java文件编译成.class文件,当执行javac的时候,会启动java的编译器程序,对指定的扩展名为.java的文件进行编译,生成了jvm可识别的字节码文件,即.class文件(java的运行程序)
java负责的是运行,当执行java时,会启动jvm加载运行时所需要的类库,并执行.class文件

7.Java文件和class文件的区别

.java文件是一个文本文件,就是我们用java语言写成的代码。

.class文件是一种二进制文件,由.java文件通过javac这个命令(jdk本身提供的工具)编译生成的一个文件,可以由jvm(java虚拟机)装载(类装载),然后对java解释执行,就是运行时的程序。

8.Java的基本数据类型

9.byte、short、int、long的区别

整数(byte、short、int、long)

byte -128——127

short -2^15——2^15-1

int -2^31——2^31-1

long -2^63——2^63-1

浮点数(float、double)

单精度 float 4个字节 32位 

双精度 double 8个字节 64位

字符

char

*计算机存储字符的方式

每个字符都有一个特定的字符集编号例如A的编号为65,计算机将65转换为2进制1000001存入计算机中。

布尔

boolean

10.计算机中最小存储单位

内存和硬盘中

最小单位:比特 一个bit只能存储一个0/1

每8个比特是一个最小存储空间称为byte(字节)

11.bit,B,KB,MB,GB,TB,PB分别是什么单位,换算是什么?

1B(字节)=8bit比特(位)
1 KB千字节 = 1024 B字节
1 MB兆字节 = 1024 KB千字节
1 GB吉字节 = 1024 MB兆字节
1TB太字节 = 1024GB吉字节

1PB拍字节=1024TB太字节

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值