1、Java程序运行机制及运行过程
1.1、Java语言概述
- Java 是一个纯粹的面向对象的程序设计语言,它继承了C语言面向对象技术的核心。Java舍弃了C语言中容易引起错误的指针 (以引用取代)、运算符重载( operator overloading )、多重继承(以接口取代)等特性增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间。
- 是一种面向Internet的编程语言。Java一开始富有吸引力是因为Java程序可以在Web浏览器中运行。这些Java程序被称为Java小程序(applet)。applet使用现代的图形用户界面与Web用户进行交互。applet内嵌在HTML代码中。
- 随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。后台开发:Java、PHP、Python、Go、Node.js
1.2、Java语言的特点
- 特点一:面向对象
- 两个基本概念:类、对象
- 三大特性:封装、继承、多态
- 特点二:健壮性
- 吸收了C/C++语言的优点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与释放等),提供了一个相对安全的内存管理和访问机制
- 特点三:跨平台性
- 跨平台性:通过Java语言编写的应用程序在不同的系统平台上都可以运行。“Write once , Run Anywhere”
- 原理:只要在需要运行java 应用程序的操作系统上,先安装一个Java虚拟机(JVM Java Virtual Machine) 即可。由JVM来负责Java程序在该系统中的运行。
1.3、Java两种核心机制
- JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器。
- 对于不同的平台,有不同的虚拟机。
- 只有某平台提供了对应的java虚拟机,java程序才可在此平台运行。
- Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行”。
- 不再使用的内存空间应回收——垃圾回收。
- 在C/C++等语言中,由程序员负责回收无用内存。
- Java 语言消除了程序员回收无用内存空间的责任:它提供一种系统级线程跟踪存储空间的分配情况。并在JVM空闲时,检查并释放那些可被释放的存储空间。
- 垃圾回收在Java程序运行过程中自动进行,程序员无法精确控制和干预。
Java程序还会出现内存泄漏和内存溢出问题吗?Yes!
2、Java语言的环境搭建
2.1、明确什么是JDK, JRE
- JDK(Java Development Kit Java开发工具包)
- **JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。**所以安装了JDK,就不用在单独安装JRE了。其中的开发工具:编译工具(javac.exe) 打包工具(jar.exe)等。
- JRE(Java Runtime Environment Java运行环境)
- 包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
- JDK = JRE + 开发工具集(例如Javac编译工具等)
- JRE = JVM + Java SE标准类库
2.2、JDK的安装
- 傻瓜式安装,下一步即可。
- 建议:安装路径不要有中文或者空格等特殊符号。
- 如果操作系统是64位的,软件尽量选择支持64位的(除非软件本身不区分)。
- 当提示安装JRE 时,正常在JDK安装时已经装过了,但是为了后续使用Eclipse等开发工具不报错,建议也根据提示安装JRE。
- 在dos命令行中敲入javac,出现错误提示:
-
错误原因:当前执行的程序在当前目录下如果不存在,windows系统会在系统中已有的一个名为path的环境变量指定的目录中查找。如果仍未找到,会出现以上的错误提示。所以进入到jdk安装路径\bin目录下,执行javac,会看到javac参数提示信息。
- 根据windows系统在查找可执行程序的原理,可以将java工具所在路径定义到path 环境变量中,让系统帮我们去找运行执行的程序。
- 配置方法:
- 我的电脑–属性–高级系统设置–环境变量
- 编辑path 环境变量,在变量值开始处加上java工具所在目录,后面用“; ”和其他值分隔开即可。
- 打开DOS命令行,任意目录下敲入javac。如果出现javac的参数信息,配置成功。
在控制台输入分别输入进行验证
java
javac
java -version
3、Java文件的编译和运行
将Java 代码编写到扩展名为.java 的文件中。
- 选择最简单的编辑器:记事本。
- 敲入代码class Test{}将文件保存成Test.java,这个文件是存放java代码的文件,称为源文件。
public class Test {
public static void main(String[] args) {
System.out.println("hello world");
}
}
- 有了java源文件,通过编译器将其编译成JVM可以识别的字节码文件。
- 在该源文件目录下,通过javac编译工具对Test.java文件进行编译。
- 如果程序没有错误,没有任何提示,但在当前目录下会出现一个Test.class文件,该文件称为字节码文件,也是可以执行的java的程序。
- 有了可执行的java程序(Test.class字节码文件)
- 通过运行工具java.exe对字节码文件进行执行。
- 想要和JVM来个互动,只要在main方法中加入一句System.out.println(“Hello World");因为程序进行改动,所以再重新编译,运行即可。
1.先用javac编译,HelloWorld是文件名
D:\code\day01>javac HelloWorld.java
2.再用java运行,HelloChina是类名(运行字节码文件名,字节码文件就是HelloChina.class,运行时不用加.class),编译以后,会生成一个或多个字节码文件。字节码文件的文件名与java源文件中的类名相同。
D:\code\day01>java HelloChina
解释运行的时候才真正将程序加载到内存中,编译只是生成字节码文件
4、注释(comment)
-
用于注解说明解释程序的文字就是注释。
-
Java中的注释类型:
-
单行注释
- 格式://注释文字
-
多行注释
- 格式:/* 注释文字/*
单行注释和多行注释,注释了的内容不参与编译,被注释的文字不会被JVM(java虚拟机)解释执行
换句话说,编译以后生成的.class结尾的字节码文件中不包含注释掉的信息
-
文档注释(java特有)
- 格式:
-
/**
* @author 指定java程序的作者**
* @version 指定源文件的版本**
这里还可以写其他需要注释的信息
*/
注释内容可以被JDK提供的工具javadoc所解析,生成一套以网页文件形式体现的该程序的说明文档。
操作方式:D:\javase\code\unit1>javadoc -d mydoc -author -version HelloWorld.java
5、总结
- Java源文件以“java”为扩展名。源文件的基本组成部分是类(class),如本例中的HelloWorld类。
- Java应用程序的执行入口是main()方法,运行时是运行包含main( )方法的类,它有固定的书写格式:
public static void main(String[] args) {…}
- Java语言严格区分大小写。
- Java方法由一条条语句构成,每个语句以“;”结束。
- 输出语句:
System.out.println():先输出数据,然后换行
System.out.print():只输出数据 - 大括号都是成对出现的,缺一不可。
- 一个源文件中最多只能有一个public类。其它类的个数不限,如果源文件包含一个public类,则源文件名必须按该类名命名。
6、其他概念
javaAPI文档
API (Application Programming Interface, 应用程序编程接口)是 Java 提供的基本编程接口。
Java 语言提供了大量的基础类,因此 Oracle 也为这些基础类提供了相应的API 文档,用于告诉开发者如何使用这些类,以及这些类里包含的方法。