01 Java入门

来源:互联网 发布:决对争锋网络剧 编辑:程序博客网 时间:2024/04/30 18:47

目录

  • 目录
  • Java入门
    • Java的三个版本
    • Java应用领域
    • Java历史
      • Java历史
      • Java大记事
      • JDKJREJCP
    • Java特点
    • Java如何进行编译解释运行等工作
      • helloworld 程序
      • 整个过程解析
    • Java技术的三大特性
      • 虚拟机
      • 垃圾回收
      • 代码安全

Java入门

Java的三个版本

  1. 标准版: JSE(Java Standard Edition)
  2. 微缩版: JME(Java Micro Edition)
  3. 企业版: JEE(Java Enterprise Edition)
  4. 三个版本间的关系

这里写图片描述


Java应用领域

  1. 桌面级应用,桌面级应用程序
  2. 企业级应用
    • 办公自动化OA,客户关系管理CRM,人力资源HR,企业资源计划ERP,知识管理KM,供应链管理SCM,企业设备管理EAM,产品生命周期管理PLM,面向服务体系架构SOA,商业智能BI,项目管理PM,营销管理、流程管理workFlow、财务管理……
  3. 嵌入式设备及消费类电子产品
    • java游戏,手持设备,智能卡……
  4. 其他: 数学运算、显示图形界面……

Java历史

Java历史

  • 在上世纪90 年代初,sun 公司有一个叫做Green 的项目,目的是为家用消费电子产品开发一个分布式代码系统,这样就可以对家用电器进行控制,和它们进行信息交流。詹姆斯·高斯林(James Gosling)等人基于C++开发一种新的语言Oak(Java 的前身)。Oak是一种用于网络的精巧而安全的语言。Sun 公司曾依此投标一个交互式电视项目,但结果是被SGI打败,Sun 打算抛弃Oak。随着互联网的发展,Sun 看到了Oak 在计算机网络上的广阔应用前景,于是改造Oak,在1995 年5 月以“Java”的名称正式发布,从此Java走上繁荣之路。
    当然提到Java 历史,不得不提的一个故事就是Java 的命名。开始“Oak”的命名是以项目小组办公室外的树而得名,但是Oak 商标被其他公司注册了,必须另外取一个名字,传说有一天,几位Java 成员组的会员正在讨论给这个新的语言取什么名字,当时他们正在咖啡馆喝着Java(爪哇)咖啡,有一个人灵机一动说就叫Java 怎样,得到了其他人的赞同,于是,Java这个名字就这样传开了。

Java大记事

时间 事件 1995年5月23日 Java语言诞生 1996年1月 第一个JDK 1.0诞生 1997年2月18日 JDK1.1发布 1998年12月8日 Java2企业平台J2EE发布 1999年6月 Sun发布Java三个版本:J2SE,J2EE,J2ME 2004年9月30日 JavaSE5.0发布 2006年12月 JavaSE6.0发布

JDK/JRE/JCP

  1. JDK(Java Software Develop Kit)
    • java软件开发工具包,主流的是Sun公司发布的JDK,除了Sun之外还有很多其他公司开发了自己的JDK,例如IBM,BEA还有GUN组织开发的JDK
  2. JRE(Java Runtime Enviroment)
    • java运行时环境,包括JVM标准实现及Java核心库
  3. JCP(Java community Process)
    • 是一个开放的国际组织,成立于1995 年,主要职能
      是发展和更新Java 技术规范、参考实现(RI)、技术兼容包(TCK)。Java 技术和JCP 两者的原创者都是SUN 计算机公司。组织成员可以提交JSR(Java Specification Requests),通过讨论、认可、审核以后,将进入到下一版本的规范里面。也就是说 JCP 是目前Java 技术发展事实上的控制者和领导者。

Java特点

  1. 简单地说,Java 具有如下特点:简单的、面向对象、平台无关、多线程、分布式、安全、高性能、可靠的、解释型、自动垃圾回收等特点。

  2. 平台无关
    所谓平台无关指的是:用Java 写的程序不用修改就可在不同的软硬件平台上运行。这样就能实现同样的程序既可以在Windows 下运行,到了Unix 或者Linux 环境不用修改就直接可以运行了。Java主要靠Java 虚拟机(JVM)实现平台无关性。
    平台无关性就是一次编写,到处运行:Write Once, RunAnywhere

  3. 分布式
    分布式指的是:软件由很多个可以独立执行的模块组成,这些模块被分布在多台计算机上,可以同时运行,对外看起来还是一个整体。也就是说,分布式能够把多台计算机集合起来就像一台计算机一样,从而提供更好的性能。

Java如何进行编译、解释、运行等工作

helloworld 程序

  1. 编写文件名为HelloWorld.java程序:

    public class HelloWorld{    public static void main(String[] args){        System.out.println("hellow world!!!")    }}
  2. 编译java源文件成为class文件

 javac HelloWorld.java
3. 运行class文件    
java HelloWorld
4. console查看

整个过程解析

