ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JAVA简介

2022-07-21 22:37:17  阅读:163  来源: 互联网

标签:Java 语言 JDK 简介 JVM JAVA 运行 字节


一、介绍

介绍摘抄自:https://www.runoob.com/java/java-intro.html

Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的。
后来 Sun 公司被 Oracle (甲骨文)公司收购,Java 也随之成为 Oracle 公司的产品。

JAVA有三大体系,分别是Java SE(Java Platform Standard Edition),Java EE(Java Platform Enterprise Editoin),Java ME(Java Platform Micro Eidtion),Java语言只是Java SE中的一部分。

  • Java SE:称为Java标准版,包含Java基础类库和语法。它主要用于开发图形用户界面(GUI)、复杂逻辑和高性能的桌面应用程序。Java SE分为四个组成部分JVM(Java Virtual Machine),JRE(Java SE Runtime Environment),JDK(Java Development kits)以及Java语言。JVM将Java编译好的文件翻译成对应的机器语言,JRE包含用于Java运行的环境,JDK包含用于Java开发的工具,Java语言则是定义Java开发的语法规则。想要学习及开发Java其他平台的应用,必须先了解Java SE以奠定基础。
  • Java EE:称为Java企业版,是以Java SE为基础,定义了一系列的服务,API,协议等,增加了编写企业级应用程序的类库。它是一个标准的多层体系结构,主要用于开发和部署分布式、基于组件、安全可靠、可伸缩和易于管理的企业级应用程序。
  • Java ME:称为Java微型版,主要用于开发消费性电子产品或嵌入式系统中的应用程序,开发具有有限的连接、内存和用户界面能力的设备应用程序。如移动设备(手机)、PDA、能够接入电缆服务的机顶盒,以及各种终端和其他消费电子产品

 

二、主要特性

  • Java 语言是简单的

    Java 语言的语法与 C 语言和 C++ 语言很接近,使得大多数程序员很容易学习和使用。另一方面,Java 丢弃了 C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java 语言不使用指针,而是引用。并提供了自动分配和回收内存空间,使得程序员不必为内存管理而担忧。

  • Java 语言是面向对象的

    Java 语言提供类、接口和继承等面向对象的特性,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为 implements)。Java 语言全面支持动态绑定,而 C++语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。

  • Java语言是分布式的

    Java 语言支持 Internet 应用的开发,在基本的 Java 应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括 URL、URLConnection、Socket、ServerSocket 等。Java 的 RMI(远程方法激活)机制也是开发分布式应用的重要手段。

  • Java 语言是健壮的

    Java 的强类型机制、异常处理、垃圾的自动收集等是 Java 程序健壮性的重要保证。对指针的丢弃是 Java 的明智选择。Java 的安全检查机制使得 Java 更具健壮性。

  • Java语言是安全的

    Java通常被用在网络环境中,为此,Java 提供了一个安全机制以防恶意代码的攻击。除了Java 语言具有的许多安全特性以外,Java 对通过网络下载的类具有一个安全防范机制(类 ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类 SecurityManager)让 Java 应用设置安全哨兵。

  • Java 语言是体系结构中立的

    Java 程序(后缀为 java 的文件)在 Java 平台上被编译为体系结构中立的字节码格式(后缀为 class 的文件),然后可以在实现这个 Java 平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。

  • Java 语言是可移植的

    这种可移植性来源于体系结构中立性,另外,Java 还严格规定了各个基本数据类型的长度。Java 系统本身也具有很强的可移植性,Java 编译器是用 Java 实现的,Java 的运行环境是用 ANSI C 实现的。

  • Java 语言是解释型的

    如前所述,Java 程序在 Java 平台上被编译为字节码格式,然后可以在实现这个 Java 平台的任何系统中运行。在运行时,Java 平台中的 Java 解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。

  • Java 是高性能的

    与那些解释型的高级脚本语言相比,Java 的确是高性能的。事实上,Java 的运行速度随着 JIT(Just-In-Time)编译器技术的发展越来越接近于 C++。

  • Java 语言是多线程的

    在 Java 语言中,线程是一种特殊的对象,它必须由 Thread 类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为 Thread(Runnable) 的构造子类将一个实现了 Runnable 接口的对象包装成一个线程,其二,从 Thread 类派生出子类并重写 run 方法,使用该子类创建的对象即为线程。值得注意的是 Thread 类已经实现了 Runnable 接口,因此,任何一个线程均有它的 run 方法,而 run 方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。Java 语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为 synchronized)。

  • Java 语言是动态的

    Java 语言的设计目标之一是适应于动态变化的环境。Java 程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java 中的类有一个运行时刻的表示,能进行运行时刻的类型检查。

 

