提示:这里可以添加学习目标
例如:一周掌握 Java 入门知识
学习内容:
------
- 了解 Java 发展史和其特点特性。
- 掌握环境搭建(JDK 与 eclipse 下载安装)
- 学习如何编写代码
- 了解 Java 特性,JDK 和 JRE 等概念
------
一、Java的起源:SUN 公司为了抢占市场先机,在 1991 年成立了一个由詹姆斯·高斯林(James Gosling)领导, 名为“Green”项目小组,目的是开发一种能够在各种消费性电子产品上运行的程序架构。他们开发了一种名 为“Oak”的面向对象语言。
后来,OaK 语言因为缺乏硬件的 支持而无法进入市场,从而被搁置一旁。
1994 年,项目小组看到了浏览器在未来的发展前景,于是决定将 OaK 应用于万维网。1995 年, 他们用 OaK 语言研发了一种能将小程序嵌入到网页中执行的技术——Applet,由于 Applet 不仅能嵌 入网页,还可随同网页在网络上进行传输,这让无数的程序员看到了 OaK 这门语言,与此同时,OaK 正式更名为 Java。从此,Java 在互联网的推动下火了。
最终,1996 年 1 月,SUN 公司推出了 JDK1.0。
二、Java的体系特点Sun 公司把 Java 体系分为三个方向:
Java SE:Java Platform,Standard Edition
标准版:各应用平台的基础,桌面开发和低端商务应用的解决方案。
Java EE:Java Platform,Enterprise Edition 企业版:以企业为环境而开发应用程序的解决方案
Java ME :Java Platform, Micro Edition 微型版:致力于消费产品 和嵌入式设备的最佳解决方案
其实,Java并不擅长去做一些桌面应用上的开发,它更擅长用于服务器上的开发,也就是我们的Java EE,以企业为环境而开发应用程序的解决方案。JavaME在之前用于一些嵌入式的设备的开发,现在相对较少了。
三、Java的特性一种纯面向对象的编程语言。
一种与平台无关(跨平台)的语言。(它提供了在不同平台下运行的解释环境)
一种健壮的语言,吸收了 C/C++语言的优点。
有较高的安全性。(自动回收垃圾,强制类型检查,取消指针)
四、Java跨平台原理
JVM其实相当于一个翻译官,将.class文件翻译成操作系统可执行的指令。
1、Java 虚拟机(Java Virtual Machine)
JVM现在我们可以称之它是一个跨语言的平台。作为JVM虚拟机来讲目前能够在JVM上跑的语言太多了,据调查能有100多种。所谓的JVM虚拟机本身也是一种规范,Linux上有Linux的实现,JVM帮你屏蔽了这些操作系统的底层。
扩展:JVM是一台虚构出来的计算机,既然它是一个虚拟的计算机,你就可以想像成一层单独的机器,那么它就会有自己的CPU,有自己的指令集,汇编语言。
2、JVM 垃圾回收器(Garbage Collection) GC
不再使用的内存空间应当进行回收-垃圾回收。
在 C/C++等语言中,由程序员负责回收无用内存。
Java 语言消除了程序员回收无用内存空间的责任:JVM 提供了一种系统线程跟踪存储空间的分配情况. 并在 JVM 的空闲时,检查并释放那些可以被释放的存储空间。
垃圾回收器在 Java 程序运行过程中自动启用,程序员无法精确控制和干预。
六、JDK、JRE、JVMJDK、JRE、JVM这三个到底是一个什么样的关系,
看图可能一时半会不明白,我解释一下:
Jvm叫java的虚拟机只是来执行的,就是你所有东西都弄好后它来执行;JRE运行时环境,java想要在操作系统上运行,除了虚拟机外,java那些核心类库你得有,如果那些核心类库没有的话你跑不起来;JDK是java开发工具包,包含JRE和JVM
七、提升内功
整个java虚拟机是以class文件为核心的,这个class文件是什么。我今天来分析一下。
整个class文件的格式就是一个二进制字节流,这个二进制字节流是由java虚拟机来解释的。
来看这个最简单的小程序,不用再看里面已经没有什么东西了,我要讲的是这个东西编译后会是一个class文件。
package com.legend.jvm.bytecode
public class ByteCode{ }
这是它的编译版本,这时再看看它的反编译版本,就能看到区别了。它会自动的帮你加了构造方法默认的无参构造,其实任何文件打开里面全是0101,不管你是png,jpg,txt也好打开全是0101.以下是它的反编译版本
package com.legend.jvm.bytecode
public class ByteCode{ public ByteCode(){ }}
这个class文件如果用16进制编辑器sublime打开的话,会发现里面全是十六进制的数字(0-f)
映入眼帘的就是一堆16进制的数字,而这,就是我们class文件的真实模样。也就是说,整个class文件的格式就是个二进制的字节流,这个字节流怎么解释就看由谁来解释了,这个东西是由java虚拟机来解释。



