笔记来源:韩老师的Java教学视频
推荐给每一个人,老师讲解的十分完善。
目录
一。运算符
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等
(一)。算数运算符
- 是对数值类型的变量进行运算的,在Java中使用的非常多
- / 除法运算
public static void main(String[] args){
System.out.println(10 / 4);
//因为运算符两边都为int,所以结果为2
System.out.println(10.0 / 4);
//因为运算符有一边为double,所以结果为2.5
double b1 = 10 / 4;//先运算结果为2,自动转换为double类型
System.out.println(b1);//结果为2.0
}
- % 取模|取余运算
Java 中的 % 运算符并不是取模运算(Modulo Operation),而是取余运算(Complementation)。
(1). 计算方法
对于整数a,b来说,取模运算和取余运算的过程相同:
- 求整数商:c = a / b
- 计算模或者余数:r = a − c × b
取模和取余在第一步求商的方法上不同:取余运算在取c的值时,向0方向舍入( 类似ceil()函数 );而取模运算在计算c的值时,向下舍入( 类似floor()函数 )。
(2).Java 示例
Java中的取余运算是%,而取模运算是Math.floorMod()。
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
System.out.println(Math.floorMod(10, 3));//1
System.out.println(Math.floorMod(-10, 3));//2
System.out.println(Math.floorMod(10, -3));//-2
System.out.println(Math.floorMod(-10, -3));//-1
}
//%的本质,看作为一个公式:a % b = a - a / b * b;
//例10 % 3 = 10 - 10 / 3 * 3;
从运行结果可以看出:取余运算结果的符号和a一致,取模运算结果的符号和b一致。
- ++ 自增运算
public static void main(String[] args){
//作为独立语句使用,前++与后++都等价于i = i + 1;
int i = 10;
i++;//11
++i;//11
/*作为表达式使用
后++,先赋值后自增
前++,先自增后赋值*/
int j = 20;
int k = j++;//先k = j,再j++
System.out.println(k + " " +j);//20 21
k = ++j;//先j++,再k = j
System.out.println(k + " " +j);//22 22
}
(二)。关系运算符(比较运算符)
- 介绍
结果都是Boolean型,常用于if结构的条件中或循环结构的条件中
(三)。逻辑运算符
- 用于连接多个条件(多个关系表达式),最终的结果也是一个Boolean值
- 短路与&&、逻辑与&
public static void main(String[] args){
int a = 1;
int b = 2;
//短路与&&:两个条件都为true,结果为true,否则为false
//第一个条件为false,后面条件不再判断。
if (a > 10 && ++b < 10) {
System.out.println("ok");//a > 10为false,不输出
}
System.out.println("a=" + a + ",b=" + b);//结果为 a=1,b=2
//逻辑与&:两个条件都为true,结果为true,否则为false
//不管第一个值是否为false,两个条件都会判断
if (a > 10 & ++b < 10) {//执行b++
System.out.println("ok");//a > 10为false,不输出
}
System.out.println("a=" + a + ",b=" + b);//结果为 a=1,b=3
}
使用多的为短路与&&,效率高
- 短路或||:
条件中只要有一个为true,结果为true,否则为false。
第一个条件为true,后面条件不再判断。
逻辑或|:
条件中只要有一个为true,结果为true,否则为false。
不管第一个值是否为false,两个条件都会判断 - 取反!
如果条件本身为true,结果为false,反之为true - 逻辑异或^
当^两边条件结果不一致时,结果为true,否则为false
(四)。赋值运算符
- 就是将某个运算后的值,赋给指定的变量
- 分类
- 基本赋值运算符 =
int n1 = 12;
- 复合赋值运算符
+=、-=、*=、/=、%=等
a += b; => a = a + b;
a -= b; => a = a - b;
- 基本赋值运算符 =
- 特点
- 运算顺序从右往左
- 赋值运算符的左边,只能是变量,右边可以是变量、表达式、常量
- 复合赋值运算符会进行类型转换
代码理解:
public static void main(String[] args){
byte b1 = 1;
b += 5;//等价与b = (byte)(b + 5);
//底层b = b + 5;
b++;//等价与b = (byte)(b + 1);
}
根据自动提升原则,b + 5或b + 1结果类型应都为int类型,赋值byte类型会报错。
但是符合赋值运算符和自增自减都会有一个类型转换,可以赋值到他本来的类型
(五)。三元运算符
- 语法:
条件运算符 ? 表达式1 : 表达式2; - 规则
如果条件表达式结果为true,运算后结果为表达式1
如果条件表达式结果为false,运算后结果为表达式2 - 细节
表达式1和表达式2要为可以赋给接收变量的类型(或可以自动转换)
代码理解:
public static void main(String[] args){
int a = 1;
int b = 2;
int c = a < b ? 1.1 : 1.2;//错误,double类型不能自动转int类型
int c = a < b ? (int)1.1 : (int)1.2;//可以,都为int类型
double c = a < b ? a : b;//可以,满足自动转换
}
三元运算符可以转换为if…else语句
(六)。运算符优先级
- 运算符有不同的优先级,所谓的优先级就是表达式中的运算顺序,如上图的优先级就是从上至下
- 只有单目运算符、赋值运算符时从右向左运算的
- 简单梳理
(),{}等
单目运行:++、–
算数运算符
位移运算符
比较运算符
逻辑运算符
三元运算符
赋值运算符
二。标识符
(一)。概念
- Java对各种变量】方法和类等命名使用时使用的字符序列称为标识符
- 凡是自己可以起名字的地方都叫标识符
(二)。规则
- 由26个因为字母大小写,0-9,_或$组成
- 数字不可以开头
- 不可以使用关键字和保留字,但能包含关键字和保留字
- Java中严格区分大小写,长度无限制
- 标识符不能包含空格
(三)。规范
- 包名: 多单词组成时所有字母都小写
例:aaa.bbb.ccc - 类名、接口名:多单词组成时,所有单词的首字母大写
例:XxxYxxZzz【大驼峰】 - 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始首字母大写
例:xxxYyyZzz【小驼峰,简称驼峰法】 - 常量名:所有字母都大写,多个单词时每个单词用下划线连接
例:XXX_YYY_ZZZ
(四)。关键字
- 被Java语言赋予了特殊含义,用作专门途径的字符串(单词)
- 特点:关键词中所有字母都为小写,在软件中会变色
(五)。保留字
现有的Java版本尚未使用,但以后的版本可能会作为关键字使用,定义标识符要避免使用这些保留字
三。键盘输入语句
在编程中,需要接收用户输入的数据,就可以用键盘输入语句来获取
//1.引入Scanner类所在的包
import java.util.Scanner;
public class Comment02 {
public static void main(String[] args){
//2.创建Scanner对象
// myScanner就是这个对象
Scanner myScanner = new Scanner(System.in);
System.out.print("请输入名字:");
//3.使用next()接受用户输入,程序执行到next()时会等待用户输入,
// 输入完毕按回车表示
String name = myScanner.next();
System.out.print("名字=" + name);
}
}
Scanner类表示简单文本扫描器,在java.util包
四。进制
对于整数,有四种表达方式:
- 二进制: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)次方,然后求和
例:
- 八进制
规则:从最低位(右边)开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和 - 十六进制
规则:从最低位(右边)开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和
(二)。十进制转其他进制
- 二进制
规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。
例:34转为二进制=0B00100010
- 八进制
规则:将该数不断除以8,直到商为0为止,然后将每步得到的余数倒过来,就是对应的八进制。 - 十六进制
规则:将该数不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制。
(三)。二进制转其他进制
- 八进制
规则:从低位开始,将二进制数每三位一组,转成对应的八进制数即可
- 十六进制
规则:从低位开始,将二进制数每四位一组,转成对应的十六进制数即可
(四)。其他进制转二进制
- 八进制
规则:将八进制每一位,转成对应的一个3位的二进制数即可 - 十六进制
规则:将十六进制每一位,转成对应的一个4位的二进制数即可
五。位运算符
(一)。原码,反码,补码(重点)
- 二进制是逢2进位的进位制,0,1是基本算符,数字1在不同的位上代表不同的值,按从右至左的次序,这个值以二倍递增
- 现代的电子计算机技术全部采用的是二进制,因为它只使用0,1两个符号,易于用电子方式实现。
- 对于整型数据,其二进制表示形式有三种,分别是:原码、反码、补码,而实际存储的是整型数据的补码。
(二)。对于有符号的而言
- 原码、反码以及补码都是有符号的,其中最高位存放符号位,0 表示正数,1 则表示负数。
- 正数的原码,补码,反码都一样(三码合一)
- 负数的反码 = 它的原码符号位不变,其他位取反
- 负数的补码 = 它的反码 + 1,负数的反码 = 负数的补码 - 1
- 0的反码,补码都为0
- java中没有无符号数,换言之,java中的数都是有符号的
- 在计算机运算的时候,都是以补码的方式来运算的
- 当我们看运算结果的时候,要看他的原码
(三)。位运算符
- 按位与&:两位全为1,结果为1,否则为0
- 按位或|:两位有一个为1,结果为1,否则为0
- 按位异或^:两位有一个为1,一个为0,结果为1,否则为0
- 按位取反~:0 => 1,1 => 0
- 算数右移>>:低位溢出,符号位不变,并用符号位补溢出的高位
a >> b :本质 = a / 2-b - 算数左移<<:符号位不变,低位补0
a << b :本质 = a * 2b - 逻辑右移(无符号右移)>>>:低位溢出, 高位补0
- 没有<<<符号