一、关键字
1. 定义
被java语言赋予了特殊含义,用作专门用途的字符串
2. 特点
关键字所有的字母都为小写
3. 保留字
现有的java版本未使用,以后可能会使用
二、标识符
1. 定义
Java对各种变量、方法和类等要素命名时使用的字符序列称为标识符
2. 规则(必须遵守)
- 由26个英文字母大小写,0-9,或$组成
- 数字不可以开头
- 不可以使用关键字和保留字,但能够包含关键字和保留字
- Java中严格区别大小写,长度无限制(65535)
- 标识符不能包含空格
3. 规范(可以不遵守)
- 包名:多单词组成时,所有字母都小写 -> xxxyyyzzz
- 类名、接口名:多单词组成是,所有单词的首字母大写 -> XxxYyyZzz
- 变量名、方法名:多单词组成时,第一个单词的首字母小写,第二个单词开始每个单词首字母大写 -> xxxYyyZzz
- 常量名:所有字母都大写,多单词时每个单词用下划线连接 -> XXX_YYY_ZZZ
三、变量
1. 概念
- 内存中的一个存储区域,且此空间中可以保存数据
- 该区域有自己的名称
- Java每个变量必须先声明,后使用
- 该区域的数据在同一类星星范围内不断变化
2. 注意
1. 先声明再使用
2. 必须初始化赋值之后再读取
3. 必须存储定义时的数据类型的值
4. 变量必须要有数据类型和变量值
5. 变量有其作用范围,由它的声名语句所隶属的一对{}内使用
6. 变量空间中值只能在其数据类型范围内变化
3. 使用
声名:数据类型 变量名
-->String name;
四、数据类型
1. 基本数据类型
1.1 概念
- 决定空间大小和决定里面的数据可以做什么,保存的是数据的本身
- 整数字面量默认使用4字节的int型来保存
- 小数字面量默认使用8字节的double型来保存
- 范围大的量值给范围小的变量赋值时,需要进行强制类型转换
- 范围小的量值给范围大的变量赋值时,可以自动完成
- 兼容性最好的时double,最差的是byte
- 从范围大小来划分:byte < short < int < long < float < double
- 任意非long整数作运算,结果总是int型
- 如果有不同类型混合运算,结果总是范围最大的那个类型
- 字符型(char)的本质就是正整数,它可以直接使用整数赋值
- long类型赋值加后缀L -> long varLong = 5.6L;
- float类型赋值后缀加F -> float varFloat = 6.5F;
1.2 分类
1.2.1 布尔型:
boolean -> 1字节
1.2.2 字符型:
char -> 2字节
1.2.3 数值型
1.2.3.1 整型
- byte:1字节 -128 ~ 127
- short:2字节 -32768 ~ 32767
- int:4字节 -2^31 ~ 2 ^31-1
- long:8字节 -2^63 ~ 2 ^63-1
1.2.3.2 浮点型
- float:4字节 -10^38 ~ 10 ^38
- double 8字节 -10^308 ~ 10 ^308
2. 引用数据类型
概念:内存中去保存的是别的数据的地址,例如String
3. 区别
基本数据类型:基本数据类型的内存空间中存储的是数据的本身。
引用数据类型:引用数据类型的内存空间中存储的是别的数据的地址
五、强制类型转换
1. 概念
将容量大的数据类型转换为容量小的数据类型,可能造成精度降低或溢出
六、进制
1. 分类
- 二进制:0,1 -> 满2进1, 以0B或0b开头
- 十进制:0-9 -> 满10进1
- 八进制:0-7 -> 满8进1,以数字0开头表示
- 十六进制:0-9及A-F ->s满16进1,以0x或0X开头,且A-F可以用小写
2. 概念
- 计算机底层所有数据都是采用的二进制的补码形式保存
- 正数的补码就是本身
- 负数的补码就是它的相反数全部取反然后再加1得到
- 一个数是整数还是负数由符号位来决定,符号位总是哪个一个数的最高位
- 如果符号位为0表示这个数是一个正数
- 如果符号位为1表示这个数是一个负数
七、运算符
1. 位运算符
" << "(左移):空位补0,被移除的高位丢弃,空缺位补0(左移一位相当于乘以2)。
" >> "(右移):>>(右移):被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,空缺位补1(右移一位相当于除2)。
" >>> "(无符号右移):被移位二进制最高位无论是0或者1,空缺位都用0补。
" & “(与运算):二进制位进行” & "运算,只有1 & 1时结果为1,否则为0(结果总是小于等于运算符)。
" | “(或运算):二进制位进行” | "运算,只有0 | 0时结果时0,否则时1(结果总是大于等于运算数)。
" ^ "(异或运算):相同二进制位进行 ^ 运算,结果是0;1 ^ 1 = 0,0 ^ 0 = 0;不相同二进制位 ^ 运算结果是1。1^0=1 , 0^1=1(结果不稳定,通常用于加密)。
" ~ "(取反):所有二进制取反,0变1,1变0(整数变负数,负数变正数,结果都是一个数的相反数减1)。
2. 算数运算符
- " + "(正号):-> +3 -> 3
- " - "(负号):-> b=4;-b -> -4
- " + "(加): -> 5+5 -> 10
- " - "(减):-> 6-4 -> 2
- " * "(乘):-> 3*4 -> 12
- " / "(除):-> 5/3 -> 1
- " % "(取模):-> 7%5 -> 2
- " ++ "(自增(前):先运算后取值):-> a=2;b=++a; -> a=3;b=3
- " ++ "(自增(后):先取值后运算):-> a=2;b=a++; -> a=3;b=2
- " – "(自减(前):先运算后取值):-> a=2;b=–a; -> a=1;b=1
- " – "(自减(后):先取值后运算):-> a=2;b=a–; -> a=1;b=2
- " + "(字符串相加): -> “He” + “llo” -> “Hello”
注意
- 如果是两个整数相除,结果总是整数,并且不会四舍> 五入,而是直接把小数丢弃 n % m
- 如果n % m 结果为 0,说明能被m整除
- 如果n % 2 结果为 0,说明是偶数,结果不为0,说明n是奇数
- n = i++; 先开辟一个临时空间,将i的值存到临时空间,然后i自己存储的空间里面的值+1,然后再将临时空间的值赋值给n
- 后++ 是先用后加, 必须要有一个临时空间 效率低.
- 前++ 是先加后用, 不需要临时空间, 效率高
3. 赋值运算符
- 符号 : " = "
- 当“=”两侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。
- java支持连续赋值, 例如 : a = b = c = 100; 结果是a,b,c三个变量中的值都是100
- 扩展赋值运算符: +=, -=, *=, /=, %=
- 例如 : int n = 10; n += 30; 效果相当于 n = n + 30, 但是不会引起数据类型的变化
4. 比较运算符
- " == "(相等于):-> 4==3 -> false
- " != "(不等于): -> 4!=3 -> true
- " < "(小于):-> 4<3 -> false
- " > "(大于):-> 4>3 -> true
- " <= "(小于等于):-> 4<=3 -> false
- " >= "(大于等于):-> 4>=3 -> true
- " instanceof "(检查是否是类的对象):-> “Hello” instanceof String -> true
- 比较运算符的结果都是boolean型,也就是要么是true,要么是false。
- 比较是否相等或不等, 可以适用所有数据类型(==、!=)
- 比较大小的操作只适用于基本型中的数值型(>、>=、<、<=)
5. 逻辑运算符
a | b | a&b | a|b | !a | a^b | a&&b | a||b |
---|---|---|---|---|---|---|---|
true | true | true | true | false | false | true | true |
true | false | false | true | false | true | false | true |
false | true | false | true | true | true | false | true |
false | false | false | false | true | false | false | false |
- &—逻辑与
- | —逻辑或
- !—逻辑非
- && —短路与
- || —短路或
- ^ —逻辑异或
- 逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 。
- “&”和“&&”的区别:
单&时,左边无论真假,右边都进行运算;
双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。- “|”和“||”的区别同理,||表示:当左边为真,右边不参与运算。
- 异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。
- 理解:异或,追求的是“异”!
6. 三元运算符
- (条件表达式)?表达式1:表达式2;
表达式位true,运算后的结果是表达式1;
表达式为false,运算后的结果是表达式2;- 表达式1和表达式2为同种类型
- 三元运算符与if-else的联系和区别:
1) 三元运算符可简化if-else语句
2)三元运算符要求必须返回一个结果
3)if后的代码块可有多个语句
7. 运算符的优先级
- 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如右表,上一行运算符总优先于下一行。
- 只有单目运算符、三元运算符、赋值运算符是从右向左运算的。
八、程序流程控制
1. 顺序结构
概念:程序从上到下逐行地执行,中间没有任何判断和跳转(Java中定义成员变量时采用合法的前向引用)
2. 分支结构
- 概念:根据条件,选择性地执行某段代码
- 分类:有if…else和switch两种分支语句
- switch后面跟自变量(数据类型必须是非long整数,字符串,枚举)
- case后面跟常量
- default子句是可任选的,当没有匹配的case时i,执行default
- 如果判断的具体数值不多,而且符合byte、short、int、char这四种类型。虽然两个语句都可以使用,建议使用switch。因为效率高
- 其他情况:对区别判断,对结果为boolean类型判断,使用if,if的使用过范围更广
3. 循环结构
- 循环语句功能:在某些条件满足的情况下,反复执行特定代码的功能
- 循环语句的四个组成部分:初始化部分,循环条件部分,循环体部分,迭代部分
- 循环次数,右边的值减初始值,如果有=则加1
3.1 do/while循环
[初始化语句]
do{
语句或语句块;
[更改语句;]
}while(布尔值测试表达式);
3.2 while循环
[初始化语句]
while( 布尔值测试表达式){
语句或语句块;
[更改语句;]
}
3.3 for循环
for (初始化表达式①; 布尔值测试表达式②⑤⑦; 更改表达式){
语句或语句块③⑥ ;
}
3.4 嵌套循环
将一个循环放在另一个循环体内,就形成了嵌套循环。
其中,for ,while ,do…while均可以作为外层循环和内层循环
实质上,嵌套循环就是把内层循环当成外层循环的循环体。
当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环。
设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m * n次。
4. 特殊流程控制语句
- break只能用于switch语句和循环语句中。
- continue 只能用于循环语句中。
- 二者功能类似,但continue是终止本次循环,break是终止本层循环。
- break、continue之后不能有其他的语句,因为程序永远不会执行其后的语句。
- 标号语句必须紧接在循环的头部。
4.1 break
- break语句用于终止某个语句块的执行
- break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块
4.2 continue
- continue语句用于跳过某个循环语句块的一次执行
- continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环
4.3 return
- 并非专门用于结束循环的,它的功能是结束一个方法。当一个方法执行到一个return语句时,这个方法将被结束。
- 与break和continue不同的是,return直接结束整个方法,不管这个return处于多少层循环之内
五、Life
“真正想给你的从来都不会问你要不要”