Java 关键字
- 被Java语言赋予特定含义的单词
- 组成关键字的字母全部小写
- goto和const作为保留字存在,目前并不使用
- 一般关键字在IDE中会高亮
用于定义数据类型的关键字 | ||||
class | interface | byte | short | int |
long | float | double | char | boolean |
void | ||||
用于定义数据类型值的关键字 | ||||
true | false | null | ||
用于定义流程控制的关键字 | ||||
if | else | switch | case | default |
while | do | for | break | continue |
return |
用于定义访问权限修饰符的关键字 | ||||
private | protected | public | ||
用于定义类,函数,变量修饰符的关键字 | ||||
abstract | final | static | synchronized | |
用于定义类与类之间关系的关键字 | ||||
extends | implements | |||
用于定义建立实例及引用实例,判断实例的关键字 | ||||
new | this | super | instanceof | |
用于异常处理的关键字 | ||||
try | catch | finally | throw | throws |
用于包的关键字 | ||||
package | import | |||
其他修饰符关键字 | ||||
native | strictfp | transient | volatile | assert |
Java标示符
- 给类,接口,方法,变量等起名字时使用的字符序列
- 由英文大小写字母和数字以及$和_组成,切不能为Java关键字,同时不能以数字开头
- 标示符区分大小写
Java 注释
- 为了对程序进行说明
- 单行注释 //注释内容
- 多行注释 /*注释内容*/
- 文档注释 /**注释内容 */
Java常量
- 执行程序过程中值不会发生变化
- 字符串常量 例如 "aba", "happy"
- 整数常量 例如 10,二进制表示(0b1010),八进制表示(012),十进制表示(10,默认表示形式),十六进制表示(0x000A)
- 小数常量 例如 1.1,2.1等
- 字符常量 例如 'a', 'b',但是'ab'是错的
- 布尔型常量 例如 true,false
- 空常量 只有null
整数常量会有原码,反码,和补码的区别,所有数据的运算都是采用补码进行的;
- 原码:就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
- 反码:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
- 补码:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
Java变量
- 在程序执行的过程中,在某个范围内其值可以发生改变的量;
- 定义格式:数据类型 变量名 = 初始化值;
Java 数据类型
Java是强数据类型语言,内存上会区别不同类型内存的大小,下面是不同数据类型的区分表。
不同数据类型大小区分如下:
简单类型 | boolean | byte | char | short | Int | long | float | double | void |
字节数目 | 1 | 1 | 2 | 2 | 4 | 8 | 4 | 8 | -- |
封装器类 | Boolean | Byte | Character | Short | Integer | Long | Float | Double | Void |
默认整数是用int表示,如果用long,记得数字后缀加L;默认小数用double表示,如果要用float,记得用F为后缀;
Java 类型转换
- 布尔型不支持转化
- byte,short,char—int—long—float—double;
- byte,short,char相互之间不能转换,他们参与运算首先转换为int类型;
- 强制转换: 目标类型 变量名=(目标类型)(被转换的数据);
注意点:
byte b1 = 3, b2 = 4, b;
b = b1 + b2;//会报错,可能损失精度
b = 3 + 4;//不会报错
因为
b = b1 + b2
默认有类型提升,byte和byte相加,先转换成int,然后将int赋值给byte会出现“可能损失精度”的报错;
但是 b = 3 + 4则不会报错,这是因为常量先把结果计算出来,然后看是否在byte范围内,如果在则不会报错;
所以变量是先讲类型进行提升,byte,short,char的计算,都是先到int,然后再去计算。常量在编译后就可以确定,而变量要运行后才能确定。
如果赋值出现溢出怎么办,例如有byte b = (byte) 131;
这时候计算机操作如下:
计算机会把131看作整数,所以在计算机中存储131为4个字节,如下:
0000 0000 0000 0000 0000 0000 1000 0011
然后赋值给byte,会先截取最后一个字节,所以b在计算机中存储的是1000 0011,记住,这是补码,最终输出的结果是原码。
补码: 1 000 0011
反码: 1 000 0010
原码: 1 111 1101
所以结果为:-125
Java 算术运算符
注意点:
- 除法中,整数和整数相除,得到的是整数
- +号可以表示加法,正数和字符串的链接
- System.out.println(8++);这句语句编译会出错,因为常量不能参与这种自增运算,++,--针对的是变量
Java 关系运算符
Java 逻辑运算符
&&:结果和&是一样的,只不过有短路效果。左边是false,右边不执行。
||:结果和|是一样的,只不过有短路效果。左边是true,右边不执行。
&,|,^:当两边出现的是布尔值时,做的是逻辑运算,最后结果为true或false;但,当两边为数值时,做的是位运算。
Java算术运算符
A:+,-,*,/,%,++,--
B:+的用法
a:加法
b:正号
c:字符串连接符
C:/和%的区别
数据做除法操作的时候,/取得是商,%取得是余数
D:++和--的用法
a:他们的作用是自增或者自减
b:使用
**单独使用
放在操作数据的前面和后面效果一样。
a++或者++a效果一样。
**参与操作使用
放在操作数的前面:先自增或者自减,再参与操作
int a = 10;
int b = ++a;// b为11
放在操作数的后面:先参与操作,再自增或者自减
int a = 10;
int b = a++;//b为10
Java赋值运算符
A: =,+=,-=,*=,/=,%=等
B: =叫做赋值运算符,也是最基本的赋值运算符
int x = 10; 把10赋值给int类型的变量x。
C:扩展的赋值运算符的特点
隐含了自动强制转换。
面试题:
short s = 1;
s = s + 1; //先做了类型转换到int,然后没有强制类型转换,会报出“可能损失精度的错误”
short s = 1;
s += 1;// 隐含了自动强制转换。不会报错
A:^的特殊用法
一个数据针对另一个数据位异或两次,该数不变
B:面试题
a:请实现两个变量的交换
**采用第三方变量:用一个temp中间变量来实现交换
**用位异或运算符(高效率)
a = a ^ b;
b = a ^ b;
a = a ^ b;
** 用减法
a = a + b;
b = a - b;
a = a - b;
** 一条语句实现交换
b = (a+b) - (a=b);
b:请用最有效率的方式计算出2乘以8的结果:2<<3
Java三元运算符
A:格式
比较表达式?表达式1:表达式2;
B:执行流程:
首先计算比较表达式的值,看是true还是false。
如果是true,表达式1就是结果。
如果是false,表达式2就是结果。
C:案例:
a:比较两个数据是否相等
b:获取两个数据中的最大值
c:获取三个数据中的最大值