一、类型转换
1. 二进制十进制互转
计算机以二进制存储数据。十进制转二进制,使用除二取余法并倒置取数。如35
现在来验证一下是否准确,此时将10011转为十进制数采用多项式求和,从低到高,二进制每一位分别代表了
2
n
−
1
2^{n-1}
2n−1其中n为从低到高的位数,10011中的倒数第一个1代表2的0次方,依次类推可得,验证
1
×
2
0
+
1
×
2
1
+
0
×
2
2
+
0
×
2
3
+
0
×
2
4
+
1
×
2
5
=
35
1\times 2^0+1\times 2^1+0\times 2^2+0\times 2^3+0\times 2^4+1\times 2^5=35
1×20+1×21+0×22+0×23+0×24+1×25=35
2. JAVA中的不同进制编程格式
Java程序中支持书写二进制、八进制、十六进制的数据,分别需要以0B或者0b、0、0X或者0x开头。
int i1 = 0B01100001;
System.out.println(i1);//97
int i2= 0141;
System.out.println(i2);//97
int i3 = 0x61;
System.out.println(i3);//97
3. 自动类型转换隐式转换
1、存在某种类型的变量赋值给另一种类型的变量
- 类型范围小的变量,可以直接赋值给类型范围大的变量。byte类型的变量或常量可以赋值给int类型
byte a = 12//1B=8位
int b=a;//4B=32位 8位直接拖入最后一个字节,符号位0即整数前面全部补0
System.out.println(b);//12
自动类型转换的食物链,单向箭头
int c= 100://4
double d=c:/ 8 发生了自动类型转换了Systen.aut.printin(d):
char ch="a";//ASCII码表,char是数值型类型,97=> 00000000 01100001
int i=ch;/ 发生自动类型转换=> 00000000 00000000 00000000 01100001
3. 表达式的自动类型转换
1、存在不同类型的变量或数据一起运算
- 在表达式中,小范围类型的变量,会自动转换成表达式中较大范围的类型,再参与运算
- 表达式的最终结果类型由表达式中的最高类型决定。
- 在表达式中,byte、short、char 是直接转换成int类型参与运算的
byte a = 10;
int b = 20;
long c = 30;
long rs=a+b+C;
Systen.out.println(rs);
double rs2=a + b+1.0;
Systen.out.println(rs2);
byte 1 = 10;
short j = 30;
int rs3 = i + j;
systen.out.println(rs3);
//笔试题:
byte b1 = 10:
byte b2 = 80;
byte b3 = b1 + b2;//报错,因为计算机怕在运算过程中超过值域,byte、short、char 是直接转换成int类型参与运算的,
4. 强制类型转换
大范围类型的变量-> 小范围类型的变量,java不会自动转换,类型范围大的数据或者变量,直接赋值给类型范围小的变量,会报错。
- 强制类型转换:强行将类型范围大的变量、数据赋值给类型范围小的变量。
- 数据类型 变量2=(数据类型)变量1、数据
- 强制类型转换可能造成数据(丢失)溢出,不推荐,丢失精度了!
- 浮点型强转成整型,直接丢掉小数部分,保留整数部分返回
- 定义变量整数用int,小数用double推荐!
int a = 20;//32位
byte b=(byte)a;//ALT + ENTER 强剧类型转换 截至32位的后8位给它
System.out.println(a);
System.out.println(b);//没超出范围,正常输出20
int i = 1500;//00000000 00000000 00000101 11011100
byte j =(byte)i;// 11011100 首位是符号位,表示负数,-36
System.out.printn(j); //-36
二、运算符
运算符:对变量、字面量进行运算的符号
表达式:用运算符连接起来符合Java语法的式子
1. 算术运算符
其中除法,整数与整数运算只能得到为整数的商,没有小数部分,除非使用浮点数运算,如10.0/2
//数据拆分 标准公式num/10^(n-1)%10,如个位,num/10^0%10,十位百位以此类推
int num=456;
//数值拆分
int ge=num%10;// 456%10=45..6,取6
int shi=num/10%10;// 456/10=45%10=4...5
int bai=num/100%10 // 456/100%10=4%10=4
加号:
- 数字相加(符合表达式自动转换)
- 字符相加(表达式自动转换)
- 单独打印展示的字符本身
- 参与运算展示的是数值类
- 字符串相加
- 字符串相加直接拼接
- 字符串数值运算直接拼接
2. 赋值运算符
int a=10;
short s=1;
s+=2;//此行包含强制类型转换,等价于s=(short)(s+2)
扩展的赋值运算符隐含了强制类型转换
//常量优化机制:在编译时,如果常量在左边类型的范围内,编译通过,反之编译失败(报错)
byte b=1;//int->byte 大->小 属性强转
byte b2=128;//error
b=(short)b+1;//整体结果为int,需要强转
3.自增自减运算符
只能操作变量,不能操作字面量
int i=10;
int rs=++i;//先加1=11赋值给rs
int rs2=i++;//先赋值rs2 10,再i=11
如果单独使用放前放后是没有区别的。
非单独使用:在变量前,先进行变量自增/自减,再使用变量。
非单独使用:在变量后,先使用变量,再进行变量自增/自减。
4.关系运算符
![!](https://img-blog.csdnimg.cn/direct/6abc71d4d21e4c4a8bb885da796ab806.png)
判断数据是否满足条件,最终会返回一个判断的结果,这个结果是布尔类型的值:true或者false。
注意:在java中判断是否相等一定是“==”千万不要把误写成
5.逻辑运算符
6.三元运算符
- 格式: 条件表达式?值1:值2;
- 执行流程: 首先计算关系表达式的值,如果值为true,返回值1,如果为false,返回值2。
double score = 58.5;
stringrs=score>=60?"及格":"不及格";
System.out.println(rs);
//二数比大小
int a = 99;
int b = 69;
int mex =a> b?a : b;
System.out.println(max);
//三数求最大
int i = 10;
int j= 45;
int k = 34;
int temp =i>j?i:j;//比较ij得出较大
int max2 =temp > k? temp : k;//比较剩余的和较大得出最大
System.out.println(max2);
7.运算符优先级
8. 案例知识:在程序中接收用户通过键盘输入的数据
Scanner sc new scanner(Systen.in);
System.out.println("请款输入斯的年龄:”);
sc.nextInt()://会开始等持用户输入一个整数,直到用户按了enter键,才会拿到
new一个对象,只需new 对象类.var,按下回车,new Scanner(System.in).var回车自动生成对象名和定义类型的。
三、程序结构
1. Debug概述
Debug:是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。使用断点调试,断点是个标记,表示从哪里开始看。控制程序一步一步执行,查看每一步变量的变化。
①如何加断点:选择要设置断点的代码行,在行号的区域后面单击鼠标左键即可
②如何运行加了断点的程序:在代码区域右键Debug执行
③看哪里:看Debugger窗口,其中Frame窗口表示程序运行到哪个方法,variables表示变量,看Console窗口
④点哪里:点(Step Over F8 不进方法)开始,点(Stop)结束,step into进方法
⑤如何删除断点:选择要删除的断点,单击鼠标左键即可
- view breakpoints:查看断点,选择点击done,批量取消
2. 顺序结构
- 顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行
3. 分支结构
3.1 if语句
根据判定的结果(真或假)决定执行某个分支的代码,但凡有一个满足其他的条件就不会判断了
1.判断关系表达式的结果
2.如果结果成立,执行语句体,继续执行其他语句
3.如果不成立,绕过if,继续执行其他语句
如果接收到了错误数据,提供else语句,提升程序的鲁棒性。
3.2 switch分支
是通过比较值来决定执行哪条分支。
比较case值,与哪里一样就执行哪个语句块,遇到break退出,没有break或者没有case值用default的语句块。
if可以做区间匹配,switch只能做值匹配,值匹配时直接使用switch,格式好看,性能较好,代码优雅
浮点数运算在java中运算不精确,所以不支持,long数字太大,不可能有那么多分支。
可以使用穿透特性简化代码降低冗余的,jdk14以上支持多个case,case 1,2,3
4. 循环结构
控制一段代码重复执行多次,减少代码的重复编写、灵活的控制程序的执行。
4.1 for循环
4.2 while循环
4.3 while和for有什么区别?什么时候用for,什么时候用while?
功能上是完全一样的,for能解决的while也能解决,反之亦然。
使用规范:知道循环几次:使用for
不知道循环几次建议使用:while。
其实while能做的for都能实现,for能做的while也都能实现,功能上无区别。
使用规范:如果一开始不知道循环次数的情况下,建议使用while循环解决更专业。一开始就知道循环几次的情况下,使用for循环来解决更专业。
4.4 do while循环
例如抢票系统,直接打开直接抢,不判断,抢不到再判断是否再抢。
4.5 三者区别
- for循环 和 while循环(先判断后执行);do…while(先执行后判断)
- for循环和while循环的执行流程是一模一样的,功能上无区别,for能做的while也能做,反之亦然。
- 使用规范:如果已知循环次数建议使用for循环,如果不清楚要循环多少次建议使用while循环。
- 其他区别:for循环中,控制循环的变量只在循环中使用。while循环中,控制循环的变量在循环后还可以继续使用。
4.6 死循环
应用场景:服务器程序
4.7 循环嵌套
4.8 跳转关键字
break :跳出并结束当前所在循环的执行。
continue:用于跳出当前循环的当次执行,直接进入循环的下一次执行。
break :只能用于结束所在循环,或者结束所在switch分支的执行。
continue :只能在循环中进行使用。
5. 随机数案例
ctrl+alt+t:可以将选择的语句被包含各种结构语句中