一 数值型的表现形式
1.整数
(1)二进制
由0,1组成 以0b/0B开头就是二进制 0b1001
(2)八进制
由0~7组成 以0开头是八进制 01001
(3)十进制
默认进制
(4)十六进制
由0~9和a~f组成(大小写都可以) 以0x/0X开头就是表示十六进制
从其他进制如何转为十进制: 从后往前算,每一个位置的数值* 进制数^0(从0开始,往后的每一个位置+1),最终得到的和就是十进制数值
从十进制转为其他进制:用这个数一直除以要转为的进制数,取余数,从下往上看
2.浮点数
0.13432 ->0可以省略 .123
科学计数法: e->10 1.23e3 -->1.23*10^3 1.23e-2 -->1.23/10^2
二 运算符
操作数:运算符左右两边的数就是操作数 a+b
表达式:运算符连接左右的操作数整体叫做表达式
语句:遇到;就是语句的结束;
一元运算符:操作数只有一个的运算符叫做一元运算符 ++ -- !
二元运算符:操作数只有二个的运算符 + - * /
三元运算符:条件运算符:三目运算符
1.算数运算符
(1) +
1)正号 可以省略
2)加法运算
3)字符串连接符
+左右两边是否存在字符串,如果字符串就作为字符串的连接符使用,会拼成一整个字符串
(2) -
1)负号 不可省略
2)减法运算
(3) *
(4) %
(5) /
取余数|取模|模以 如果第一个操作数<第二个操作数的时候,最后的结果为第一个操作数
(6) ++,--
操作自己:++ -- 只影响你本身的结果,不影响其他人(不参与其他运算)
++ 放在操作数的前面后者后面都是自身+1
-- 放在操作数的前面后者后面都是自身-1
操作别人
++,-- 如果放在操作数的后面,是先参与运算,再自身+1,-1 b--;
++,-- 如果放在操作数的前面,先自身+1,-1,再参与运算 --b;
2.赋值运算符
(1)基本赋值运算符
=
双目运算符,自右向左运算的符号,优先级最低
(2) 扩展赋值运算符(基本赋值运算符+算数运算符)
+= -= *= /= %= a+=1;==>a=a+1
优点:提高执行效率,自动做强制类型转换
缺点: 不直观
*推荐使用扩展赋值运算符,会成倍提高效率
3.关系运算符|比较运算符
(1) > < >= <=
只能用来比较 byte short int long folat double char
(2) == !=
既可以用来比较基本数据类型,也可以用来比较引用数据类型
关系运算符最终得到的结果为boolean类型 true/false
4.逻辑运算符
逻辑运算符左右两边的操作数必须是值为boolean的表达式
(1) & 与
如果左右两边有一个false,结果就为false
(2) | 或
两边只要有一个为true,结果就是true,两个都为false才是false
(3) ! 非
取反 !true !false
(4) ^ 异或
两个操作数相同为false不同为true
(5) && 短路与
如果左右两边有一个false,结果就为false,当左边为false时右边不需要判断结果为false,可以提高效率
(6) || 短路或
只要有一个为true就是true,两个都为false才是false,当左边为true时右边不需要判断结果为true,可以提高效率.
推荐使用短路与,短路或
5.条件运算符
比较表达式?值1:值2;
1.比较表达式 值为boolean类型的表达式
2.如果结果为true,取值1
3.如果结果为false,去取值2
6.位运算符
先把数据转为二进制参与运算,然后得到结果再转为十进制
(1) &
同一位置的两个数如果有一个为0就是0.两个都为1才是1
(2) |
同一位置的两个数如果有一个为1就是1.两个都为0才是0
(3) ^
同一位置的两个数如果相等为0.不等是1
以上三个符号既可以为逻辑运算符(操作数为boolean值)也可以为位运算符(操作数为整数)
(4) >>右移
左边操作数转为二进制,向右移动右边操作数个位数,超出分水岭的位置数舍弃,保留的转为十进制
正数补0负数补1
(5)<<左移
左边操作数转为二进制,向左移动右边操作数个位数,空余补0,在转为十进制
规律:
右移 左边的数/2的右边的数次方 8>>3 8/2^3 9>>2
左移 左边的数*2的右边的数次方 8<<3 8*2^3
十进制的负数转二进制: 对这个数的整数取二进制,然后去反+1
负数的二进制如何转十进制: 去反+1,得到的十进制数字前面填负号
三 Scanner类
1.基本数据类型使用:
int a=5;
2.引用数据类型使用:
(1)创建一个类型的引用
数据类型 变量名 = new 数据类型(); ---该类型的引用|变量
Scanner sc = new Scanner(); ---Scanner类型的变量
(2)使用功能
引用.功能名字();
3.Scanner : 接受键盘输入
(1)导包
指明Scanner的位置 java--util--Scanner
import java.util.Scanner;
位置:类的上面声明
(2)创建Scanner类型的变量
Scanner scr=new Scanner(System.in);
(3)引用.功能名字();
引用.nextInt() 接收用户输入的整数
引用.nextByte() 接收用户输入的整数
引用.nextShort() 接收用户输入的整数
引用.nextLong() 接收用户输入的整数
引用.nextFloat() 接收用户输入的小数
引用.nextDouble() 接收用户输入的小数
引用.next() 接收用户输入的字符串
有效字符开始接受,遇到空格,tab,enter就不接收了,但是遇到enter停止功能
引用.nextLine() 接受用户输入的一整行数据
从用户输入的内容开始,知道接受enter结束
(4)引用.close();
凡属于IO流的内容最好用完关闭释放资源
要在真正使用完毕以后再关闭资源,一旦关闭无法重新使用,就算是重新创建引用不行
四 Random类
1.Random : 产生随机数
(1)导包
java.util.Random
(2)创建类型的变量
Random ran=new Raindom();
(3)变量
变量.功能名字();
nextInt(); 产生int范围内的随机数
nextInt(整数n) [0,n)随机整数
2.公式:
[0,max] 之间的随机整数 变量.nextInt(max+1);
[min,max) 变量.nextInt(max-min)+min;
[min,max] 变量.nextInt(max-min+1)+min;
nextDouble() 产生[0.0,1.0)随机小数
五 流程控制语句
顺序结构:从上到下,从左到右
1.if..else
(1)单选择|单分支
if(条件表达式){
语句体;
}
1.条件表达式:值为boolean类型的表达式
2.如果为false,直接跳过选择结构,不执行语句体
3.如果为true,执行{}中的语句体
(2)双选择|双分支
if(条件表达式){
语句体1;
}else{
语句体2;
}
1.条件表达式:值为boolean类型的表达式
2.如果为true,直执行语句体1
3.如果为false,执行语句体2
(3)多选择|多分支
if(条件表达式1){
语句体1;
}else if(条件表达式2){
语句体2;
}else if(条件表达式3){
语句体3;
}.....
else{
语句体n;
}
1.执行条件表达式1,如果为true,执行语句体1,如果为false
2.执行条件表达式2,如果为true,执行语句体2,如果为false
3....
4.如果以上条件表达式都不满足,执行语句体n
if结构与条件运算符的区别:
1.条件运算符必须有结果,if可以没有结果
2.条件运算符是运算符,结构更简单,效率更高
3.如果对一个条件进行多次判断时候,推荐使用if
2.switch语句 :定值判断
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
.....
default:
语句体n;
break;
}
(1)执行流程:
1,计算表达式
2.与case后的值比较,如果和值1相等,就执行语句体1,遇到break结束,如果不相等继续向下比较
3.与值2比较,就执行语句体2,遇到break结束,如果不相等继续向下比较
.....
4.如果以上条件都不满足,就执行default中的内容 (default可以省略)
(2)表达式:一般是一个变量
表达式的结果的数据类型,只能为byte,short,int,char,枚举(1.5后新增),字符串(1.7新增)
break:如果不写break,会发生case穿透,从当前满足条件的语句体开始,一直向下执行所有的语句体,不再判断是否满足条件,直到遇到下一个break;或者语句体的结束位置
default:位置可以改变,可以在任意位置,一般放在最后
switch和if之间如何选择:
switch:定值判断
if:区间判断
3.equals
如果比较字符串内容是否相等就是用equals,如果在自定义类里面,需要重写equals方法. 一些不需要自己重写equals方法的是继承了Object类,已经重写了里面的方法.
字符串1.equals(字符串2) ==>如果两个字符串相等返回true,如果不相等返回false.
一般字符串放在左边,表达式放在右边,是为了避免因表达式的对象不存在,调用不了equals方法而造成的异常