1. 标识符
2. 常量
3. 变量
4. 运算符
5. 键盘录入
6. 流程控制语句
1.标识符.
针对包,类,接口,方法,变量,常量等名字的字符序列.
组成:
1)26给英文字母;
2)数字字符;
3)可包含"_"和"$";
注意事项:
1)严格区分大小写,要见名知意;
2)数字字符不能作为开头;
3)不能是java中的关键字;
4)不能由非法字符.
具体举例:
1)类和接口命名使用"大驼峰命名法";
2)方法和变量命名使用"小驼峰命名法";
3)常量取名,单个单词全部大写,多个单词中间用"_"隔开.
2.常量.
在程序运行过程中,其值不发生变化的量.
分类:
1)字面值常量:
a)字符串常量:"HelloWorld"(任何数据类型 + 字符串 = 新的字符串);
b)字符常量:'a','A','0'. 对应 ASCII 表中数值;
c)整数常量: exmple 100/80.....包含进制;
d)小数常量: exmple 3.14/12.56....;
e)布尔常量: true/false;
f)空常量: null;
2)自定义常量: 后续补充
3.变量.
在程序执行过程中,其值发生改变的量.
三要素:
1)数据类型;
2)变量名称(满足标识符规则);
3)初始化值(满足范围);
数据类型:
a. 基本数据类型(四类八种):
1)整数类型:
byte 字节类,取值范围 -128~127,占 1 个字节;
short 短整类,占 2 个字节 ;
int 整数类(默认),占 4 个字节;
long 长整型,占 8 个 字节,初始化值的末尾加 L 或 l;
2)浮点类型:
double 是浮点默认类型,双精度,占 8 个 字节;
float 单精度,占 4 个 字节,初始化值末尾加 F 或 f;
3)字符类型:
char 单引号'xxx'括起来的单个内容,占 2 个字节;
4)布尔类型:
boolean 没有类型转换,只表示真假 true/false,占 1 个 字节;
b. 引用数据类型:
数组/类/接口等.
注意事项:
1)同一个变量不能重复定义;
2)一行定义一个变量(特殊需求可定义多个),用";"表示结束;
3)在使用前必需进行初始化;
应用问题:
1)变量要计算,数据类型必须一致;
a. 隐式类型转换: byte/char/short 之间不相互转换,一旦参与运算,优先转为 int 类型.
例: int a = 4;
byte b = 3;
int c = a + b ;(此处 b 参与运算,自动升类型为 int )
b. 强制类型转换(显示转换): 适用于基本类型和引用数据类型,没有明确要求尽量不用,可能有损精度.
格式: 目标数据类型 变量名 = (目标数据类型) (初始化值/表达式) ;
例: int a = 4 ;
int b = 3;
byte c = (byte) a +b;
2) byte b = 200 ?
byte b = (byte) 200 ;
因为 200 超过 byte 类型的范围,所以升为 int 类型
00000000 00000000 00000000 11001000 原码=反码=补码
强转 → 剩一个字节: 11001000(强转后的补码)
求强转以后的反码 : 11000111
求强转后的原码 : 10111000 = - 56
4.运算符.
分类:
1) 算术运算符;
2) 赋值运算符;
3) 关系(比较)运算符;
4) 逻辑运算符;
5) 位运算符;
6) 三元(三目)运算符;
作用:
1)算术运算符:
+ , - , * , /(默认取整) , %(求余数);
2)赋值运算符:
基本赋值运算符"=",把 = 右边的数据赋值给左边.
例 : int a =10 ; 10 赋值给 a
拓展赋值运算符 : 符号右边的数据和左边的数据做对应的运算后在赋值给左边.
例 : int a =10 ;
a += 20 ; → 等价与 a = a + 20
3)比较运算符:
!= , < , <= , >= , > , == 最终结果只有 ture/false
格式 : x >=1 && x <==3
4)逻辑运算符:
基本逻辑运算符 :
逻辑单与 "&" : 有 false 则 false;
逻辑单或 "|" : 有 true 则 true ;
逻辑异或 "^" : 相同为 false, 不同为 true;
逻辑非 "!" : 非 true 则 false, 非 false 则 true ;
拓展逻辑运算符 :
逻辑双与 "&&" : 具有短路效果, 符号左边如果错误,右半边则无需执行.
区别与逻辑单与 "&"的无论对错,右边都执行;
例: int a =3 ;
int b =4 ;
System.out.println((++x==4)&&(--y ==5));
System.out.println("x:"+x+",y"+y);
输出结果 : false
x = 4,y =4
逻辑双或"||" : 符号左边 true,右边无需执行,单或"|"同上理;
5)位运算符
基本位运算符:
位与 "&" :有 0 则0 ;
位或"|" : 有1 则 1 ;
位异或"^" : 相同为 0 ,不同为 1 (一个数据被另一个数据^两次,值是本身);
反码"~" : 按位取反, 0 变 1 , 1 变 0,包括最高符号位.
例:
3 & 4 结果
00000000 00000000 00000000 00000011 原反补相同
00000000 00000000 00000000 00000100 原反补相同
有 0 则 0:
其他位移符号:
<<: 左移 : 将数据的补码进行左移动,右边不够的补 0,将最高符号位丢弃;
特点 : 左移结果 = 符号左边的数据 *2 的移动次幂;
>>: 右移 : 将数据的补码进行右移动,如果最高符号位为1,则左边补1;
最高符号位为 0 ,则左边补0;
特点 : 右移结果 = 符号 左边的数据 /2 的移动次幂;
>>>: 无符号右移 : 无论最高符号位是1 还是0 ,左边始终补 0.
例 : -24 >>2
10000000 00000000 00000000 00011000 原码
先求反码:
11111111 11111111 11111111 11100111 反码
再求补码 :
11111111 11111111 11111111 11101000 补码
对补码进行右移:
11111111 11111111 11111111 11111010 移动后的补码
求反码:
11111111 11111111 11111111 11111001 变动后的反码
求原码:
10000000 00000000 00000000 00000110 变动后的原码
→ - 4 2
-24 >> 2 结果为 -6
6)三元(三目)运算符
格式: (表达式)?执行true的结果:执行false的结果;
执行流程: 如果表达式 true,执行 ":"左边的结果;如果表达式 false,执行 ":"右边的结果;
例: 求两个数据的最大值
int a =1;
int b = 2;
int c = (a>b)?a:b
System.out.println("最大值:"+c)
5. 键盘录入.
可以使用键盘输入数据,运行程序得到想要的结果.
使用步骤:
1)导包 : java中只要不是 java.lang包下的类都需要导入;
import java.util.Scanner;(位置在class......上方的行)
2)固定格式 : 创建键盘录入对象(文本扫描对象)
Scanner 对象名 = new Scanner(System.in);
3)开始录入数据 :
例 : int 类型
int 变量名 = 对象名.nexInt();
4)使用变量 :
例 : int 类型
Scanner s = new Scanner (System.in);
System.out.println("输入第一个数据");
int a = s.nextInt();
System.out.println("输入的数据是:"+a);
例 : String 类型
Scanner s =new Scanner (System.in);
System.out.println("输入一个字符串数据");
String a = s.nextLine();
System.out.println("输入的字符串是:"+a);
使用注意:
1)分别录入两个 int 类型 → ok;
2)分别录入两个 String 类型 → ok;
3)先录入 String 类型,再录入 int 类型 → ok;
4)先录入 int 类型,再录入 String 类型 → ng;
ng : 先录入 int 类型,再录入 String 类型会漏掉第二个数据 String ,因为
录入 int 类型数据后需要 按回车键 → 录入第二个数据,这里回车
键起到了换行的作用.
解决方式a :
每次在录入字符串之前创建一个新的键盘录入对象.
例 : Scanner s = new Scanner (System.in);
System.out.println("输入第一个数据");
int a = s.nextInt();
Scanner s2 = new Scanner (System.in);
System.out.println("输入第二个数据");
String b = s2.nextInt();
6.流程控制语句.
分类:
a)顺序结构语句 : 进入主程序后,main 方法被 jvm 调用之后代码一次由上而下执行;
b)选择结构语句 : if 语句 / switch 语句;
c)循环结构语句 : for 语句 / while 语句 / do-while 语句.
1)选择结构语句 if :
格式 1 :
if(表达式){
语句;
}
执行流程 :
1)先判断表达式是否成立;
2)如果成立,执行语句;
3)如果不成立,不执行;
格式 2 :
if语句格式2 :
if(表达式){
语句1;
}else{
语句2;
}
执行流程:
1)首先判断表达式是否成立;
2)如果成立,则执行语句1;
3)如果不成立,执行语句2;
格式 3 : 针对多种情况进行判断
if(表达式1){
语句1;
}else if (表达式2){
语句2;
...
...
...
}else {
语句n;
}
执行流程 :
1)首先判断表达式1是否成立;如果成立,则执行语句1;
2)如果不成立,继续判断表达式2是否成立,如果成立,则执行语句2;
...
...
...
如果以上都不成立,最终执行 else 里的语句;
例 :
if (a>=3 && a<=5){
System.out.println("是春季");
}else if (a>5 && a<=8){
System.out.println("是夏季");
}else if (a>8 && a<=11){
System.out.println("是秋季");
}else if (a>=1 && a<=2){
System.out.println("是冬季");
} else if (a==12){
System.out.println("是冬季");
}else {
System.out.println("无对应季节");
}
}
2)选择结构语句 switch :
格式 :
switch(表达式){
case 值1 :
语句1;
break;
...
...
default :
语句n;
break;
}
执行流程 :
1) 使用 switch 中的表达式结果和 case 的值进行匹配 ;
2) 如果匹配到了 case 的值1,则执行语句 1,break 结束 switch;
3) 如果匹配不到 case 值1,继续匹配 case 值 2 ,匹配则执行语句2;
4) 和各 case 值依次匹配,匹配到就执行想对应的语句;
5) 如果都匹配不到,则执行 default 的语句.
注意事项 :
1) case 语句后面的值只能是常量,不能为变量;
2) 每个 case 语句后必须跟 break,否则会导致 case 穿透;
3) switch 语句的结束条件:
a) 遇见 break 结束;
b) 程序默认执行末尾结束.
4) default 语句可以出现在 switch 语句中的任何位置,如果在语句中
必须后边跟 break,如果实在语句的末尾可以选择不带 break.
例 :
switch(a){
case 1:
System.out.println("贝贝");
break;
case 2:
System.out.println("晶晶");
break;
case 3:
System.out.println("欢欢");
break;
case 4:
System.out.println("迎迎");
break;
case 5 :
System.out.println("妮妮");
break;
default:
System.out.println("北京欢迎你");
break;
}