Java的基础语法
变量和常量
变量:内存中一小块固定的空间,其中的内容是可变的。
常量:内存中一小块固定的空间,其中的内容是不变的。
Java是一种强类型的语言,申请的变量或常量的内存空间,必须先声明空间存储的数据类型。声明一个类型后,内存空间不能够存储声明以外的其他数据类型。
变量名:为声明内存空间起一个名字,不同变量之间变量名不能重复。
Java中的类型有两种:
- 基本数据类型(原始数据类型)
三大类共8种
- 数值类型
类型转换
10进制和2进制之间的转换
- 整数类型(4种) 默认值是0
byte |
1Byte 8bit |
-27 → 27-1 |
short |
2Byte 16bit |
-215 → 215-1 |
int(默认) |
4Byte 32bit |
-231 → 231-1 |
long |
8Byte 64bit |
-263 → 263-1 |
- 浮点数类型 默认值是0.0
float 4Byte
double(默认) 8Byte
- 文字类型 默认值 \u0000;
char 2Byte
- 布尔类型 默认值是 false(假)
boolean 1Byte
true(真)
false(假)
- 引用数据类型(今天不讲) 默认值是null
声明变量或常量的语法是:
类型 变量名;
int a;
int haha;
int abc;
int x123;
变量名命名规则:首字母只能是英文字母或_或$,其余字母可以是英文,_,$或数字。
变量名命名规范:首字母英文小写字母,其余字母是任意的。建议其余的每个单词的首字母应该大写
int empSalary;
变量的声明:当前阶段应该写在方法中
通过 = 进行初始化
a = 3; //将数字3放入到a表示的变量内存中
也可以在声明的同时立即初始化
int a = 3;
练习:声明int变量a和b,分别为a和b赋值10和15
基本数据类型的类型转换
- 自动类型转换
- 同样类型,范围小的向大的自动转换
- 整数类型向浮点数类型自动转换
- 字符型向int型自动转换
- 布尔类型不参与任何转换
- 强制类型转换
自动转换的顺序反向就需要强制转换
如果数据允许,不会出现问题
但是也可能造成精度丢失的问题
- 浮点数向整数转换,会丢失小数部分的精度
- 整数向整数转换,可能会丢失位(bit)的精度
500有9位 111110100 丢失多出的一位
Byte能存8位 11110100 -> -12
操作符(运算符)
- 数学运算符
+,-,*,/,%
除法:两个整数相除,得到的结果一定是整数
数学运算中如果有浮点数参与计算,结果的类型一定是浮点数类型(double)
除法和取余操作的除数不能为0
整数:程序会报异常
浮点数:得到Infinity 无限 (无穷大)
取余操作:结果的符号问题
结果的符号与被除数的一致
练习:给定一个变量a,是一个三位正整数。分别显示出该三位数各个位置上的数字
- 单目运算符
只适用于整数变量
++ 表示整数自增1
-- 表示整数自减1
int a = 1;
a++; 先使用a当前的值参与运算,随后a自增1
++a; 先将a自增1,再使用自增后的值参与运算
- 比较运算符(比较后的结果都是boolean类型)
> 大于 数字,字符
< 小于 数字,字符
== 等于 数字,字符,布尔
!= 不等于 数字,字符,布尔
>= 大于等于 数字,字符
<= 小于等于 数字,字符
- 赋值运算符
= 将等号右侧的表达式计算结果赋值给左侧的变量
+= 数字赋值 a += 5; 相当于 a = a+5; a加5
-= 数字赋值 a -=3; 相当于 a = a-3; a减3
*= /= %=
+= 包含了自动类型转换的功能
short s = 3; s = s + 2; //2是int类型 s+2也是int类型 int向short赋值 认为出问题 s += 2; //自带类型转换 |
- 逻辑运算符
与 &&
A && B 必须同时满足A和B即可
&& |
true |
false |
true |
true |
false |
false |
false |
false |
或 ||
A || B 满足A或B其一即可
|| |
true |
false |
true |
true |
true |
false |
true |
false |
非 !
A = true B=false
!A == false; !!A = true;
!B == true; !!B = false;
与逻辑表达式表示一个综合的结果
&&和||是短路的
Int a = 3;
Boolean b = (a++ > 3) && (a -- < 3);
b == false;
a == ? 4
因为(a++ > 3)的结果是false,决定了&&的运算结果一定是false。
所以第二个运算(a -- < 3)就不执行了,相当于只执行了a++,最后a==4
- 位(bit)运算符
& 与 1&1 = 1 1&0=0 0&1=0 0&0 = 0
| 或 1|1 = 1 1|0=1 0|1=1 0|0=0
^ 异或 1|1=0 1|0=1 0|1=1 0|0=0
课后作业:利用异或操作完成两个变量的数值交换
笔试:&&与&的区别 或 ||与|的区别
&&:逻辑与,表示的是boolean值的逻辑运算,是短路的。
&:按位与,表示的是位(bit)运算,不是短路的
- 三目运算符
逻辑表达式 ? 值1 : 值2 (值1和值2的类型应该是一致的)
如果逻辑表达式的值是true,使用值1
如果逻辑表达式的值是false,使用值2
练习:在控制台上输入一个整数,判断这个整数是否能同时被5和6整除,在控制台上输出“真”或“假”
表达式:变量和运算符组成一个算式就是表达式
条件与循环
条件和循环是整个程序的骨架
- 条件控制
- if
if(逻辑表达式){
}
当括号中的逻辑表达式结果为true时,执行{}中的代码
随机生成一个[0,9]区间的整数
判断该整数能否被2整除,在控制台上输出:x+”能被2整除”
- if…else
if(逻辑表达式){
}else{
}
当括号中的逻辑表达式结果为true时,执行if分支{}中的代码
当逻辑表达式结果为false时,执行else分支{}中的代码
else只与与它同级的最近的if组成一个逻辑整体。Else不能单独使用
- if…else if(可以有多个)…else
if(逻辑表达式1){
}else if(逻辑表达式2){
} else if(逻辑表达式3){
}…
else if(逻辑表达式n){
}else{ //可省略
}
这些分支最多只能有一个分支被执行,执行第一个符合条件的分支
- switch
switch(x) { //x的类型只能是byte,short,int,char, String
case a: 代码; x == a时的分支
case b: 代码; x==b时的分支
…
case n: 代码; x==n时的分支
default: 代码; 相当于else
}
当x的值是b时,会执行b和b之后所有分支的代码
break; 在分支结尾,可以跳出条件,不执行其他分支
条件分支是可以进行嵌套的
练习:随机生成一个整数[0,9],判断该数字是否是偶数,判断该数字能否被3整除
练习:在控制台上输入一个四位数表示年,写一个程序,判断输入的年是否是闰年,如果是闰年,在控制台上显示“闰年”否则显示“平年”
闰年的条件(满足其一即是闰年)
- 能被4整除且不能被100整除
- 能被400整除
- 循环控制
反复重复的事情。
程序中,循环的要素
- 初始值 工资卡的初始额
- 边界 1年 12个月的工资
- 增量 每月发放工资3000
- for
语法 for(初始值; 边界条件; 增量){
}
符合边界条件(条件为true),就会执行{}中的代码
int x = 0; //月薪
for(int i = 1; i <= 12; i++){
x += 3000;
}
(1)(2)(4)位置上的代码可以省略,但分号不能省略。语法没有错误,但很可能造成死循环
循环的嵌套
多层循环嵌套后,内层循环完整执行一次,外层循环执行其中一轮。
循环的中断(重要)
通过break语句可以中断并跳出一层循环
通过continue语句可以放弃一轮循环,继续执行下一轮循环
笔试或面试:循环中break与continue的区别
- while
while(逻辑表达式){
}
当逻辑表达式的结果为true时,执行{}中的代码
- do…while
do{
}while(逻辑表达式);
当逻辑表达式的结果为true时,执行{}中的代码
While与do…while的区别:while循环中的代码可能一次都不执行,do…while循环中的代码至少会被执行一次
死循环
当循环程序无法结束一直运行,就会产生死循环。多数情况下是由于程序开发者编写的逻辑问题的产生