Java基础
1.Java程序
1.JVM
JVM:Java虚拟机,编写的Java程序只能运行在JVM上,由JVM实现Java语言的跨平台特性,
2.JRE和JDK
- JRE:Java程序的运行环境,包含JVM与运行必需的核心类。
- JDK: Java程序开发工具包,包含JRE与开发者工具。
3.Java开发环境搭建
1.下载安装JDK8,先后安装JDK与JRE,注意安装目录。
http://pan-yz.chaoxing.com/share/info/50ecd222eeebb262
2.配置环境变量
新建系统变量JAVA_HOME:变量值为JDK安装目录
编辑系统变量中的Path变量:列表中添加%JAVA_HOME%\bin;
配置完成后打开CMD输入java -version测试是否配置成功。
3.程序运行流程
Java源程序在编译为Java字节码文件即.class文件后才能在JVM上运行
CMD命令
javac xx.java:编译Java源程序生成xx.class文件
java xx:执行字节码文件
2.基础语法
1.标识符
标识符;指在程序中自定义的类,方法与变量名
命名规则:
- 非关键字
- 非数字开头
- 可包含26个字母(区分大小写),0-9的数字,$与_
命名规范: - 类名:首字母大写,后面每个单词首字母大写(大驼峰式)
- 方法名:首字母小写,后面每个单词首字母大写(小驼峰式)
- 变量名:全部小写
2.常量
常量 | 值 |
---|---|
整数常量: | 所有的整数 |
小数常量: | 所有的小数 |
字符常量: | 单引号包含一个字符,必须有内容 |
字符串常量: | 双引号包含多个字符 |
布尔常量: | true或false |
空常量: | null |
3.数据类型
- 基本数据类型:整数,浮点数,字符,布尔
- 引用数据类型:类,数组,接口
4.数据类型转换
1.自动转换
取值范围小的数据类型自动补充空的字节提升为取值范围大的数据类型。
2.强制转换
将取值范围大的类型强制转换为取值范围小的类型
- 浮点数转为整数,可能会丢失精度
- 强制转换可能造成数据溢出,数据丢失
byte/short/char在Java中均可进行数据运算,运算时均先提升为int型数据。
5.运算符
1.算数运算符
- 自增运算:
int x=a++:变量a先赋值给变量x,再做自增运算
int x=++a:变量a先做自增运算,再赋值给变量x
2.赋值运算符
+=:进行一次运算,附带强制转换的特点。
例:short s=1,s+=1可看作s=(short)(s+1)
3.比较运算符
4.逻辑运算符
5.三元运算符
先进行布尔类型运算,结果为true,赋值结果1,结果为false,赋值结果2。
6.方法入门
1.定义
- 方法:抽取函数的一个功能,单独定义并实现,从而实现方法的调用
return 返回值与方法定义返回值类型必须一致
2.方法重载
指在同一个类中,允许存在参数列表不同(个数不同,数据类型不同,顺序不同)的同名方法,即参数列表不同,即使方法名相同也是两个不同的方法。
7.流程控制语句
1.判断语句
if (判断条件1) {
执行语句1;
} else if (判断条件2) {
执行语句2;
}
...
}else if (判断条件n) {
执行语句n;
} else {
执行语句n+1;
}
简单的if语句应用可以置换为三元运算符
2.选择语句
switch(表达式) {
case 常量值1:
语句体1;
break;
case 常量值2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
- 先计算出表达式的值
- 与case语句比较,结果一致执行语句,break跳出循环,无break继续向下执行,发生穿透现象
- 无匹配值执行default语句
3.循环语句
- for循环
for(初始化表达式①; 布尔表达式②; 步进表达式④){
循环体③
}
- while循环
初始化表达式①
while(布尔表达式②){
循环体③
步进表达式④
}
- do_while循环
初始化表达式①
do{
循环体③
步进表达式④
}while(布尔表达式②);
- do while循环无条件的执行第一次循环体,然后才条件循环状态
- for条件判断循环变量在循环结束后消失在内存中,若之后无需使用该变量较while循环更推荐使用for循环,可提高内存的使用效率。
- 已知循环次数推荐使用for循环,未知循环次数推荐使用while循环。
4.跳出语句
- break:终止switch语句或循环
- continue:终止此次循环体未执行的部分,开始下一次的循环。
8.数组
1.基础
- 概念:存储数据长度固定,存储数据的数据类型一致的容器
- 定义:
1.数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[长度];
例:int arr = new int[3]
2.数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};
例:int arr = new int{1,2,3,4,5}
3.数据类型[] 数组名 = {元素1,元素2,元素3...};
例:int[] arr = {1,2,3,4,5}
- 数组索引:数组中有序存储数据,从0开始,数组中的数据自动编号,这个编号被称为数组索引,通过数组索引可取得数组中的元素或为数组中的元素赋值,数组的长度为array.length,故索引最大为length-1。
例:
赋值:array [1]=1;
取值:int a = array[1]
2.数组原理
Java内存划分:
1.栈(Stack):存放方法局部变量,方法的运行一定是在栈中运行,当局部变量超出作用域则从栈内存中消失
2.堆(Heap):保存Java中实例化的对象,堆内存中的数据都具有内存地址值,堆内存中的数据都具有默认值。
3.方法区(Method Area):存储.class相关信息,包含方法的信息
4.本地方法栈(Native Method Stack):与操作系统相关
5.寄存器(Register):与CPU相关
- main方法进入方法栈执行;创建数组,JVM在堆内存中开辟空间,数组中的元素设为默认值,存放数组;将数组的内存地址赋值给引用类型变量arr
3.数组操作
- 数组的索引值一定,当访问了数组中不存在的索引时,程序抛出数组越界异常
ArrayIndexOutOfBoundsException
- 引用类型变量存储数组的内存地址,当变量=null时,变量丢失数组的内存地址,再次操作数组时程序抛出数组空指针异常:
NullPointerException
- 传参的变量为基本数据类型时,传递变量数据值,为引用数据类型时,传递内存地址值。
22/07/2020