三、JVM介绍

原文:https://baijiahao.baidu.com/s?id=1710167554881092125&wfr=spider&for=pc

1、什么是JVM

JVM是JavaVirtualMachine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的主流虚拟机。

 

2、JVM与操作系统

为什么要在程序和操作系统中间添加一个JVM? Java是一门抽象程度特别高的语言,提供了自动内存管理等一系列的特性。这些特性直接在操作系统上实现是不太可能的,所以就需要JVM进行一番转换。

 

 

从图中可以看到,有了JVM这个抽象层之后,Java就可以实现跨平台了。JVM只需要保证能够正确执行.class文件,就可以运行在诸如Linux、Windows、MacOS等平台上了。 而Java跨平台的意义在于一次编译,处处运行,能够做到这一点JVM功不可没。比如我们在Maven仓库下载同一版本的jar包就可以到处运行,不需要在每个平台上再编译一次。 现在的一些JVM的扩展语言,比如Clojure、JRuby、Groovy等,编译到最后都是.class文件,Java语言的维护者,只需要控制好JVM这个解析器,就可以将这些扩展语言无缝的运行在JVM之上了。 应用程序、JVM、操作系统之间的关系

 

 

 JVM上承开发语言,下接操作系统,它的中间接口就是字节码。

 

3、JVM、JRE、JDK的关系

JVM是Java程序能够运行的核心。但需要注意,JVM自己什么也干不了,你需要给它提供生产原料(.class文件)。

仅仅是JVM,是无法完成一次编译,处处运行的。它需要一个基本的类库,比如怎么操作文件、怎么连接网络等。

而Java体系很慷慨,会一次性将JVM运行所需的类库都传递给它。

JVM标准加上实现的一大堆基础类库,就组成了Java的运行时环境,也就是我们常说的JRE(JavaRuntimeEnvironment)。

对于JDK来说,就更庞大了一些。除了JRE,JDK还提供了一些非常好用的小工具,比如javac、java、jar等。它是Java开发的核心。
我们也可以看下JDK的全拼 -- JavaDevelopmentKit。

JVM、JRE、JDK它们三者之间的关系,可以用一个包含关系表示。

JDK包含JRE + JAVA工具

JRE包含了JVM + JAVA类库

 

 

4、Java虚拟机规范和Java语言规范的关系

 

左半部分是Java虚拟机规范,其实就是为输入和执行字节码提供一个运行环境。右半部分是我们常说的Java语法规范,比如switch、for、泛型、lambda等相关的程序,最终都会编译成字节码。而连接左右两部分的桥梁依然是Java的字节码。 如果.class文件的规格是不变,这两部分是可以独立进行优化的。但Java也会偶尔扩充一下.class文件的格式,增加一些字节码指令,以便支持更多的特性。 我们简单看一下一个Java程序的执行过程,它到底是如何运行起来的。

这里的Java程序是文本格式的。比如下面这段HelloWorld.java,它遵循的就是Java语言规范。其中,我们调用了System.out等模块,也就是JRE里提供的类库。

public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}

使用JDK的工具javac进行编译后,会产生HelloWorld的字节码。 我们一直在说Java字节码是沟通JVM与Java程序的桥梁,下面使用javap来稍微看一下字节码到底长什么样子。

0 getstatic#2<java/lang/System.out> //getstatic获取静态字段的值
3 ldc#3<HelloWorld> //ldc常量池中的常量值入栈
5 invokevirtual#4<java/io/PrintStream.println> //invokevirtual运行时方法绑定调用方法
8 return //void函数返回

Java虚拟机采用基于栈的架构,其指令由操作码和操作数组成。这些字节码指令,就叫作opcode。其中, getstatic、ldc、invokevirtual、return等,就是opcode,可以看到是比较容易理解的。 JVM就是靠解析这些opcode和操作数来完成程序的执行的。当我们使用Java命令运行.class文件的时候,实际上就相当于启动了一个JVM进程。然后JVM会翻译这些字节码,它有两种执行方式。常见的就是解释执行,将opcode+操作数翻译成机器代码;另外一种执行方式就是JIT,也就是我们常说的即时编译,它会在一定条件下将字节码编译成机器码之后再执行。

 

四、JDK介绍

JDK是 Java 语言的软件开发工具包。

JDK主要的组件:
  1. javac – 编译器,将源程序转成字节码。
  2. java – 运行编译后的java程序(.class后缀的)。
  3. jar – 打包工具,将相关的类文件打包成一个文件。
 

 

标签:Java,语言,JDK,简介,JVM,JAVA,运行,字节
来源: https://www.cnblogs.com/Zzbj/p/16503798.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有