这里写图片描述
1. 编写代码
首先把我们想要计算机做的事情,通过Java 表达出来,写成Java 文件,这个过程就是编写代码的过程。如上图所示的Hello.java 文件。
2. 编译
写完Java 代码后,机器并不认识我们写的Java 代码,需要进行编译成为字节码,编译后的文件叫做class文件。如上图所示的Hello.class文件。
3. 类装载(classload)
类装载的功能是为执行程序寻找和装载所需要的类。
ClassLoader能够加强代码的安全性,主要方式是:把本机上的类和网络资源类相分离,
在调入类的时候进行检查,因而可以限制任何“特洛伊木马”的应用。
4. 字节码校验(byte-code)
功能是对class 文件的代码进行校验,保证代码的安全性。
Java 软件代码在实际运行之前要经过几次测试。JVM 将代码输入一个字节码校验器以
测试代码段格式并进行规则检查--检查伪造指针、违反对象访问权限或试图改变对象类型
的非法代码。
注意—-所有源于网络的类文件都要经过字节码校验器
字节码校验器对程序代码进行四遍校验,这可以保证代码符合JVM 规范并且不破坏系统
的完整性。如果校验器在完成四遍校验后未返回出错信息,则下列各点可被保证:
- 类符合JVM规范的类文件格式
- 无访问限制异常
- 代码未引起操作数栈上溢或下溢
- 所有操作代码的参数类型将总是正确的
- 无非法数据转换发生,如将整数转换为对象引用
- 对象域访问是合法的
5. 解释
可是机器也不能认识class 文件,还需要被解释器进行解释,机器才能最终理解我们所要表达的东西。
6. 最后由运行环境中的Runtime对代码进行运行,真正实现我们想要机器完成的工作。
7. 说明
Java通过一个编译阶段和一个运行阶段,来让机器最终理解
我们想要它完成的工作,并按照我们的要求进行运行。
在这两个阶段中,需要我们去完成的就是编译阶段的工作,也就是说:我们需要把我们想要机器完成的工作用Java 语言表达出来,写成Java 源文件,然后把源文件进行编译,形成class文件,最后就可以在Java 运行环境中运行了。运行阶段的工作由Java 平台自身提供,我们不需要做什么工作。


Java技术的三大特性

虚拟机

这里写图片描述
Java 虚拟机JVM(Java Virtual Machine)在Java 编程里面具有非常重要的地位,虚拟机的基本功能如下:
(1):通过ClassLoader 寻找和装载class文件
(2):解释字节码成为指令并执行,提供class文件的运行环境
(3):进行运行期间垃圾回收
(4):提供与硬件交互的平台
Java虚拟机是在真实机器中用软件模拟实现的一种想象机器。Java虚拟机代码被存储在 .class文件中;每个文件都包含最多一个public类。Java 虚拟机规范为不同的硬件平台提供了一种编译Java技术代码的规范,该规范使Java 软件独立于平台,因为编译是针对作为虚拟机的“一般机器”而做。这个“一般机器”可用软件模拟并运行于各种现存的计算机系统,也可用硬件来实现。编译器在获取Java应用程序的源代码后,将其生成字节码,它是为JVM生成的一种机器码指令。每个Java解释器,不管它是Java技术开发工具,还是可运行applets 的Web浏览器,都可执行JVM。
JVM 为下列各项做出了定义
- 指令集(相当于中央处理器[CPU] )
- 寄存器
- 类文件格式
- 栈
- 垃圾收集堆
- 存储区

垃圾回收

  • 不再需要的已分配内存应取消分配(释放内存)
  • 在其它语言中,取消分配是程序员的责任
  • Java 编程语言提供了一种系统级线程以跟踪内存分配
  • 垃圾收集
  • 可检查和释放不再需要的内存
  • 可自动完成上述工作
  • 可在JVM 实现周期中,产生意想不到的变化
    许多编程语言都允许在程序运行时动态分配内存,分配内存的过程由于语言句法不同而有所变化,但总是要将指针返回到内存的起始位置,当分配内存不再需要时(内存指针已溢出范围),程序或运行环境应释放内存。
    在 C,C++ 或其它语言中,程序员负责释放内存。有时,这是一件很困难的事情。因为你并不总是事先知道内存应在何时被释放。当在系统中没有能够被分配的内存时,可导致程序瘫痪,这种程序被称作具有内存漏洞。Java 编程语言解除了程序员释放内存的责任。它可提供一种系统级线程以跟踪每一次内存的分配情况。在Java 虚拟机的空闲周期,垃圾收集线程检查并释放那些可被释放的内存。垃圾收集在Java 技术程序的生命周期中自动进行,它解除了释放内存的要求,这样能够有效避免内存漏洞和内存泄露(内存泄露就是程序运行期间,所占用的内存一直往上涨,很容易造成系统资源耗尽而降低性能或崩溃)。

代码安全

(1):第一关:编写的代码首先要被编译成为class 文件,如果代码写得有问题,编译期间
就会发现,然后提示有编译错误,无法编译通过。
(2):第二关:通过编译关后,在类装载的时候,还会进行类装载检查,把本机上的类和网
络资源类相分离,在调入类的时候进行检查,因而可以限制任何“特洛伊木马”的应用。
(3):第三关:类装载后,在运行前,还会进行字节码校验,以判断你的程序是安全的。
(4):第四关:如果你的程序在网络上运行,还有沙箱(Sand Box)的保护,什么是沙箱呢?
就是如果你的程序没有获得授权,只能在沙箱限定的范围内运行,是不能够访问本地资源的,从而保证安全性。
这里写图片描述

0 0
原创粉丝点击