今日复习
语法
标识符:类名、方法名、变量名、
命名规则:必须遵守,不然编译错误
- 由数字、字母、$、_ 组成
- 不能以数字开头
- 区分大小写
- 不能是Java关键字
命名规范:程序员的开发习惯
- 尽量增加可读性
- 类名所有单词首字母大写 变量名 除了第一个单词 其它单词首字母大写
关键字:java中被赋予特殊含义的单词或者字符
目前学过的:class package public static void byte short int char long float double boolean true false
数据类型:
- 先按数据的性质分类 再按空间大小分类
- 整数类型:不带小数点的数字
- byte:字节型 java描述数据的基本单位 取值范围:[-128,127]
- short:短整型 1 short = 2 byte 取值范围:[-30000,30000]
- int:整性 1 int = 4 byte 整数常量默认是int类型
- long:长整型 1 long = 8 byte long类型的常量值后面加l/L
- 浮点类型:带小数点的数字
- float:单精度 小数点后有效位数为6 到 8位 float类型的常量值后面加f/F 1 float = 4 byte
- double:双精度 小数点后有效位数是12位 浮点类型默认是double类型 1 double = 8 byte
- 字符类型:所有的符号
- char :字符型 必须写在单引号中 单引号中有且只有一个字符 1 char = 2 byte 字符和整数之间可以通过编码集相互转换
- 布尔类型:只有两种结果 并且是想反的
- boolean:布尔型 只有两个值:true、false 1 boolean = 1 byte
运算后结果的数据类型
- 数据类型精度:byte-short-int(char)-long-float-long
- byte\short\char\不能直接参加运算 必须先自动提升为int才能运算
- 运算后结果的数据类型取决于精度最高的数据
运算符
- 算术运算符
- % : 求余、取模、取余
- n%m= n除以m得到一个整数 除不尽的那部分
- n%m= 结果的正负取决于n
- 获取各个位数的值:取头用除 取尾用%
- 比较运算符
- 赋值运算符
- 逻辑运算符
- 位运算符
- 三元运算符
今日内容
一. 语法
1.运算符
算术运算符
% : 求余、取模、取余
-n%m= n除以m得到一个整数 除不尽的那部分
-n%m= 结果的正负取决于n
-获取各个位数的值:取头用除 取尾用%+: 加法号
- 加法运算 a = 1+ 1 - 正数: - 字符串连接符:
System.out.println(1+"abc");
- 自增、自减
a=3;a++ //等价于 a = a + 1 System.out.println("a="+a); //4 a=3;a-- //等价于a = a- 1 System.out.println("a="+a);//2
比较运算符:>,>=,<,<=,==,!=
==:恒等:判断两边的数据是否相等
System.out.println(1 == 2); //flase
- !=:不等:判断两边的数据是否不相等
System.out.println(1 != 2);//true
注意:
- 运算后的结果是boolean类型的值
- >,>=,<,<=仅只能操作数字类型的数据
赋值运算符:+= -= *= %= /=
a=3;a+=4;//等价于a = a+4 System.out.println("a="+a); //7 a=3;a-=4;//等价于a = a-4 System.out.println("a="+a); // -1 a=3;a*=4;//等价于a = a*4 System.out.println("a="+a); //12 a=3;a/=4;//等价于a = a/4 System.out.println("a="+a); //0 a=3;a%=4;//等价于a = a%4 System.out.println("a="+a); //3 //n % m 的取值范围为[0,m-1]
- 逻辑运算符:进行逻辑判断的运算符 逻辑运算符只能操作boolean数据 逻辑运算符结果是boolean
& 单与 只有两边都为true 结果才为true
System.out.println("true&flase="+(true&false)); //false System.out.println("true&true="+(true&true)); System.out.println("flase&flase="+(false&false));//false System.out.println("flase&true="+(false&true)); //false
&& 双与 只有两边都为true 结果才为true
System.out.println("true&&flase="+(true&&false));//false System.out.println("true&&true="+(true&&true));// true System.out.println("flase&&flase="+(false&&false));//false System.out.println("flase&&true="+(false&&true));//false
| 单或 只有两边都为false 结果才为false
System.out.println("true|flase="+(true|false));//true System.out.println("true|true="+(true|true));//true System.out.println("flase|flase="+(false|false));// false System.out.println("flase|true="+(false|true));//true
|| 双或 只有两边都为false 结果才为true
System.out.println("true||flase="+(true||false));//true System.out.println("true||true="+(true||true));//true System.out.println("flase||flase="+(false||false));// true System.out.println("flase||true="+(false||true));//true
! 取反 ! true = false ! false = true
^ 异或 两边相同则为false 两边不同则为true
System.out.println("true^flase="+(true ^ false));//false System.out.println("true^true="+(true ^ true)); // true System.out.println("flase^flase="+(false ^ false)); // true System.out.println("flase^true="+(false ^ true));//false
位运算符:对数字的二进制进行位运算 >> 位运算符操作的数据的二进制
进行 | ^ & 运算时 二进制的0当false 1当true
<< 左移 : n<<m 在n的二进制后面加m个0
>> 右移 : n>>m 删除n的二进制后m位删除
System.out.println(13 >> 2) //3 System.out.println(13 << 2) //52 System.out.println(13 | 2) //15 System.out.println(13 & 2) //0 System.out.println(13 ^ 2) //15
三元运算符:可以执行一个简单的选择
格式:boolean ? 值1:值2 boolean为true时 取值1 否则取值2
int c; c = 1<2?3:4; System.out.println(c);
实例:获取两个变量中的大值
int a1=3,a2=9; //变量的值来源:页面、数据库 int max; int max = a1>a2?a1:a2; System.out.println(a1+"、"+a2+"的大值是"+max); int min = a1<a2?a1:a2; System.out.println(a1+"、"+a2+"的小值是"+min);
实例:获取三个值中b1,b2,b3的最大值
//先获取两个值得最大,再和第三个比较、 int maxb; maxb = b1>b2?b1:b2; maxb = maxb>b3?maxb:b3; System.out.println(b1+"、"+b2+"、"+b3+"的大值是"+maxb); maxb =(b1>b2&&b1>b3)?b1:(b2>b3?b2:b3); maxb = b1>b2?(b1>b3?b1:b3):(b2>b3?b2:b3);
二. 数据类型转换
七种数字类型的数据可以相互转换
数据类型精度表:byte-short-int(char)-long-float-double
- 变量赋的值的类型必须和变量一致 如果类型不一致 会自动类型转换
float f1 = 1f; //编译器会自动把int类型的1转换为float类型的1 然后赋值给变量f1 System.out.println(f1); //1.0f
自动类型转换规则
低精度数据可以自动转换为高精度的数据 格式 : 高精度变量 = 低精度值
f1 = b1;f1 = s1;f1 = i1;f1 = l1; b1 = s1;b1 = c1;b1 = i1; //报错 i1 = b1;f1 = c1;l1 = s1;
给byte、char、short类型的变量赋值int类型的常量值 会自动检查范围 判断是否溢出
- 格式:byte/short/char类型的变量 = int常量值
b1 =12;//编译器会自动把4个字节的int类型12 自动转换为1个字节byte类型的12,然后赋值 b1 = 12;b1 = -11; b1 = -129;b1 = 199; // 报错 s1 = 12;s1 = 133; s1 = 48888;s1 = -48888;//报错 c1 = 67; c1 = 67; c1 = i1; //报错 溢出 b1 = b1+1;// 报错: b1+1结果是int类型的变量 不能发生自动类型转换 c1 = s1; c1 = b1; b1 = c1; //报错 :char只能和int之间转换 不能在byte、short之间转换 s1 += 1; s1=(short)(s1+1)// 赋值运算符会自动进行数据类型转换 s1 = s1 + 1; //报错 左边是short类型 右边会直接转换为int类型 s1 = s1 + s1; //报错 short类型不能直接参加运算 ,必须转换成int类型
强制类型转换:强制的把高精度值赋值给低精度变量
- 格式: 低精度变量 = (低精度类型)高精度值;
- 强制类型转换 谨慎使用 数据精度会丢失
s1 = (short)i1; i1 = 200; b1 = (byte)i1; System.out.println("b1="+b1); // b1=-56
- 总结:
练习
public class GrammerDataTypeChangeTest {
public static void main(String[] args) {
byte b1=1;
short s1=1;
char c1=1;
int i1=1;
long l1=1;
float f1=1;
double d1=1;
b1=112; //byte类型的取值范围[-128,127] 112为int类型,自动转化为byte,无溢出,把4个字节int类型的常量112自动转换为1个字节byte类型的122 然后赋值
b1+=10; //强制类型转换:完全等价于b1 = (byte)(b1+10)
s1=b1; // 自动类型转换:低精度值可以自动转换为高精度数据
s1=b1+1; //byte、short、char类型的数据不能直接进行运算,必须转化成int类型的数据 b1+1是int类型的数据,精度高于左边s1的精度,不能转换成short类型
s1=c1; // char只能和int之间进行转换、不能在byte、short之间转换
c1=1999; // 自动类型转换情况2:int类型的数值可以转换成char类型
i1=1999;
c1=i1; //溢出 i1为int类型变量 不能将范围较小的变量赋给范围较大的变量 把高精度变量i1的值赋值给低精度变量c1需要强制类型转换
l1=9999999; //自动类型转换1:9999999为int类型数据 可以赋值给long类型
l1=9999999999999; //溢出 9999999999999为int类型 数值本身超出int类型范围[-2147483648——2147483647]报错
f1=l1; //低精度值可以自动转换为高精度数据
f1=1; //1为int类型 可以自动转换为float类型 赋值给f1
f1=1.0; //1.0为double类型,不能复制给f1
f1=(float)d1+1; //强制类型转换 复制一份d1的值 强制转换为flaoat类型,然后赋值
b1=(byte)b1+1; //b1与1相加后为int类型数据 不能赋值给byte类型
b1=(byte)(b1+1); //强制类型转换
}
}
三. 流程控制
- 通过 java 关键字来控制代码的执行流程
- 顺序结果:默认的执行顺序
- 从左到右 从上到下
System.out.println(11);System.out.println(12); System.out.println(11);System.out.println(13); System.out.println(11);System.out.println(114);
选择结构:根据条件是否成立 来选择是否执行对应代码块
if else
- 单分支:if(条件表达式){条件表达式成立时 要执行的代码}
条件表达式:结果是boolean类型的句子char sex = '女'; if(sex == '女'){ System.out.println("请坐到我身边"); }
- 双分支:if(条件表达式){条件表达式成立时 要执行的代码}else{不成立时 执行的代码}
int age = 19; if(age < 18){ System.out.println("age="+age+"小弟!"); } else{ System.out.println("age="+age+"大哥!"); }
- 多分支:if(){}else if(){}else if(){}…else{}
float score = 91; if(score<60){ System.out.println("score="+score+",不及格!"); }else if(score>=60&&score<70){ System.out.println("score="+score+",及格!"); }else if(score>=70&&score<80){ System.out.println("score="+score+",良好!"); }else if(score>=80&&score<90){ System.out.println("score="+score+",优!"); }else{ System.out.println("score="+score+",优秀!"); }