DOS命令
启动: Win+R
切换盘符 盘符名称:
进入文件夹 cd 文件夹名称
进入多级文件夹 cd 文件夹1\文件夹2\文件夹3
返回上一级 cd …
直接返回根路径 cd \
查看当前内容 dir
清屏 cls
退出 exit
JAVA语言开发环境搭建
- JVM(Java Virtual Machine):Java虚拟机,简称
JVM
,是运行所有Java程序的假想计算机,是Java程序的运行环境,是Java最具吸引力的特性之一。我们编写的Java代码,都运行在JVM
之上。 - JRE(Java Runtime Environment):是Java程序的运行时环境,包含
JVM
和运行时所需要的核心类库
。 - JDK(Java Development Kit):是Java程序开发工具包,包含
JRE
和开发人员使用的工具。 - 跨平台:任何软件的运行,都必须要运行在操作系统之上,而我们用Java编写的软件可以在任何的操作系统上,这个特性称为Java语言的跨平台性。该特性是由
JVM
实现的,我们编写的程序运行在JVM
上,而JVM
运行在操作系统上。
关键字和标识符
Java关键字
-
abstract continue for new switch assert default goto package synchronized boolean do if private this break double implements protected throw byte else import public throws case enum instanceof return transient catch extend int short try char final interface static void class finally long strictfp volatile const float native super while
Java标识符
-
标识符:是指在程序中,我们自己定义内容。比如类的名字、方法的名字和变量的名字等等,都是标识符。
-
命名规则:
硬性要求
-
标识符可以包含
英文字母26个(区分大小写)
、0-9数字
、$(美元符号)
和_(下划线)
。 -
标识符不能以数字开头。
-
标识符不能是关键字。
-
-
命名规范:
软性建议
-
类名规范:首字母大写,后面每个单词首字母大写(大驼峰式)。例:HelloWorld。
-
变量名规范:首字母小写,后面每个单词首字母大写(小驼峰式)。例:helloWorld。
-
方法名规范:同变量名。
-
Java常量
常量:是指在Java程序运行期间固定不变的数据。
类型 | 含义 | 数据举例 |
---|---|---|
整数常量 | 所有的整数 | 0,1,548,-9 |
浮点数常量 | 所有的小数 | 0.1,0.1,2.11,-5.1 |
字符常量 | 单引号引起来,只能写一个字符,必须有内容 | ‘a’,‘好’,’ ’ |
字符串常量 | 双引号引起来,可以写多个字符,也可以不写 | “A”,“hello”,“你好”,"" |
布尔常量 | 只有两个值 | true,false |
空常量 | 只有一个值 | null |
Java数据类型
数据类型分类
- 基本数据类型:包括
整数
,浮点数
,字符
,布尔
。 - 引用数据类型:包括
类
,数组
,接口
。 - 包装类:Byte,Short,Integer,Long,Float,Double,Character,Boolean。
基本数据类型
四类八种基本数据类型:
数据类型 | 关键字 | 内存占用 | 取值范围 |
---|---|---|---|
字节型 | byte | 1个字节 | -128~127 |
短整型 | short | 2个字节 | -32768~32767 |
整型 | int(默认) | 4个字节 | -231~231-1 |
长整型 | long | 8个字节 | -263~263-1 |
单精度浮点型 | float | 4个字节 | 1.4013E-45~3.4028E+38 |
双精度浮点型 | double(默认) | 8个字节 | 4.9E-324~1.7977E+308 |
字符型 | char | 2个字节 | 0~65535 |
布尔类型 | Boolean | 1个字节 | true false |
注意事项:
- 字符串不是基本类型,而是引用类型。
- 浮点型可能只是一个近似值,并非精确的值。
- 数据范围与字节数不一定相关,例如
float
数据范围比long
更广泛,但是float
是4字节,long
是8字节。 - 浮点数当中默认类型是
double
。如果一定要使用float
类型,需要加上一个后缀F。如果是整数,默认为int
类型,如果一定要使用long
类型,需要加上一个后缀L。推荐使用大写字母后缀。
Java变量
变量:Java程序运行期间,内容可以发生改变的量。
创建一个变量并且使用的格式:
-
数据类型 变量名称;//创建了一个变量
-
变量名称 = 数据值;//赋值,将右边的数据值,赋值给左边的变量。
-
数据类型 变量名称 = 数据值;//创建一个变量的同时,立刻放入指定的数据值。
变量的注意事项:
- 如果创建多个变量,那么变量之间的名称不可以重复。
- 对于
float
和long
类型来说,字母后缀F和L不能丢掉。 - 如果使用
byte
或者short
类型的变量,那么右侧的数据值不能超过左侧类型的范围。 - 没有进行赋值的变量,不能直接使用,一定要赋值后才能使用。
- 变量使用不能超过作用域的范围。【作用域:从定义变量的一行开始,一直到直接所属的大括号结束为止】
- 可以通过一个语句来创建多个变量。例如:int a=10,b=20,c=30;
数据类型转换
当数据类型不一样时,将会发生数据类型转换!
-
自动类型转换(隐式)
1.特点:代码不需要进行特殊处理,自动完成
2.规则:数据范围从小到大(与字节数不一定相关 例如: float 4字节>long 8字节)
-
强制类型转换(显式)
1.特点:代码需要进行特殊的格式处理,不能自动完成
2.格式:范围小的类型 范围小的变量名 = (范围小的类型) 原本范围大的数据
-
注意事项
1.强制类型转换一般不推荐使用,因为有肯呢个发生精度损失、数据溢出
2.byte/short/char这三种类型都可以发生数学运算,例如加法“+”
char zifu1='A'; System.out.println(zifu1+1);//66,A被当成65进行处理
3.byte/short/char这三种类型在运算的时候,首先都会被提升成为int类型,然后再计算
byte n1=40; byte n2=50; byte result=n1+n2;//报错 n1和n2会变成int类型 不能用byte类型来接收 int result=n1+n2;//这样不会报错
4.boolean类型不能发生数据类型转换
运算符
运算符:进行特定操作的符号。例如:+
表达式:用运算符连起来的式子叫做表达式。例如:20+5、a+b
1.算数运算符
算数运算符包括: | |
---|---|
+ | 加法运算,字符串连接运算 |
- | 减法运算 |
* | 乘法运算 |
/ | 除法运算 |
% | 取模运算,两个数字相除取余数 |
++ 、-- | 自增自减运算 |
规则:首先计算得到表达式的结果,然后再打印输出这个结果
System.out.println(20+30);//两个常量之间可以进行数学运算
int a=20;
int b=30;
System.out.println(a-b);//两个变量之间可以进行数学运算
System.out.println(a*10);//变量和常量可以混合使用
注意事项:一旦运算当中有不同类型的数据,那么结果将会是数据类型范围大的那种。
int x=10;
double y=x+2.5
System.out.println(y);//结果 12.5
算数运算符中的加号“+”有三种用法:
1.对于数值来说,那就是加法
2.对于char类型来说,在计算之前,char会被提升为int类型,然后计算
3.对于字符串String来说,加号代表字符串连接操作
任何数据类型和字符串进行连接的时候,结果都会变成字符串
System.out.println("hello"+"World");//结果:helloWorld
String str="java";
System.out.println(str+20);//结果:java20
System.out.println(str+30+20);//结果:java3020
System.out.println(str+(20+30));//结果:java50
自增运算符:++
自减运算符:–
基本含义:让一个变量+1,或者让一个变量-1
使用格式:写在变量名称之前,或者变量名称之后 例如 ++num num++
使用方式:
1.单独使用:不和其他任何操作混合,自己独立成为一个步骤
2.混合使用:和其它操作混合,例如与赋值混合,或者与打印操作混合等等
使用区别:
1.单独使用的时候,前++和后++没有任何区别。
int num=10;
System.out.println(num);//
++num;
System.out.println(num);//11
num++;
System.out.println(num);//12
2.混合使用时
A.如果是【前++】,那么变量【立刻+1】,然后拿着结果进行使用(先加后用)
B.如果是【后++】,那么先使用变量本来的数值,然后【让变量+1】(先用后加)
int num2=20;
System.out.println(++num2);//21
System.out.println(num2);//21
int num3=30;
System.out.println(num3++);//30
System.out.println(num3);//31
注意事项:只有变量才能使用自增、自减。常量不可发生改变,所以不能使用。
2.赋值运算符
赋值运算符分为:
-
基本赋值运算符:就是一个等号“=”,代表将右侧的数据交给左侧的变量(例如:int a=30)
-
复合赋值运算符:
1.+= a+=3 相当于 a=a+3
2.-= b-=4 相当于 b=b-4
3.*= c *=5 相当于 c=c * 5
4./= d /=6 相当于 d=d / 6
5.%= e%=7 相当于 e=e %7
注意事项:
- 只有变量才能使用赋值运算符,常量不能进行赋值
- 复合赋值运算符其中隐含了一个强制类型转换
byte num=30;
num+=5;//num=num+5 相当于 num=byte+int 然后 num=int+int num=(byte)int
System.out.print(num);//35
3.比较运算符
比较运算符 | |
---|---|
== | 比较符号两边数据是否相等,相等结果是true |
< | 比较符号左边的数据是否小于右边的数据,如果小于结果是true |
> | 比较符号左边的数据是否大于右边的数据,如果大于结果是true |
<= | 比较符号左边的数据是否小于或者等于右边的数据,如果小于或者等于结果是true |
>= | 比较符号左边的数据是否大于或者等于右边的数据,如果大于或者等于结果是true |
!= | 不等于符号,如果符号两边的数据不相等,结果是true |
注意事项:
- 比较运算符的结果一定是一个Boolean值,成立就是true,不成立就是false
- 如果进行多次判断,不能连着写(例如 1< a < 3)
4.逻辑运算符
逻辑运算符 | |
---|---|
与(并且) && | 两个条件都是true,才是true,否则就是false |
或(或者) || | 至少一个是true,就是true,两个都是false,才是false |
非(取反) ! | 本来是true,变成false;本来是false,变成true |
注意事项:
- 与“&&”,或“||”,具有短路效果;如果根据左边已经可以判断得出最终结果,那么右边的代码将不再执行,从而节省一定的性能
- 逻辑运算符只能用于Boolean值
- 与和或需要左右各自有一个Boolean值,但是取反只要有唯一的一个Boolean值即可
- 与和或两种运算符,如果有多个条件,可以连续写(例如:1<a && a<3)
5.三元运算符
-
一元运算符:只需要一个数据就可以进行操作的运算符(例如:取反 !、自增 ++、自减 --)
-
二元运算符:需要两个数据才可以进行操作的运算符(例如:加法 +、赋值 =)
-
三元运算符:需要三个数据才可以进行操作的运算符
-
格式:数据类型 变量名称 = 条件判断?表达式A:表达式B
-
流程:(1)判断条件是否成立
(2)如果成立为true,那么将表达式A的值赋值给左侧的变量
(3)如果不成立为false,那么将表达式B的赋值给左侧的变量
int a=10,b=20; int max=a>b?a:b; System.out.print(max);//20
-
注意事项:
-
必须同时保证表达式A和表达式B都符合左侧数据类型的要求
int max=3>4?2.5:10;//错误写法
-
三元运算符的结果必须被使用
a>b?a:b;//错误!不是语句
方法入门
-
方法:就是将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能。
-
格式:
修饰符 返回值类型 方法名 (参数列表){ 方法体 return ; }
-
定义格式解释:
- 修饰符: 目前固定写法 public static
- 返回值类型: 目前固定写法 void ,其他返回值类型在后面讲解
- 方法名:为我们定义的方法起名,满足标识符的规范,用来调用方法
- 参数列表: 目前无参数, 带有参数的方法在后面讲解
- 方法体:大括号中可以包含任意条语句
- return:方法结束。因为返回值类型是void,方法大括号内的return可以不写
注意事项:
- 方法的定义先后顺序无所谓
- 方法的定义不能产生嵌套包含关系
- 方法定义好了之后,不会执行,如果要执行 一定要进行方法的【调用】
- 调用方法格式: 方法名称();
流程控制
1.顺序结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UpF4RXCq-1601351117699)(D:\Desktop\双体系\新建文件夹\01-顺序结构的流程图.png)]
2.选择结构
- if语句的第一种格式:if
if(关系表达式){
语句体;
}
- 执行流程
- 首先判断关系表达式看其结果是true还是false
- 如果是true就执行语句体
- 如果是false就不执行语句体
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I9QaUJv7-1601351117702)(D:\Desktop\双体系\新建文件夹\02-单if语句的流程图.png)]
- if语句第二种格式:if…else
if(关系表达式){
语句体1;
}else{
语句体2;
}
- 执行流程
- 首先判断关系表达式看其结果是true还是false
- 如果是true就执行语句1
- 如果是false就执行语句2
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5k0lesXQ-1601351117704)(D:\Desktop\双体系\新建文件夹\03-标准if-else语句的流程图.png)]
- if语句第三种格式:if…else if…else
if(判断条件1){
执行语句1;
}else if(判断语句2){
执行语句2;
}
...
else if(判断条件n){
执行语句n;
}else{
执行语句n+1;
}
- 执行语句
- 首先判断关系表达式1看其结果是true还是false
- 如果是true就执行语句体1
- 如果是false就继续判断关系表达式2看其结果是true还是false
- 如果是true就执行语句体2
- 如果是false就继续判断关系表达式…看其结果是true还是false
- …
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1vNzPYTr-1601351117706)(D:\Desktop\双体系\新建文件夹\04-扩展if-else语句的流程图.png)]
3.选择语句
- switch语句格式:
switch(表达式){
case 常量1:
语句体1;
break;
case 常量2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
- 执行流程
- 首先计算出表达式的值
- 和case依次比较,一旦有对应的值,就会执行相应的语句,在执行过程中,遇到break就会结束
- 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉
switch使用注意事项:
-
多个case后面的数值不可以重复
-
switch后面小括号中只能是一下数据类型:{
基本数据类型:byte/short/char/int
引用数据类型:String字符串/enum枚举
}
-
switch语句格式可以很灵活,前后顺序可以颠倒,而且break语句还可以省略”匹配到哪一个case就从哪一个位置向下执行,直到遇到break或者整体结束为止“
4.循环语句
- for循环语句格式:
for(初始化表达式1:表达式2:表达式3){
循环体4
}
- 执行顺序
- 执行顺序:1234>234>234…2
- 1负责完成循环变量初始化
- 2负责判断是否满足循环条件,不满足就跳出循环
- 3具体执行的语句
- 4循环后,循环条件所涉及变量的变化情况[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ccMmygNq-1601351117708)(D:\Desktop\双体系\新建文件夹\05-for循环的流程图.png)]
循环结构基本组成部分:
- 初始化语句:在循环开始最初执行,而且只做唯一一次
- 条件判断:如果成立,则循环继续;如果不成立,则循环退出
- 循环体:重复要做的事情内容,若干行语句
- 步进语句:每次循环之后都要进行的扫尾工作,每次循环结束之后都要执行一次
- while循环语句格式:
初始化表达式(1)
while(布尔表达式(2)){
循环体(3)
步进表达式(4)
}
-
执行流程
- 执行顺序:1234>234>234…2不满足为止
- 1负责完成循环变量初始化
- 2负责判断是否满足循环条件
- 3具体执行的语句
- 4循环后,循环变量的变化情况
-
do…while循环格式
初始化表达式1
do{
循环体3
步进表达式4
}while(布尔表达式2);
- 执行流程
- 执行顺序:134>234>234…2不满足为止
- 1负责完成循环变量初始化
- 2负责判断是否满足循环条件,不满足则跳出循环
- 3具体执行语句
- 4循环后,循环变量的变化情况
Java内存划分五个部分
-
栈(Stack):存放的都是方法中的局部变量。方法的运行一定要在栈当中运行。
局部变量:方法的参数,或者是方法{}内部的变量
作用域:一旦超出作用域,立刻从栈内存当中消失
-
堆(Heap):凡是new出来的东西,都在堆当中。
堆内存里面的东西都有一个地址值:16进制
堆内存里面的数据,都有默认值,规则如下:
如果是整数:默认值为0
如果是浮点数:默认值为0.0
如果是字符:默认值为’\u0000’
如果是布尔:默认值为false
如果是引用类型:默认值为null
-
方法区(Method Area):存储.class相关信息,包含方法的信息
-
本地方法栈(Native Method Stack):与操作系统相关
-
寄存器(Pc Register):与cpu相关
134>234>234…2不满足为止
- 1负责完成循环变量初始化
- 2负责判断是否满足循环条件,不满足则跳出循环
- 3具体执行语句
- 4循环后,循环变量的变化情况
Java内存划分五个部分
-
栈(Stack):存放的都是方法中的局部变量。方法的运行一定要在栈当中运行。
局部变量:方法的参数,或者是方法{}内部的变量
作用域:一旦超出作用域,立刻从栈内存当中消失
-
堆(Heap):凡是new出来的东西,都在堆当中。
堆内存里面的东西都有一个地址值:16进制
堆内存里面的数据,都有默认值,规则如下:
如果是整数:默认值为0
如果是浮点数:默认值为0.0
如果是字符:默认值为’\u0000’
如果是布尔:默认值为false
如果是引用类型:默认值为null
-
方法区(Method Area):存储.class相关信息,包含方法的信息
-
本地方法栈(Native Method Stack):与操作系统相关
-
寄存器(Pc Register):与cpu相关