Java30天拿下-----第二天
- 一 运算符
- 算术运算符
- 赋值运算符
- 关系运算符
- 逻辑运算符
- 三元运算符
- 运算符的优先级
- 二 标识符
- 关键字
- 保留字
- 三 控制台接收键盘输入:Scanner
- 四 进制
- 进制的转换(==基本功==)
- 其他进制转为十进制
- 十进制转为其他进制
- 二进制转为其他进制
- 其他进制转为二进制
- 原码,反码, 补码
一 运算符
运算符是一种特殊符号,用以表示数据的计算、赋值和比较等
- 算术运算符
- 赋值运算符
- 关系运算符(比较运算符)
- 逻辑运算符
- 位运算符(需要二进制基础)
- 三元运算符
算术运算符
除法举例:(易混)
public class study {
public static void main(String[] args){
System.out.println(5/2); //2
System.out.println(5.0/2);//2.5
double a = 5/2;
System.out.println(a);//2.0
}
}
解释:
5/2:都为整型,运行结果也为整型
5.0/2:前者为浮点型,运行结果也为浮点型
double a = 5/2:先计算5/2得2,再变为double类型,加上小数点
+= *= -+这些具有强制类型转换的功能
取模的使用:(易混)
公式:a % b = a - b / b * b
public class study {
public static void main(String[] args){
System.out.println(10%3);//1
System.out.println(-10%3);//-1
System.out.println(10%-3);//1
System.out.println(-10%-3);//-1
}
}
自增自减(易混)
public class study {
public static void main(String[] args){
int i = 8;
int k = i++;
System.out.println("k=" + k + "i=" + i);
}
}
k=8
i=9
简单记忆法:++在后,先用再+;++在前,先+后用
面试题
第一题:
i=i++
public class study {
public static void main(String[] args){
int i = 1;
i=i++;
System.out.println(i);
}
}
答案为1
解释:
- 创建一个中间值(假设为temp)先存储 i 的值
- 执行 i = i + 1
- 再执行 i = temp
- i = 1
第二题:
i=++i
public class study {
public static void main(String[] args){
int i = 1;
i=++i;
System.out.println(i);
}
}
答案为2
解释:
- 执行 i = i + 1
- 创建一个中间值(假设为temp)先存储 i 的值
- 再执行 i = temp
- i = 2
赋值运算符
就是将某个运算的值赋给指定的变量
基本赋值运算符:
=
符合赋值运算符
+=
-=
*=
/=
%=
以+=为例,其他亦是如此
a += b; -----> a = a + b;
关系运算符
关系运算符的结果都是boolean型,也就是true或者false
关系表达式经常用在if结构的条件中或循环结构的条件中
注意:== 和 =
逻辑运算符
用于连接多个条件(多个表达式),最终的结果也是一个boolean值
说明逻辑运算规则:
- 1.a&b:&叫逻辑与:规则:当a和b同时为true,则结果为true,否则为false
- 2.a&&b:&&叫短路与:规则:当a和b同时为true,则结果为true否则为false
- 3.ab:叫逻辑或,规则:当a和b,有一个为true,则结果为true,否则为false
- 4.ab:叫短路或,规则:当a和b,有一个为true,则结果为true,否则为false
- 5.!a:叫取反,或者非运算。当a为true,则结果为false当a为false是,结果为true
- 6.a^b:叫逻辑异或,当a和b不同时,则结果为true,否则为false
注意:&& 和 & 的区别
&& 短路与:如果第一个条件为false,则第二个条件不会判断,最终结果为false,效率高
& 逻辑与:不管第一个条件是否为false,第二个条件都要判断,效率低
开发中,我们基本上使用&&短路与,效率高
注意:|| 和 | 的区别
|| 短路或:如果第一个条件为true,则第二个条件不会判断,最终结果为true,效率高
| 逻辑或:不管第一个条件是否为true,第二个条件都要判断,效率低
三元运算符
基本语法:
条件表达式?表达式1:表达式2;
若条件表达式为true,则运算后结果为表达式1
反之则运算后结果为表达式2
举例:
public class study {
public static void main(String[] args){
int a = 10;
int b = 99;
int result = a > b ? a++ : b--;
System.out.println(result);
}
}
运行结果为:
99
解释:
a=10,b=99,
a>b为假,则结果为b–
小细节:
- 表达式1和表达式2要为可以赋值给接收变量的类型(或可以自动转换)
int a = 10;
int b = 99;
int c = a > b ? 1.1 : 2.2;// 报错
System.out.println(c);
修改为:
int a = 10;
int b = 99;
int c = a > b ? int(1.1) : int(2.2);
System.out.println(c);
这里主要也是数据类型那方面的知识
- 三元运算符可以转为if-else语句
int res = a > b ? a++ : --b;
上下代码含义相同
if(a > b)
{
res = a++;
}
else:
{
res = --b;
}
练习:求三个数的最大值
public class study {
public static void main(String[] args){
int a = 10;
int b = 99;
int c = 100;
int max = (a > b ? a : b) >c ? (a > b ? a : b) : c;
System.out.println(max);
}
}
运算符的优先级
优先级顺序为:
- (),{}等
- 单目运算符:++
- 算术运算符
- 位移运算符
- 比较运算符
- 逻辑运算符
- 三元运算符
- 赋值运算符
二 标识符
概念:
- Java对各种变量,方法和类等的命名时使用的字符序列称为标识符
- 凡是自己起名字的地方都是标识符(int num = 90)
规则:(必须遵守)
- 由26个英文字母大小写,0~9,_或$组成
- 数字不可以开头(int 3b = 1;)
- 不可以使用关键字和保留字,但能包含关键字和保留字
- Java中严格区分大小写,长度无限制
- 标识符不能包含空格
规范:(更加专业)
- 包名:多单词组成时所有字母都小写:aaa.bbb.ccc//比如:com.hsp.crm
- 类名,接口名:多单词组成时,所有单词首字母大写,比如:TankShort【大驼峰】
- 变量名,方法名:多个单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写,比如:tankShort【小驼峰,简称驼峰法】
- 常量名:所有字母都大写。多个单词用下划线_:TAX_RATE
关键字
保留字
Java保留字:现有Java版本尚未使用,但以后版本可能会作为关键字使用,自己命名标识符时要避免使用这些保留字
- byValue
- cast
- future
- generic
- inner
- operator
- outer
- rest
- var
- goto
- const
三 控制台接收键盘输入:Scanner
在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。
input.java,需要一个扫描器(对象),就是Scanner
步骤:
- 导入该类的所在包,java.util.*
- 创建该类的对象(声明变量)
- 调用里面的功能
举例:
import java.util.Scanner;//表示把java.util下的Scanner类导入
public class study {
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入姓名:");
String name = myScanner.next();
System.out.println("请输入年龄");
int age = myScanner.nextInt();
System.out.println("请输入薪水");
double sal = myScanner.nextDouble();
System.out.println("该人的信息如下:");
System.out.println("名字:" + name + "\n" + "年龄:"
+ age + "\n" + "薪水:" + sal);
}
}
请输入姓名:
汴京城下君
请输入年龄
20
请输入薪水
9600
该人的信息如下:
名字:汴京城下君
年龄:20
薪水:9600.0
四 进制
进制的介绍:
- 二进制: 0,1。满2进1,以0b或者0B开头
- 十进制:0~9。满10进1。
- 八进制: 0~7。满8进1,以数字0开头表示
- 十六进制: 0~9以及A(10)到F(15)。满16进1,以0x或者0X开头表示,此处的A到F不区分大小写
进制的转换(基本功)
其他进制转为十进制
二进制转为十进制
规则:
从最低位(右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和
案例:
将0b1011转为十进制
八进制转为十进制
规则:
从最低位(右边)开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和
十六进制转为十进制
规则:
从最低位(右边)开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和
十进制转为其他进制
十进制转为二进制
规则:
将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制
案例:
将34转为对应二进制---->0b00100010
(一个字节占八位,只得到六位,还要用两个0填充高位)
十进制转为八进制
规则:
将该数不断除以8,直到商为0为止,然后将每步得到的余数倒过来,就是对应的八进制
十进制转为十六进制
规则:
将该数不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制
二进制转为其他进制
二进制转为八进制
规则:
从低位开始,将二进制数每三位一组,转成对应的八进制即可
案例:
将0b11010101转为八进制
二进制转为十六进制
规则:
从低位开始,将二进制数每四位一组,转成对应的十六进制即可
其他进制转为二进制
八进制转为二进制
规则:
将八进制数每一位,转成对应的一个3位的二进制数即可
案例:
将0237转成二进制
十六进制转为二进制
规则:
将十六进制数每一位,转成对应的一个4位的二进制数即可
原码,反码, 补码
- 二进制的最高位是符号位:0表示正数,1表示负数
- 正数的原码,反码,补码都一样(三码合一)
- 负数的反码 = 它的原码符号位不变,其他位取反(0->1,1->0)
- 负数的补码 = 它的反码+1。负数的反码 = 负数的补码-1
- 0的反码,补码都是0
- java没有无符号数,换言之,java中的数都是有符号的
- 在计算机运算的时候,都是以补码的方式来运算的
- 当我们看运算结果的时候,要看它的原码
位运算
System.out.println(4 << 3); // 4*2*2*2 = 32
System.out.println(15 >> 2);// 15/2/2 = 3