一、基础纲要:
运算符
1.赋值运算符
1.1基本赋值运算符: = java中唯一个自右向左运算的符号
1.2扩展赋值运算符:+= -= *= /= %=
1.3:优缺点
缺点:
不直观
优点:
自动做强制类型转换
提高执行效率
推荐使用扩展赋值运算符
2.比较运算符|关系运算符:> < >= <= ==!=
2.1结果是boolean类型的值
byte short int long float double char
2.2可以做基本数据类型的比较,可以做引用数据类型的比较
浮点数参与运算结果可能不准确
3.逻辑运算符 & | !^
短路 如果左边的操作的值就能决定最终整个表达式的结果,右面的表达式就不在执行
&& 两个操作数都是true才是true,一个为false结果就为false
|| 一个为true就是true,两个都为false才为false
推荐使用短路与短路或
4.条件运算符 | 三目| 三元
条件表达式 ? 值1 : 值2 ;
执行流程:
4.1.先执行条件表达式 -->值为boolean类型的表达式
4.2.如果结果为true, 最终结果取值1
4.3.如果结果为false,最终结果取值2
5.位运算符
&二进制的两个数,同一位置的值,进行逻辑判断,两个值如果有一个为0就位0,两个值都是1才是1
|同一位置的两个数,如果有一个为1就是1,两个都是0才是0
^同一位置的两个数,如果相同为0,不同为1
6.运算符的优先级 :
单目算数位关系,逻辑三目后赋值
两个常用类
1.使用引用数据类型的方式
1.1创建引用数据类型的变量|引用
引用数据类型变量名|引用 = new 引用数据类型(); --公式
1.2使用功能
引用.功能名字();
2.Scanner:
2.1导包 import 相对地址;
提供类Scanner的位置
位置:类的上面导包
2.2创建Scanner类型的引用
2.3使用:功能名字();
nextInt(); 接收用户输入的int类型整数
nextByte(); 接收用户输入的byte类型整数
nextShort(); 接收用户输入的Short类型整数
nextLong(); 接收用户输入的Long类型整数
nextDouble(); 接收用户输入的Double类型整数
nextFloat(); 接收用户输入的Float类型整数
next();接收用户输入的String类型数据
有效字符开始接收,遇到空格停止接收,遇到enter停止功能
nextLine();接收用户输入的一整行的内容
从第一个位置开始接收,遇到enter结束
close();一定要在用完之后关闭,否则当前类中重新开启也不能用
注意:nextLine()功能之前如果存在系列的next功能.需要处理遗留在缓冲区的enter
2.4字符串比较是否相等 字符串1.equals(字符串2)
3.Random 类 产生随机数
3.1导包 java.util.Random
3.2创建类型的引用 Random
3.3使用功能
产生随机整数
nextInt() --> int范围内的随机整数
nextInt(n) -->随机产生 [0,n) 随机整数
n只能决定最大范围
产生随机小数
nextDouble()[0.0,1.0)随机小数
注意:
伪随机数
常用公式:
[min,max]引用.nextInt(max-min+1)+min;
控制语句
1.分类:
顺序结构 : 默认 从上到下 从左到右
选择结构 : 根据某些条件执行不同的代码
循环结构 : 重复执行一些代码
2.选择结构:
if..else
switch
2.1 if ..else
2.1.1单分支|单选择
if(条件表达式){
语句体...
}
条件表达式:值为boolean类型的表达式
执行流程:
计算条件表达式的结果
如果false,就跳过if结构,继续向下执行
如果为true,执行{}中的语句体
2.1.2双分支|双选择
if(条件表达式){
语句体1...
}else{
语句体2
}
如果条件满足执行语句体1,条件不满足执行语句体2
2.1.3多选择|多分支
if(条件表达式1){
语句体1...
}else if(条件表达式2){
语句体2...
}else if(条件表达式3){
语句体3
}else{
语句体n;
}
执行流程:
1.先执行条件表达式1,如果为true,执行语句体1
2.如果为false,计算条件表达式2,如果为true,执行语句体2
3.如果为false,计算条件表达式3,如果为true,执行语句体3
4....
5.如果以上条件都不满足,执行else中的语句体n
注意:语句体前后的{}可以省略,语句体只有一句的时候可以省略
2.2.switch 定值判断
switch(表达式){
case值1:
语句体1;
break;
case值2:
语句体2;
break;
....
default:
语句体n;
break;
}
表达式:byte,short,int,char , 枚举(1.5),字符串(1.7)这几种类型的值
case: case后面接的值是与表达式进行判断,必须是一个值,不能是区间
break:防止case穿透 结束switch语句
case穿透:从满足条件的语句体开始执行,如果遇到break结束switch,如果没有break下面的case不再判断直接执行语句体
default:默认的,相当于else,如果以上都不满足,就执行default中的内容
default位置可以改变
2.3.if与switch之间的区别
if可以做区间判断
switch定值判断
能用switch都可以用if 能用if的不一定能用switch
3.循环:重复执行一些代码
for
while
do...while
for循环
for(条件初始化;条件判断;条件变化 ){
循环体语句;
}
执行流程:
1.先执行条件初始化 声明一个变量并且赋值 i
2.条件判断 对i进行判断 值为boolean类型的表达式
如果值为false,for循环结构结束,如果值为true,执行循环体语句
3.条件变化
重复执行2,3步
注意:在循环体语句中可以使用i的值
变量i可以决定循环执行的次数
二、拓展
位运算:左右移和符号位
位移运算符
>>>无符号右移/2^n
将运算符左边的对象向右移动右侧指定的位数,在高位补上0;
>> (有符号)右移
将运算符左边的对象向右移动右侧指定的位数,值为正,高位补0,值为负,高位补1;
<< 左移*2^n
将运算符左边的对象向左移动右侧指定的位数,在低位补上0
float和double类型数据在内存中的存储方式
1.浮点数:
计算机中有两种表示实数的方法:定点表示和浮点表示
定点数:小数位数固定于某个位置,这种方式的整数和小数部分的表示形式和普通整数的表示形式没有什么区别
浮点数:小数点位置可以浮动的数据,以科学技术法的形式表示
2.表示形式:
N=M*R^E;
N为浮点数,M为尾数(mantissa),E为阶码(exponent),R为阶的基数,也就是底数,计算机里的底数不会是10的,一般是2、8、16。在一台计算机里,所有数据中的R是确定,并且相同的。
3.在计算机内的形式:MS E M
MS为符号位
如单精度浮点数(32位),符号位占1位,阶码8位,尾数23位
4.举例:单精度浮点数3.75
(1) 首先转化为2进制表示 −3.75=−(2+1+1/2+1/4)=−1.111×21−3.75=−(2+1+1/2+1/4)=−1.111×21
(2) 整理符号位并进行规格化表示 −1.111×21=(−1)(1)×(1+0.1110 0000 0000 0000 0000 000)×21−1.111×21=(−1)(1)×(1+0.1110 0000 0000 0000 0000 000)×21
(3) 进行阶码的移码处理 (−1)(1)×(1+0.1110 0000 0000 0000 0000 000)×21(−1)(1)×(1+0.1110 0000 0000 0000 0000 000)×21 =(−1)(1)×(1+0.1110 0000 0000 0000 0000 000)×2128−127=(−1)(1)×(1+0.1110 0000 0000 0000 0000 000)×2128−127
于是,符号位S=1,尾数M为1110 0000 0000 0000 0000 0001110 0000 0000 0000 0000 000
阶码E为12810=1000 0000212810=1000 00002,
则最终的32位单精度浮点数为 1 1110 0000 0000 0000 0000 000 1000 0000
--------------------- 作者:shuzfan 来源:CSDN 原文:https://blog.csdn.net/shuzfan/article/details/53814424
5.有效位数
2^-23=0.00000011920928955078125
2^-22=0.0000002384185791015625
因此0.0000001和0.0000002之间的小数是没办法精确描述的,因此一般说float精确到小数点后第七位