目录
一、四种进制
1.十进制
2.二进制
3.八进制
4.十六进制
二、正负
1.表示方式
2.原码、反码与补码
三、JAVA使用的字符集
1.转义字符
四、基本数据类型转换
1.自动类型转换(隐式类型转换)
①把存储范围小的量赋给存储范围大的变量
②当存储范围小的数据类型与存储范围大的数据类型混合运算,会按照范围大的计算
③当byte、short、char数据类型进行算术运算,按照int处理
2.强制类型转换
①把存储范围大的值赋给存储范围小的值,可能会损失精度或溢出
②boolean类型不参与转换
③当某个值想要提升数据类型时,也可以使用强制类型转换
3.特殊的数据类型转换
①任意数据类型与String类型数据进行“+”运算时
②String类型不能通过强制类型转换转化为其他类型
五、运算符
1.算术运算符
2.赋值运算符 =
3.比较运算符
4.逻辑运算符
5.位运算符(二进制)
6.三元运算符
六、流程控制
1.顺序结构
使用scanner对象从控制台读取数据
import java.util.Scanner;
2.分支结构
①if语句
②if…else语句
③if…else if…else语句
④if…else嵌套
⑤switch…case语句
正常表示
System.out.println(10);
0b或0B开头
System.out.println(0b10);
0开头
System.out.println(010);
0x或0X开头
System.out.println(0x10);
1byte=8bit
用最高位数字表示正负,0为正数,1为负数
负数:1000 0001 -1 1000 0000 -128
正数:0000 0000 0 0111 1111 127
正数的原码,反码,补码相同
负数:
原码:转化为二进制,最高位取1
反码:除最高位,其余位取反
补码:反码+1
Unicode字符集
\n | \r | \t | \\ | \" | \' | \b |
换行 | 回车键 | Tab键 | \键 | "键 | '键 | 删除键 |
将取值范围小的类型自动提升为取值范围大的数据类型
取值范围从小到大
byte<short=char<int<long<float<double
public class Translation{ public static void main(String [] args){ double d = 10; byte b = 130;//损坏 byte∈[-128,127] long num = 12345; long bigNum = 12345678912L;//右边超过int范围要加L } }
格式:数据类型 变量名 = (数据类型)被强制转换的数据
public class Date{ public static void main{ int i = (int)3.14; double d = 1.2; int num = (int)d;//损失精度 } }
public class Date{ public static void main{ int i = 1; int d = 2; double shang = (double)i/j;//无风险 } }
输出结果一定是String类型(其他类型在前先按其他类型运算方式计算)
public class Translation{ public static void main(String [] args){ System.out.println("" + 1 + 2);//12 System.out.println(5 + 10 + "abc");//15abc } }
可以通过""+……将其他类型的数据转化为String类型
+ | - | * | / | % | ++ | -- |
正/加/字符串连接 | 负/减 | 乘 | 除(取整) | 取余(取模) | 自增 | 自减 |
除数不能为0 如果不能整除,会自动舍弃小数部分 | 结果的正负与被模数正负一致,结果可能是小数 | ++在前,先运算后取值 a=2;b=++a a是3,b是3 ++在后先取值后运算 a=2;b=a++ a是3,b是2 | --在前,先运算后取值 a=2;b=--a a是1,b是1 --在后,先取值后运算 a=2;b=a-- a是1,b是2 |
运算方向:从右到左
例:n += (n++) + (++n)
public class Give{ public static void main(String[] args){ int n = 10; n += (n++) + (++n); // 实际运行的结果是32 System.out.println(n); } }
借助字节码文件的分析:javap -c Give.class
public class Give { public static void main(String[] args){ //short s = 2; //①,错误:不兼容的类型,从int转换为short可能会有损失 //原因:byte、short、char做数学运算时就自动转换为int类型 //s+2是int类型 //s = s + 2; //②,编译通过,说明+=有自动的类型转换 /* s += 2; System.out.println(s); int i = 1; i *= 0.1; System.out.println(i); i ++; System.out.println(i); */ /* int m =2; int n = 3; 先取m=2,计算“n*=m”,再计算++ n *= m++; System.out.println("m=" + m); System.out.println("n=" + n); */ /* 0: bipush 10 2: istore_1 将10赋值给n */ int n=10; /* 3: iload_1 读取变量n的值 [10+?] 4: iload_1 读取变量n的值 [10+10] 5: iinc 1, 1 执行自增1 n从10变成11 8: iinc 1, 1 执行自增1 n从11变成12 11: iload_1 读取变量n的值,n为12 12: iadd 执行加法10+10=20 13: iadd 执行加法12+20=32 14: istore_1 把最后一个加法的值32赋给n */ n += (n++) + (++n); System.out.println(n); } }
除+=还有-=、*=、/=、%=
最终返回布尔值true/false
== | != | < | > | <= | >= | instanceof |
是否等于 | 是否不等于 | 是否小于 | 是否大于 | 是否小于等于 | 是否大于等于 | 是否是类的对象 |
public class Compare{ public static void main(String[] args){ System.out.println(5 == 6); System.out.println("Hello" instanceof String); boolean b1 = false; if(b1 == true){ System.out.println("结果是真的"); }else{ System.out.println("结果为假"); } } }
& | && | | | || | ! | ^ |
逻辑与 | 短路与 | 逻辑或 | 短路或 | 取反 | 异或 |
前面即使判断出结果,后面还会执行 | 有短路效果 只要前面的表达式为false,整体就是false,后面不执行 | 前面即使判断出结果,后面还会执行 | 带短路效果 只要前面的表达式为true,整体就是true,后面不执行 | 相同为false 不同为true |
符号 | 含义 | 规则 | 例子 |
<< | 左移 | 空位补0,被移除的高位丢弃,空缺位补0 | 3<<2 12 |
>> | 右移 | 当最高位是0,右移后,空缺位补0 当最高位是1,右移后,空缺位补1 | 4>>1 2 |
>>> | 无符号右移 | 被移位二进制最高位无论是0或者是1,空缺位都用0补 | 3>>>1 1 |
& | 按位与 | 二进制位进行&运算,只有1&1时结果是1,否则是0 | 6&3 2 |
| | 按位或 | 二进制位进行 | 运算,只有0 | 0时结果是0,否则是1 | 6|3 7 |
^ | 按位异或 | 二进制位相同是0,二进制位不同是1 | 6^3 5 |
~ | 按补码取反 | ~6 -7 |
格式:(条件表达式)?表达式1:表达式2;
true,结果为表达式1
false,结果为表达式2
public class Give{ public static void main(String[] args){ int i = 30; int j = 20; String result = (i>j)?"i比j大":"i比j小"; } }
导入scanner类
// 导入Scanner类 import java.util.Scanner; public class Demo16Scanner { public static void main(String[] args){ // 1.创建Scanner对象 Scanner scanner = new Scanner(System.in); // 2.读取int类型数据 System.out.print("请输入一个整数:"); // 调用scanner对象的nextInt()方法 int age = scanner.nextInt(); System.out.println("age="+age); // 3.读取boolean类型数据 System.out.print("请输入一个布尔值:"); boolean flag = scanner.nextBoolean(); System.out.println("flag="+flag); // 4.读取字符串 System.out.print("请输入一个字符串:"); // next()方法会因为空格而终止读取 String strValue = scanner.next(); System.out.println("strValue="+strValue); // 建议使用: // nextLine()方法不会因为空格而终止读取 strValue = scanner.nextLine(); System.out.println("strValue="+strValue); } }
// 创建Scanner对象 Scanner scanner = new Scanner(System.in); public class If{ public static void main(String[] args){ System.out.print("请输入i:"); int i = scanner.nextInt(); System.out.print("请输入j:"); int j = scanner.nextInt(); // 测试使用单独的if语句 // 当if(判断条件)为true时执行{}中的语句 if (i > j){ System.out.println("i 比 j 大"); } }
如果if语句块中只有一条语句,可以省略{}
import java.util.Scanner; public class If{ public static void main(String[] args){ //创建scanner对象 Scanner scanner = new Scanner(System.in); System.out.print("请输入i:"); int i = scanner.nextInt(); System.out.print("请输入j:"); int j = scanner.nextInt(); //省略{} if (i < j) System.out.println("i 比 j 小"); System.out.println("后续操作"); } }
对于布尔值
import java.util.Scanner; public class If{ public static void main(String[] args){ // 读取一个布尔值 System.out.print("请输入flag:"); boolean flag = scanner.nextBoolean(); // 没有必要写flag == true if (flag) { System.out.println("flag是真的"); } } }
import java.util.Scanner; public class If{ public static void main(String[] args){ //创建scanner对象 Scanner scanner = new Scanner(System.in); System.out.print("请输入i:"); int i = scanner.nextInt(); System.out.print("请输入j:"); int j = scanner.nextInt(); if (i > j){ // 执行条件判断① System.out.println("i 比 j 大"); // ①为true时执行 } else if (i < j) { // ①为false继续执行下一个条件判断② System.out.println("i 比 j 小"); // ②为true时执行 } else { System.out.println("i 和 j 相等"); // ②为false时执行 // 嵌套在其他if...else结构内的if if (m > n){ System.out.println("m 比 n 大"); } } } }
当case都不满足,则执行default分支
break:跳出循环
import java.util.Scanner; public class Demo18SwitchCase { public static void main(String[] args){ // 创建Scanner对象 Scanner scanner = new Scanner(System.in); System.out.print("请输入季节:"); String season = scanner.nextLine(); // 使用season变量的值和后面的case依次进行比较 // 遇到一个满足条件的case,那么后面的都会被执行,包括default分支 // 除非在某个case中使用了break关键字,停止了case的执行。 switch(season){ case "spring": System.out.println("我喜欢春天"); break ; case "summer": System.out.println("我喜欢夏天"); break ; case "autumn": System.out.println("我喜欢秋天"); break ; case "winter": System.out.println("我喜欢冬天"); break ; // 当前面每一个case都不匹配时执行default分支(默认分支) default: System.out.println("我喜欢梅雨季节"); } } }