目录
Java简介
Java分为三个体系
JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版)
JavaEE(J2EE)(Java 2 Platform,Enterprise Edition,java平台企业版)
JavaME(J2ME)(Java 2 Platform Micro Edition,java平台微型版)
Java开发工具
Linux 系统、Mac OS 系统、Windows 95/98/2000/XP,WIN 7/8系统。
Java JDK
vscode编辑器或者其他编辑器。
IDE:Eclipse、 IntelliJ IDEA、NetBeans 等。
Java开发环境配置
JAVA_HOME:jdk的安装路径
PATH:JDK的安装包中的bin目录
path配置后,可以在命令窗口使用命令
测试环境变量的配置:
window + R,然后输入cmd,就可以打开命令窗口。然后输入java-version命令,查看安装的jdk版本
Java基础语法
基本语法
大小写敏感:Java对于字母大小写是有区分的,比如标识符Hello与hello是不同的。
类名:对于所有的类来说,类名应该首字母大写。如果是由若干个单词组成,那么每个单词的首字母应该大写,例如MyFirstClass。
方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。
源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记 Java 是大小写敏感的),文件名的后缀为 .java。(如果文件名和类名不相同则会导致编译错误)。
主方法入口:所有的 Java 程序由 public static void main(String[] args) 方法开始执行。
Java标识符
Java 所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。
关于 Java 标识符,有以下几点需要注意:
-
命名最好能 “ 见名知意 ” 。
- 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始。
- 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合。
- 关键字不能用作标识符。
- 标识符是大小写敏感的。
- 合法标识符举例:age、$salary、_value、__1_value
- 非法标识符举例:123abc、-salary
Java中的关键字
Java变量
什么是变量
变量是指代在内存中的一块存储空间,用于存储程序运算过程中需要用到的数据。
变量的定义
- 变量声明的语法规则:变量类型 变量名字。
- 先声明变量,在第一次使用变量之前再对变量赋初值
- 未经声明的变量不能使用 。
- 如果多个变量的类型相同,可以在一条语句中声明,中间用逗号分隔。
- 变量的命名需要符合Java标识符语法要求。
- 中文可以作为变量名字,但是不推荐使用。
变量的访问
- 可以对变量中的值进行存取操作
- 变量在定义的时候,指定了类型。Java编译器会检测对该变量的操作是否符合定义的数据类型,如果对变量的赋值或操作不符合定义的数据类型,会产生编译错误。
Java中的基本数据类型
整形int
- int是最常用的整数类型。一个int类型占用4个字节(32位)。
- 最大表示范围为:-2147483648 ~ 2147483647
- 整数类型的直接量(literal)默认是int类型。
- 两个int整数相除(/),结果取整,舍弃小数部分(非四舍五入),结果还是整数。
- 整数运算要防止溢出:整数运算的过程中,运算结果,如果超过了整数能表示的最大范围,会发生溢出。正数过大溢出,结果变为负数;负数过小溢出,结果变为正数。
长整型long
- 如果要表示的整数已经超过了int的范围,那么可以用long类型定义变量,保存数据。
- long类型数据范围(8个字节,64位):-9223372036854775808~9223372036854775807
- long类型直接量的表示,需要在数据后面加一个L或l;
- 通过long类型来存储系统当前毫秒数,jdk提供了一个方法( System.currentTimeMillis() ),来获取从1970.1.1日零时至今的毫秒数,返回结果为long.
- 对于较大的整数运算(超出int范围),可以使用long型。
double & float类型
- 所谓的浮点类型就是小数类型,包含double 和 float。
浮点类型的默认直接量是double类型。
如果要使用float类型,需要在数据后面加F或f。
double类型的精度比float类型的精度高,因此,一般用double类型。
举例: float f1 = 3.3F;double money = 3.5; - double类型数据运算的时候,会有舍入误差。
由于舍入误差,导致浮点数不能精确运算。
二进制中无法表示1/10,就像十进制中无法精确表示1/3,所以二进制表示浮点数存在误差。
char类型
- 字符类型实质上是一个16位的无符号整数,这是整数对应的字符编码
Java字符类型采用Unicode字符集编码。Unicode字符编码是国际上通用的定长字符集,所有字符都是16位。
字符直接量,可以采用字符的形式,比如‘中 ’;
或者采用Unicode编码的方式,比如:‘\u4e4d’
字符是整数可以参与运算,比如 char c = ‘A’ ; int a = 10 + c ;//75 - 字符直接量赋值
整数赋值(0~65535)
Unicode编码赋值
举例: char a = ‘A’;char a = 65;char a = ‘\u0045’; - 转义字符(\):对于不方便输出的字符,采用转义字符表示。
boolean类型
- boolean类型,即布尔类型,适用于逻辑运算,一般在程序流程控制中作为条件判断。
- boolean类型的值只有两个:true/false。不能用0或非0代替true/false.
- boolean类型不能与整数类型做转换
数据类型转换
自动数据类型转换(隐式转换):小类型,自动转为大类型。
强制数据类型转换:从大类型,转到小类型,需要强制转化,可能会有精度损失或者溢出。
举例:int a2 = (int) 3.6 ;
Java运算符
算数运算符
- Java中的算数运算符,包含:+(加),-(减),*(乘),/(除),%(取余),++(自增),--(自减)。
++(自增),--(自减)运算是在自身值的基础上,增加或者减少1.
++,--写在变量的前面,运算的时候,需要先增加或者减少1,再参与运算。
++,--写在变量的后面,运算的时候,需要先参与运算,再增加或者减少1。 - “+”,“-”,可以作为数据正负符号。
其中:
运算符“+”,当用于数据类型时,加法运算;当用于字符串型时,字符串拼接运算。
字符串(String)+ 数据,java中会自动将数据转为字符串,然后两个字符串相连,生成一个新的字符串。
关系运算符
- Java中的关系运算符,包含:>(大于),<(小于),==(等于),>=(大于等于),<=(小余等于),!=(不等于)。
- 关系运算的结果为boolean类型。
逻辑运算符
- &&,& “与”运算
- || ,|“或”运算
- !“非”运算
- 逻辑运算的结果为boolean类型。
其中:
短路逻辑: && , || , 指当我们能够判断出运算结果的时候,后续的表达式不再执行。 ——常用短路逻辑。
不短路逻辑: & , | , 每个参与运算的表达式都需要执行。 —— 不常用
赋值运算符和扩展赋值运算符
- 赋值运算符“=”是最常用的赋值运算。它将“=”右边的运算结果的值,赋给“=”左边的变量。
- 赋值运算符的优先级很低。(低于算数运算符)
- 在赋值运算符的前面,加入算数运算符,即为扩展赋值运算符。有:+=,-=,*=,/=,%=
三目运算符
- 三目运算符格式:
X ? Y : Z; boolean表达式?表达式1 : 表达式2; - X为boolean表达式,如果X为true,在运算结果为Y的值,如果X为false,则运算结果为Z的值。
程序的结构
任何复杂的程序都是由“顺序结构”,“分支结构”,“循环结构”组成的。
分支结构
- Java语法中的分支结构包含以下四种
- if //如果…
- if……else…… //如果…否则…
- if…….else if……. //如果…否则 如果…..
- switch……case…… //switch….情况1…情况2…..
- 分支结构可以嵌套使用
循环结构
循环是程序设计语言中反复执行某些代码的一种计算机处理过程,是一组相同或相似的语句被有规律地执行。
循环三要素:
- 循环变量初始化
- 循环条件(以循环变量为判断条件)
- 循环变量的改变(向着循环结束变)
for循环
- for循环是最经典的循环语法,也是使用最多的循环方式。
for语法规则:
for(表达式1;表达式2;表达式3){
// 语句序列
}
表达式1:初始化表达式,负责完成循环条件的初始化
表达式2:循环条件表达式,值为boolean的表达式,指定循环条件
表达式3:循环后的操作表达式,负责修改变量,改变循环条件 - for循环代码执行流程
-
for循环流程图
- for循环——特殊写法
for(;表达式2;表达式3) for(;表达式2;) for(;;) for(int a = 0, b=5 ; a<b; a++,b--) { System.out.println(a+",,,"+b); }
while循环
while语法规则:
语句0 ; while(循环条件){ 语句1 ;//循环体 }
语句2;do.....while循环
- do…while语法规则:
语句0 ; do{ 语句1;//循环体 语句2;// }while (循环条件); 语句3 ;
-
对比while循环:
while循环先判断,再执行;
do…while先执行一次,再判断。
While循环比do…while循环用得多。死循环
循环没有指明结束条件的情况会造成死循环
break & continue
- break可用于循环语句或switch语句。
break用于循环,可使程序终止循环从而执行循环后面的语句。常常与条件语句一起使用。 - continue 用于循环语句中,表示跳过循环体剩余语句,继续执行下一次循环。continue 只能在循环语句中使用。
循环的嵌套
- 循环的内部,再有其它循环,就是循环的嵌套。
- 外层走一次,内层走所有次
- 建议循环层数越少越好
Java数组
什么是数组
- 数组:相同数据类型的元素组成的集合
- 元素按线性顺序排列。所谓线性顺序是指除第一个元素外,每一个元素都有唯一的前驱元素; 除最后一个元素外,每一个元素都有唯一的后继元素(“一个跟一个”),可以通过元素所在位置的顺序号(下标)做标识来访问每一个元素(下标从0开始,最大到元素的个数-1)
数组的使用
声明数组的语法:数据类型 [] 数组名 = new 数据类型 [ 大小 ] ;数组声明后的默认值 ,数组new 之后,每个元素都有默认值。 int,long 默认值为 0 , double 默认值为 0.0 , boolean 默认值为false,char 默认值为空字符。 - break可用于循环语句或switch语句。
- do…while语法规则:
数组的交换位置
package day5;
public class ArrayDemo2 {
public static void main(String[] args) {
// 1. 创建整形数组
int[] arr = new int[]{10,15,8,40,25,5};
// 2. 把数组中最大的数据值移动到最末位。
for(int i=0 ; i <= arr.length -2 ; i ++){
if(arr[i] < arr[i+1]){ // 当前元素 小于 下一个元素, 不交换位置, 反之
交换位置
continue; // 跳出本次循环
}else{
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
// 3. 遍历输出数组的元素
for(int i = 0 ; i < arr.length ; i ++ ){
System.out.println(arr[i]);
}
// 4. 练习:把最小值移动末尾
for(int i =0 ; i < arr.length -1 ; i++){
if(arr[i] < arr[i+1]){// 当前元素,小于下一个元素,说明需要交换位置。
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp ;
}
}
// 5. 遍历输出数组的元素
System.out.println("最末尾是最小的:");
for(int i = 0 ; i < arr.length ; i ++ ){ // 假设: i <= arr.length
// i = 0,1,2,3,4,5,6 , 下
标只能是0,1,2,3,4,5 ,
// i=6 数据数据arr[6] , 找
不到 , 程序处理不了, 就抛异常
System.out.print(arr[i] + "\t");
}
/*
Exception : 异常
ArrayIndexOutOfBoundsException : array 数组 , index 索引 , out of
bounds 超出边界
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:
6
at day5.ArrayDemo2.main(ArrayDemo2.java:33) // 类中的第33行。
*/
}
}
数组的排序
升序
package day5;
// bubble: 泡
// 冒泡排序: 双重for循环, 外层for循环走一次,内层循环周n次, 就能把数组中的一个元素的位
置排好 。
public class BubbleDemo {
public static void main(String[] args) {
int[] arr = new int[]{10,15,8,40,25,5};
// 1. 升序排序
for(int i= 0 ; i < arr.length - 1 ; i++ ){
for(int k = 0 ; k < arr.length - 1 ; k++){ // k = 0 , 1,2, 3,4
, k+1 = 1,2,3,4,5
if(arr[k] < arr[k+1]){
continue;
}else{ // 下一个小,就交换位置
int temp = arr[k];
arr[k] = arr[k+1];
arr[k+1] = temp ;
}
}
}
// 2. 输出升序数组
for(int i= 0 ; i < arr.length ; i++){
System.out.print(arr[i] + "\t");
}
}
}
降序
package day5;
// bubble: 泡
// 冒泡排序: 双重for循环, 外层for循环走一次,内层循环周n次, 就能把数组中的一个元素的位
置排好 。
public class BubbleDemo1 {
public static void main(String[] args) {
int[] arr = new int[]{10,15,8,40,25,5};
// 1. 降序排序
for(int i= 0 ; i < arr.length - 1 ; i++ ){
for(int k = 0 ; k < arr.length - 1 ; k++){ // k = 0 , 1,2,
3,4 , k+1 = 1,2,3,4,5
if(arr[k] < arr[k+1]){
int temp = arr[k];
arr[k] = arr[k+1];
arr[k+1] = temp ;
}
}
}
// 2. 输出降序数组
for(int i= 0 ; i < arr.length ; i++){
System.out.print(arr[i] + "\t");
}
}
}
数组排序函数sort
Arrays.sort()——jdk提供的排序方法。
String[] names ={"tom","cat","jerry"};
Arrays.sort(names);
System.out.println( Arrays.toString(names) ); // import
java.util.Arrays;
数组复制
数组扩容
数组的长度在创建后不可以改变的。所谓“扩展”是指创建一个更大新数组,并将原有数组的内容复制到其中。
Jdk提供了一个方法,Arrays.copyOf 可以实现数组的“扩容”