一.关键字
- 关键字:被java 语言赋予特定含义的单词
- 关键字的特点:组成关键字的单词全部小写
- 常见关键字:
二.标识符
- 标识符:给类,接口,方法,变量等起名字时使用的字符序列
- 标识符组成规则:
- 数字字符
- 英文大小写字母
- $和_
- 注意:
- 不能以数字开头
- 不能是关键字
- 区分大小写
三.注释
- 注释:用于解释说明的文字
- 注释的格式:
- 单行注释:
//注释内容
- 多行注释:
/*注释内容*/
- 文档注释:
/**注释内容*/
- 单行注释:
四.常量,进制和进制转换
常量
- 常量:在程序执行的过程中其值不可以发生改变
- 常量的分类:
- 字面值常量:
- 整数常量:整数或者负整数
例如:10,-1 - 小数常量:小数
- 字符常量:使用单引号括起来的内容:只能包含单个字母或者数字
例如:’a’ - 布尔型常量:只有true或者 false
- 空常量:null
- 整数常量:整数或者负整数
- 自定义常量
- 字面值常量:
进制
- 进制:就是进位制,是人们规定的一种进位方法。 对于任何一种进制–X进制,就表示某一位置上的数运算时是逢X进一位。二进制就是逢二进一,八进制是逢八进一,十进制是逢十进一,十六进制是逢十六进一。
- java针对整数常量有四种进制: 二进制,八进制,十进制和十六进制
- 不同进制组成规则:
二进制: 由0,1组成;以0b开头
八进制:由0~7组成;以0开头
十进制:由0~9组成;整数默认是十进制
十六进制:由0~9,a~f组成;以0x开头
进制转换
十进制到x进制的转换:十进制数除以x,求余数,直到商为0,最后将得到余数的顺序进行反转
例如:十进制52转换为二进制
所以52的二进制为:110100任意进制到十进制的转换:
系数:就是每一位上的数据
基数:x进制,基数就是x
权:在右边,从0开始编号,对应位上的编号即为该位的权
结果:把系数*基数的权次幂相加即可
例如:二进制110100转换为十进制
**8421码快速转换法:**8421码是中国大陆的叫法,8421码是BCD代码中最常用的一种。在这种编码方式中每一位二进制中代码的1都是代表一个固定数值
用法:二进制—>十进制的快速转换110100:32+16+4=52
十进制—>二进制的快速转换
52=32+16+4
二进制转换到八进制,十六进制:
- 十进制作为桥梁
- 二进制—>(8421码)十进制—>八进制/十六进制
- 二进制—>八进制:三位为一组,求对应十进制,组合在一起得到其八进制
- 二进制—>十六进制:四位为一组,求对应十进制,组合在一起得到其八进制
五.变量
- 变量:在程序执行的过程中,在某个范围内其值可以发生改变的量
- 格式:
数据类型 变量名 = 初始化值;
- 定义变量的注意事项:
- 定义变量必须在某一个作用域内去定义 {里面去定义}
- 变量名只能被定义一次,多次编译不通过
- 同一行可以定义多个变量,但是不建议这样去做.书写不规范
- 定义变量,并且没有初始化值,那么一定要在使用(输出这个变量)之前,给它进行赋值,否则报错!
六.数据类型和类型转换
数据类型:
Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存总分配了不同大小的内存空间
由于整数是默认int类型,超出int类型的范围用long类型去接收,所以必须数据的末尾加上L或者l(建议使用大写L)
浮点类型中的float,浮点类型默认是double,所以,一般情况建议在默认去写上大写Fdouble d = 12.345 ;
float f = d ;
错误:必须强制类型转换才能不报错,因为浮点类型默认double,用小范围数据类型去接收大范围的数据类型是不可以的!
float f1 = (float)12.345 ;
float f2 = 12.345f;
f1其实就是将一个double类型的数据强制转换为float类型
f2其实本身就定义的是一个float类型类型转换:
byte,short,char—>int—>long—>float—>double
前三者之间相互不转换,但是一旦参与运算,前三者首先会转换int类型
byte b1=3,b2=4,b;
b=b1+b2;
b=3+4;
哪句是编译失败的呢?为什么?
b=b1+b2是错误的;
byte,short,char相互不转换,但是一旦参与运算,前三者首先会转换 int类型
int是4个字节,bite是一个字节去接收肯定报错,应强制类型转换
b=(byte)(b1+b2)
变量相加:先看数据类型,看是否有默认转换,若有则必须强制类型转换
常量相加:先相加,然后得到结果看其是否在byte(-128-127之内),在的话 就不会报错byte b = 130;有没有问题?若有问题,如何改正?改正后输出多少?
byte类型范围为(-128~127)超出范围,有问题,应强制类型转换
byte b=(byte)130;
130:原码->00000000 00000000 00000000 10000010
反码->00000000 00000000 00000000 10000010
补码->00000000 00000000 00000000 10000010
130强制转化为byte类型,截取3个字节:10000010(补码)
10000010(最高位为1,为负)
符号位 数值位
1 0000010(补码)
1 0000001(反码)
1 1111110(原码)
- 126
因此,最后输出-126
七.运算符
A:算术运算符
- 正号:+3
- 负号:-3
- 加(+),减(-),乘(*),除(/)除:取整
- 求余(%):3%4=3
- 字符串拼接(+):
public class Test {
public static void main(String[] args) {
System.out.println("hello"+2);
}
}
输出结果:hello2 - 自增(++):
++
单独使用:无论前缀++(++7)还是后缀++(7++),都增1
++
参与运算:前缀++,先自增1,在运算
后缀++,先运算,在自增1 - 自减(–):
--
单独使用:无论前缀–(–7)还是后缀–(7–),都减1
--
参与运算:前缀–,先自减1,在运算
后缀–,先运算,在自减1
B.赋值运算符
- 基本赋值运算符(=):把等号右边的值赋值给等号左边的变量
- 扩展的赋值运算符(+=,-=,*=,/=,%=):把符号的左边的值和右边的值相加,赋值给左边
short s = 1 ; s = s+ 1;
short s = 1 ; s += 1 ;
上面两个代码有没有问题,如果有,哪里有问题.
第一个有问题:隐含了一个默认类型转换类型不匹配
第二个没有问题:扩展的赋值运算符隐藏了强制类型转换
C.比较运算符
- 比较运算符(>,>=,<,<=,!= ,==)
- 无论表达式是否复杂的还是简单的,最终结果都是boolean类型
4<x<6
:java语言中不能这样写(4<x && x>6)
D.逻辑运算符
- 逻辑运算符:可以连接某个值或者某一个表达式
- 基本的逻辑运算符:
- 逻辑与(&):有false则false
- 逻辑或(|):有true则true
- 逻辑异或(^):相同false,不同true
- 逻辑非(!):非false则true,非true则false
扩展的逻辑运算符:
逻辑双与(&&)
逻辑与和逻辑双与的区别?
共同点:两个表达的效果是一样的(有false则false)
短路效果:
逻辑双与具有短路效果:左边的表达式如果是false,则右边不执行逻辑双或(||)
逻辑或和逻辑双或的区别?
共同点:两个表达的效果是一样的
短路效果
具有短路效果,左边如果是true,右边不执行.
E.位运算符
- ^:特点:一个数据被另一个数据位异或两次,其值本身不变
F.三目运算符
- 格式:
(表达式) ? 表达式1 : 表达式2;
- 执行流程:先判断表达式是否成立,如果成立,把表达式1作为结果;如果不成立,把表达式2作为结果