一、java的诞生/java的特性和优势

1. 和C语言、C++的比较

C语言

  • 贴近硬件,运行快,效率高
  • 操作系统、编译器、数据库、网络系统等基础软件都是用C编写的(因为这些软件需要运行快,效率高)
  • 复杂的指针和内存管理(容易出错,程序员要耗费大量时间检查指针和内存分配的问题)

C++语言

  • 面向对象
  • 也贴近硬件
  • 提出引用,可以替代指针(但引用的本质依然是指针常量);但内存管理和C语言同样复杂
  • 游戏、图形领域

2. 用java语言编写的平台、系统、软件

  • 构建工具:maven、ant
  • 应用服务器:Tomcat、Jetty、Jboss、WebSphere、weblogic
  • web开发:spring、mybatis、hibernate
  • 开发工具:eclipse、intellij idea、
  • ......

PS:JDK是用C/C++写的

3. java的发展

        java最初为什么被提出,肯定是C/C++不够用了。Java 一开始根本不是为了写后端、写互联网,最初是给「嵌入式智能家电」做跨平台通用控制语言而生的。Sun 公司1991年想开发一套能控制电视机、机顶盒、空调、路由器等各种智能家电的统一软件系统。但是C++存在两点问题:

1)一个是当时的嵌入式设备采用不同的处理器芯片和不同的操作系统,对于每一台家电,软件重新改代码,重新编译,重新测试找bug,移植成本巨大。、

2)再一个是C++容易出内存溢出等问题,而我们不想让设备运行着运行着死机了。

        但是智能家居这个理念太超前了嘛,后来,java只是在服务器端被广泛使用(J2EE)。

        2006年Hadoop对java的使用使得java进军大数据领域

        2008年安卓对java的使用使得java进军手机端

4. java的特性和优势

1. 最大的特性:可移植性一次编写,一次编译,到处运行。在Windows上编译好的.class拿到Linux上照样运行,JVM负责实现(没有什么是抽象一层不能解决的,抽象出来的这一层就是.class字节码文件和“配套设施”JVM)。而C++是每换一个不同机器码的硬件或者操作系统,都要重新改代码(99%的情况下都要重新改代码,比如你的C++代码要从Windows移植到Linux,那么涉及到创建进程的方法就要改,因为 Windows 创建线程用的是CreateThread(...)方法,Linux用的是pthread_create(...)方法。除非你的代码完全只用 C++ 标准库,不调用任何系统功能,那就不用改代码),重新编译,然后重新测试找bug,也就是多次编写,到处编译,到处运行

        为什么要加一层,为什么要这么麻烦?去看上面java诞生的初衷。再结合现在的企业级应用场景,我们java写的程序,经过devops流水线打成镜像(.class文件+运行环境),就可以发布到任意云平台上运行了。但是C++写的代码就要针对不同的发布平台分别改代码,再分别编译出不同的镜像。

2. 安全性。不用再去管指针和内存分配,不用担心内存泄漏等问题。

3. 动态性。通过反射机制使得java具有动态性

4. 简单。C++的纯净版(没有头文件等)

5. java三大版本

javaSE:标准版(应用程序、控制台开发)

javaME:嵌入式开发(淘汰)

javaEE:企业版(web端、服务器开发)

6. JDK、JRE、JVM

JDK:java Development Kit

JRE:java Runtime Environment

JVM: java Virtual Machine

JVM:java虚拟机。屏蔽操作系统的差异,解释运行字节码,实现java的一次编写到处运行。有培训老师把JVM比作“javacpu”的概念,就是在原本计算机cpu的基础上再加一层javacpu,我觉得很好理解!JVM用C++和汇编写的。

JRE:java运行时环境。包含了JVM和java标准类库。提供给只想运行java程序的用户。因为它不包含javac,不能将java源文件编译成字节码文件,不支持开发新程序,只能运行编译好的字节码文件。

JDK:java开发程序包。在JRE的基础上扩充了开发工具。

一句话,只要下载了JRE就可以运行java程序了,但是作为开发者,我们需要下载JDK(JDK包含了java、javac、javadoc、jar等开发者工具)

二、安装开发环境JDK

1.企业里最常用的是JDK 8版本的,其他升级的版本只是在此基础上增加了一些新特性。比如JDK 17里的bin工具就比JDK8多一些,此外JDK17还把src.zip放到了lib目录里。

2.

PS : 下面的图里我可能标错了,JDK里的JVM是C++写的,其他工具是用Java写的 

  • bin目录:JDK不是一个工具包嘛,bin就用来存放各种工具。

编译(javac.exe)

运行的工具(java.exe,java.exe在jre文件夹下也有一个,因为jre不是java运行环境嘛)

内存分析工具(jstack.exe, jmap.exe),市面上的可视化内存分析软件其实就是集成了bin目录下的工具而已

3、环境变量的配置

  • Path:为了能让javac.exe和java.exe能够在任何目录下启动运行,我们要把JDK的bin目录配置到系统变量Path里。Path里新增 JDK下面bin的路径“%JAVA_HOME%/bin”,因为JDK的安装目录可能改变,所以我们在Path里使用引用。
  • JAVA_HOME:JDK的安装目录,管他叫做JAVA_HOME,就是JDK的安装路径,以我的电脑为例“D:\1_environment\2_environment\jdk1.8.0_131
  • CLASSPATH:CLASSPATH是什么东西?编译后,运行时,告诉JVM寻找.class文件和第三方jar包的路径。这个可设置可不设置,不设置的话默认是相对路径,一个点“.”,表示去当前文件夹下找class文件。为什么不设置呢?现代java应用由maven统一管理.class文件和jar包,你只需要遵循maven的“约定”就行。Maven完全不认CLASSPATH这个环境变量。临时想改.class存放路径的时候,就在cmd窗口里临时用set classpath=.;d:/javalesson设置一下

 三、Hello World!

1. 利用记事本新建一个Hello.java文件。

2. 编写如下代码,注意文件名要和public类名保持一致

       如果没有public类,可以随便起名;

        如果有public类,那么java文件的名应该和这个public类的类名保持一致,反过来想,因为文件名只能有一个,那么一个java文件中的public类也只能有一个。

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

3. 编译成字节码

在Hello.java文件所在的路径下打开cmd窗口。执行如下命令:

javac Hello.java

 生成同名的字节码文件Hello.class。

 4. 运行字节码文件

 四、编译型和解释型

从源代码到二进制运行的过程称为翻译,翻译又分为编译型和解释性两种。

编译型:把源码完全编译成可执行的二进制文件,适合于操作系统这样速度要求高的。

解释性:解释一句执行一句,适合于网页这样速度要求低的。

java把两种都占了,先编译(javac)出字节码文件(.class文件),再解释执行。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