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,协议等,增加了编写企业级应用程序的类库。它是一个标准的多层体系结构,主要用于开发Web程序和部署分布式、基于组件、安全可靠、可伸缩和易于管理的企业级应用程序。
- 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 中的类有一个运行时刻的表示,能进行运行时刻的类型检查。
三、Java是解释型还是编译型
Java是一种先编译,后解释执行的混合型语言。
首先所有的Java代码都是要编译的,.java不经过编译是无法执行,需要由编译器编译成.class(字节码)文件才能执行,所以说Java是编译型语言。
但是跟C、C++等编译型语言不一样,C和C++经过编译之后,是可以直接运行在操作系统上的,而Java编译之后还是不能直接运行在操作系统上,而是需要通过JVM去读取.class文件再运行在操作系统上,而读.class文件的时候,是读一行解释一行的,所以也可以说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的关系
![](https://img2022.cnblogs.com/blog/1449477/202207/1449477-20220721220425487-792369716.png)
JVM是Java程序能够运行的核心。但需要注意,JVM自己什么也干不了,你需要给它提供生产原料(.class文件)。
仅仅是JVM,是无法完成一次编译,处处运行的。它需要一个基本的类库,比如怎么操作文件、怎么连接网络等。
而Java体系很慷慨,会一次性将JVM运行所需的类库都传递给它。
JVM标准加上实现的一大堆基础类库,就组成了Java的运行时环境,也就是我们常说的JRE(JavaRuntimeEnvironment)。
对于JDK来说,就更庞大了一些。除了JRE,JDK还提供了一些非常好用的小工具,比如javac、java、jar等。它是Java开发的核心。
我们也可以看下JDK的全拼 -- JavaDevelopmentKit。
JVM、JRE、JDK它们三者之间的关系,可以用一个包含关系表示。
![](https://img2022.cnblogs.com/blog/1449477/202207/1449477-20220721220829731-2063485746.png)
4、Java虚拟机规范和Java语言规范的关系
左半部分是Java虚拟机规范,其实就是为输入和执行字节码提供一个运行环境。右半部分是我们常说的Java语法规范,比如switch、for、泛型、lambda等相关的程序,最终都会编译成字节码。而连接左右两部分的桥梁依然是Java的字节码。 如果.class文件的规格是不变,这两部分是可以独立进行优化的。但Java也会偶尔扩充一下.class文件的格式,增加一些字节码指令,以便支持更多的特性。 我们简单看一下一个Java程序的执行过程,它到底是如何运行起来的。
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,可以看到是比较容易理解的。
五、JDK介绍
JDK是 Java 语言的软件开发工具包。
- javac – 编译器,将源程序转成字节码。
- java – 运行编译后的java程序(.class后缀的)。
- jar – 打包工具,将相关的类文件打包成一个文件。
六、总结
JRE = JVM + JavaSE标准类库。
JDK = JRE + 开发工具集。
如果只需要执行JAVA程序,那么只需下载安装JRE即可。
如果需要开发JAVA程序,就需要下载JDK,一般JDK是包含了JRE,所以安装了JDK,就不用再单独安装JRE了。