java虚拟机—JVM
JVM (Java Virtual Machine ) : Java虚拟机,简称JVM,是运行所有Java程序的假想计算机,是Java程序的运行环境,是Java最具吸弓|力的特性之一。我们编写的Java代码,都运行在JVM之上。
跨平台:任何软件的运行,都必须要运行在操作系统之上,而我们用Java编写的软件可以运行在任何的操作系统上,这个特性称为Java语言的跨平台特性。该特性是由JVM实现的,我们编写的程序运行在JVM上,而JVM运行在操作系统上。
Java的虚拟机本身不具备跨平台功能的,每个操作系统下都有不同版本的虚拟机。
JRE和JDK
- JRE (Java Runtime Enironment) :是java程序的运行时环境,包含JvM和运行时所需要的核心类库。
- JDK (Java Development Kit):是Java程序开发工具包,含JRE和开发人员使用的工具。
三者关系: JDK> JRE> JVM
JDK的目录结构:
• bin目录 - 该目录下主要存放JDK的各种工具命令。
• conf目录 - 该目录下主要存放jdk的相关配置文件。
• include目录 - 该目录下主要存放了一些平台的头文件。
• jmods目录 - 该目录下主要存放了JDK的各种模块。
• legal目录 - 该目录下主要存放了JDK各模块的授权文档。
• lib目录 - 该目录下主要存放了JDK工具的一些补充jar包和源代码。
编译和运行
编译:是指将我们编写的java源文件翻译成JVM认识的class文件,在这个过程中,javac 编译器会检查我们所写的程序是否有错误,有错误就会提示出来,如果没有错误就会编译成功。
运行:是指将class文件交给JVM去运行,此时JVM就会去执行我们编写的程序了。
关键字keywords
关键字:是指在程序中,Java已经定义好的单词,具有特殊含义。如public、class、static、void等
标识符
标识符:是指在程序中,我们自己定义内容。比如类的名字、方法的名字和变量的名字等等,都是标识符。
命名规则:硬性要求
- 标识符可以包含英文字母26个(分大小写)、0-9(数字) 、$ (美元符号)和_ (下划线)。
- 标识符不能以数字开头。
- 标识符不能是关键字。
命名规范:软性建议 - 类名规范:首字母大写,后面每个单词首字母大写(大驼峰式)
- 方法名规范:首字母小写,后面每个单词首字母大写(小驼峰式)
- 变量名规范:全部小写。
常量
常量:是指在Java程序中固定不变的数据。
变量和数据类型
变量:在程序中可以变化的量
变量赋值:定义的变量量,不赋值不能使用。
当需要在程序中记录单个数据内容时,则声明一个变量即可,而声明变量的本质就是在内存中申请一个存储单元,由于该存储单元中的数据内容可以发生改变,因此得名为"变量"
变量的声明方式:
数据类型 变量名 = 初始值;
其中=初始值可以省略,但;不可以省略。
变量的注意事项:
• Java是强类型语言,变量在使用前必须声明来指明其数据类型。
• 变量在使用之前必须初始化。
• 变量不能重复声明
Java的数据类型分为两大类:
- 基本数据类型:
包括:整数、浮点数、字符、布尔 - 引用数据类型:
包括:类、数组、接口
基本数据类型:
注意事项:
- 字符串不是基本类型,而是引用类型。
- 浮点型可能只是一个近似值,并非精确的值。
- 数据范围与字节数不-一定相关,例如float数据范围比long更加广泛,但是float是4字节, long是8字节。
- 浮点数当中默认类型是double。如果一 定要使用float类型, 需要加上一个后缀F。如果是整数,默认为int类型,如果一定要使用long类型,需要加上一个后缀L。推荐使用大写字母后缀。
数据类型转换
-
自动转换:将取值范围小的类型自动提升为取值范围大的类型。范围小的类型向范围大的类型提升,byte、short、char运算时直接提升为int
-
强制转换:将取值范围大的类型强制转换成取值范围小的类型。
// double类型数据强制转成int类型,直接去掉小数点。
int i = (int)1.5;
浮点转成整数,直接取消小数点,可能造成数据损失精度。
int强制转成short 砍掉2个字节,可能造成数据丢失。
运算符
算数运算符
b=++a:变量a自己加1,将加1后的结果赋值给b,也就是说a先计算。a和b的结果都是2。
b=a++:变量a先把自己的值1,赋值给变量b,此时变量b的值就是1,变量a自己再加1。a的结果是2, b的结果是1。
赋值运算符:
比较运算符
逻辑运算符
三元运算符
三元运算符计算方式:
- 布尔类型表达式结果是true, 三元运算符整体结果为结果1,赋值给变量。
- 布尔类型表达式结果是false, 三元运算符整体结果为结果2,赋值给变量。
public static void main(String[] args) {
inti=(1==2?100:200);
System.out.println(i);//200
intj=(3<=4?500:600);
System.out.println(j);//500
}
方法
方法:就是将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能。当我们需要这个功能的时候,就可以去调用。这样即实现了代码的复用性,也解决了代码冗余的现象。
方法重载
方法重载:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关。
参数列表:个数不同,数据类型不同,顺序不同。
重载方法调用: JVM通过方法的参数列表,调用不同的方法。
数组
**数组概念:**数组就是存储数据长度固定的容器,保证多个数据的数据类型要一致。
//格式一:数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[长度];
int[] arr = new int[3];
//格式二:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};
int[] arr = new int[]{1,2,3,4,5};
//格式三:数据类型[] 数组名 = {元素1,元素2,元素3...};
int[] arr = {1,2,3,4,5};
数组获取最大值元素
public static void main(String[] args) {
int[] arr = { 5, 15, 2000, 10000, 100, 4000 };//定义变量,保存数组中0索引的元素
int max = arr[0]; //遍历数组,取出每个元素
for (int i = 0; i < arr.length; i++) { //遍历到的元素和变量max比较 //如果数组元素大于max
if (arr[i] > max) { //max记录住大值
max = arr[i];
}
}
System.out.println("数组最大值是: " + max); }
数组反转
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5 }; /* 循环中定义变量min=0最小索引 max=arr.length‐1最大索引 min++,max‐ */
for (int min = 0, max = arr.length ‐ 1; min <= max; min++, max‐‐) { //利用第三方变量完成数组中的元素交换
int temp = arr[min];
arr[min] = arr[max];
arr[max] = temp;
} // 反转后,遍历数组
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
内存概述
内存是计算机中的重要原件,临时存储区域,作用是运行程序。我们编写的程序是存放在硬盘中的,在硬盘中的程 序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存。
Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。
java虚拟机内存划分
Jshell脚本工具
JShell脚本工具是JDK9的新特性,当我们编写的代码非常少的时候,而又不愿意编写类,main方法, 也不愿意去编译和运行,这个时候可以使用JShell工具。启动JShell工具,在DOS命令行直接输入JShell命令。