My-Blog-Hexo/source/_posts/初识Java.md
2024-12-18 20:27:43 +08:00

205 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 初识Java
date: 2020-05-16 19:28:35
tags:
- Java
categories:
- Java基础
---
## java帝国的建立
1972 年C语言诞生 C语言具有贴近硬件运行速度极快效率极高的优点一经诞生就广泛用于操作系统、编译器、数据库、网络系统等的开发。但由于C语言的指针问题和内存管理的问题对新手有一些不太友好。
<!--more-->
1982年C++诞生C++兼容C语言它增加了面向对象的特性在图形领域和游戏方面取得了一些成就。但C++更加复杂。
1995年java诞生它语法有些像C但没有C中的指针和内存管理问题它实现了真正的可移植性编写一次到处运行它也有面向对象的特性有更安全的类型有高质量的类库等优点。
### java的发展
1995年的网页简单而粗糙缺乏互动性。java团队在浏览器中放入了java的运行环境开发了一个图形界面程序(Applet)使得网页变得更美观有互动性。java进入了广大程序员的视线。
1998年java 发布java2版本该版本包含三个方向
Java 2 标准版J2SE 针对桌面端开发
Java 2 移动版J2ME 针对移动端开发
Java 2 企业版J2EE 针对服务器端开发
但是Java SE 和Java ME当时并没有得到很好的发展。反而Java EE得到了很多IT大公司的应用 他们基于Java开发了许多的平台、系统、工具
* 构建工具AntMavenJekins
* 应用服务器TomcatJettyJbossWebsphereweblogic
* Web开发StrutsSpringHibernatemyBatis
* 开发工具EclipseNetbeanintellij ideaJbuilder
* ……
2006年Hadoop的发布让Java进入大数据领域
2008年Android的诞生让Java重新进入了移动端领域并在移动端开发中占据了举足轻重的地位。
之后Java的发展就一发不可收拾占据了服务器端开发的大部分市场一个伟大的帝国诞生了
```tex
拓展:
“三高”问题:高可用,高性能,高并发。
```
## Java的特性和优势
* 简单性
* 面向对象
* 跨平台 可移植性
* 高性能
* 分布式
* 动态性(反射机制)
* 多线程
* 安全性
* 健壮性
## Java 的三大版本
### JavaSE
标准版(桌面程序,控制台开发…)
### JavaME
嵌入式开发(手机,小家电…)
该版本几乎已经没有人用了
### JavaEE
企业级开发web端服务器开发…
## JDK、JRE、JVM
JDKJava Development Kit称为Java开发包或者Java开发者工具是一个编写Java的Applet小程序和应用程序的开发环境。JDK是整个Java的核心包括了`Java运行环境(JRE)`,一些`Java工具`和`Java的核心类库(Java API)`。
JREJava Runtime Environment。JRE是个运行环境JDK是个开发环境。因此写Java程序时需要JDK而运行Java程序时就需要JRE。而JDK中已经包含了JRE因此只要安装了JDK就可以编辑Java程序也可以正常运行Java程序。
JVMJava Virtual Machine
![](https://i.loli.net/2020/05/09/h5MHDELCjmzKvcY.png)
## JDK的安装
https://www.oracle.com/java/technologies/javase-jdk8-downloads.html
去上面网址下载对应的版本
下载后双击安装,记住安装的路径
**配置环境变量**
右键点击此电脑,打开属性,找到高级系统设置->环境变量->系统变量
1. 新建一个变量JAVA_HOME值为jdk安装的路径
![](https://i.loli.net/2020/05/09/dF2PvYc5eJ8H9nD.png)
2. 配置Path变量找到系统变量中的Path变量点击编辑新建两个值分别为`%JAVA_HOME%\bin``%JAVA_HOME%\jre\bin`
![](https://i.loli.net/2020/05/09/uaRCMe71En3XG9V.png)
配置好环境变量之后打开cmd(终端),输入
```bash
java -version
```
出现下图效果说明JDK安装配置成功
![](https://i.loli.net/2020/05/09/hTROlwQ7uWEyVaJ.png)
## 第一个程序
**HelloWorld**
步骤:
1. 新建一个文件夹,存放代码
2. 新建一个Java文件(Hello.java)
3. 编写代码
```java
public class Hello{
public static void main(String[] args){
System.out.print("Hello,World!");
}
}
```
4. 编译 ,打开终端,输入命令
```bash
javac -Hello.java
```
编译完成后生成一个Hello.class文件再输入运行命令
```bash
java Hello
```
就能看到终端中打印出了 `Hello,World!`
![](https://i.loli.net/2020/05/09/oLXTjy8ECYeFV25.png)
**可能遇到的问题**
* 每个单词的大小写不能出现问题,**Java对大小写敏感**
* 文件名 和 类名必须保持一致,并且首字母大写
* 符号要用英状态下的符号
## Java程序运行机制
### 编译型与解释型
我们知道计算机是无法理解现在的高级语言程序的计算机只能理解机器语言也就是可以通过CPU进行分析和执行的指令集。而要想让计算机能够运行我们写的高级语言程序就需要一个系统软件来实现它就是**`语言处理程序`**,也称为**`编译程序`**,它可以将我们写的高级语言程序,翻译成计算机可执行的**`机器语言`**。而这个翻译的方式就分为**`编译型`**和**`解释性`**两种。
**`编译型:`**是有一个负责翻译的程序来对我们的源代码进行转换,生成相对应的可执行代码(机器码),这个过程就被称为编译,而来编译的程序也就被称为编译器,也就是说我们写一个程序代码在源文件当中,通常经过编译以后生成一个可执行文件,这样我们就可以直接运行了。
**`解释型:`**在程序运行的前一刻,还只有源程序没有可执行程序,而当执行时每执行到源程序的某一条指令,则会有有一个称为解释程序的外壳程序将源代码转换成二进制代码以供执行,也就是说一边解释 一边执行 ,所以解释型程序是离不开解释程序的。
从上面我们可以看出,编译型和解释型的关键区别就在于这个翻译的时机不同。解释型语言在运行程序的时候才翻译,每执行一次,要翻译一次,效率较低。编译型就是直接编译成机器可以执行的格式,只翻译一次。
编译型和解释型各有优缺点
优点:
解释型:可移植性好,只要有运行相应需要的解释环境,可以在不用的操作系统上运行,修改调试也非常方便
编译型:相比解释执行编译执行效率高,占用资源小,适合复杂程序
缺点:
解释型:一句一句执行解释,浪费计算机资源,效率低
编译型:兼容性差,编译型程序虽然源代码也可以移植,但前提是必须针对不同的系统分别进行编译.
### Java程序运行机制
**Java这个语言有些特殊它既是编译型的又是解释型的**
说Java是编译型的是因为所有的Java代码都是要编译的.java不经过编译就什么用都没有。
说Java是解释型的是因为java代码编译后不能直接运行它是解释运行在JVM上的所以它是解释运行的那也就算是解释型的了。
但是现在的JVM为了效率都有一些JIT优化。它又会把.class的二进制代码编译为本地的代码直接运行所以又是编译的。像C、C++ 他们经过一次编译之后直接可以编译成操作系统了解的类型,可以直接执行的 所以他们是编译型的语言。没有经过第二次的处理 而Java不一样他首先由编译器编译成.class类型的文件这个是Java自己类型的文件 ,然后再通过虚拟机(JVM)从.class文件中读一行解释执行一行所以他是解释型的语言而由于Java对于多种不同的操作系统有不同的JVM所以 Java实现了真正意义上的跨平台
观看下面两张图 了解一下Java的虚拟机机制
> 1.java语言的编译-->解释--->执行过程
>
> ![java语言的编译-->解释--->执行过程](https://i.loli.net/2020/05/10/HtRmwf4LBIr1qPS.jpg)
![java虚拟机JVM](https://i.loli.net/2020/05/10/ITZEnaNuweHiflQ.jpg)
> 如果严格按照定义来说Java应该是解释型语言因为*.java程序在编译之后被编译为\*.class文件并不是机器码依然不能被计算机直接运行。\*.class文件是在JVM中被解释运行的。