文章目录
1、注释(annotation)
对代码的及时和说明,不影响程序编译和运行
//单行注释内容
/*
多行注释内容
*/
/**
文档注释内容
*/
2、关键字(keyword)
Java定义好的单词,有特殊含义,全部都是小写字母
1、关键字一共50个,其中const和goto是保留字。
2.、true,false,null看起来像关键字,但从技术角度,它们是特殊的布尔值和空值。
关键字表
3、标识符(identifier)
3.1 命名规则
- 只能使用26个英文字母大小写,0-9数字,下划线_,美元符号$
- 数字不能开头,不能包含空格,不能使用关键字,保留字和特殊值
- 严格区分大小写
3.2 命名规范
- 类名、接口名:每个单词首字母大写,形如:XxxYyyZzz
- 变量名、方法名:从第二个单词开始首字母大写,其余小写,形如:xxxYyyZzz
- 包名:每个单词都小写,单词间用点分割,形如:xxx.yyy.zzz
- 常量名:每个单词大写,单词间用下划线分割,形如:XXX_YYY_ZZZ
4、数据类型(Data Type)
4.1 数据类型分类
- 基本数据类型:整数,浮点数,字符,布尔。
- 引用数据类型:类,数组,接口。String是引用类型
4.2 基本数据类型
- Java中默认类型:整数类型是int,浮点类型是double
- float精度:科学计数法的小数后6-7位
- double精度:科学计数法的小数点后15-16位
4.3 数据类型转换
4.3.1 自动类型转换(隐式类型转换)
- 将取值范围小类型自动提升为取值范围大的类型
- 转换规则如下
- 自动类型转换的场景
/*
(1) 当把存储范围小的值(常量值、变量的值、表达式计算的结果值)赋值给了存储范围大的变量时
*/
int i = 'A';//char自动升级为int
double d = 10;//int自动升级为double
//float f = 2.1;//错误,右边默认是double,不能直接赋值给float
float f1 = 2.1f;//正确
float f1 = (float)2.1;//正确,强制类型转换
byte b = 127; //右边的整数常量值必须在-128~127范围内
//byte bigB = 130;//错误,右边的整数常量值超过byte范围
long num = 1234567; //右边的整数常量值如果在int范围呢,编译和运行都可以通过,这里涉及到数据类型转换
long bigNum = 12345678912L;//右边的整数常量值如果超过int范围,必须加L,否则编译不通过
/*
(2)当存储范围小的数据类型与存储范围大的数据类型一起混合运算时,会按照其中最大的类型运算
*/
int i = 1;
byte b = 1;
double d = 1.0;
double sum = i + b + d;//混合运算,升级为double
/*
(3)当byte,short,char数据类型进行算术运算时,按照int类型处理
*/
byte b1 = 1;
byte b2 = 2;
byte b3 = b1 + b2;//编译报错,b1 + b2自动升级为int
char c1 = '0';
char c2 = 'A';
System.out.println(c1 + c2);//113
4.3.2 强制类型转换(显式类型转换)
- 将取值范围大类型强制转换成为取值范围小的类型
- 强制类型转换的场景
/*
(1)当把存储范围大的值(常量值、变量的值、表达式计算的结果值)赋值给了存储范围小的变量时,需要强制类型转换,提示:有风险,可能会损失精度或溢出
*/
int i = (int)3.14;//强制类型转换,损失精度
double d = 1.2;
int num = (int)d;//损失精度
int i = 200;
byte b = (byte)i;//溢出
/*
(2)当某个值想要提升数据类型时,也可以使用强制类型转换
*/
int i = 1;
int j = 2;
double shang = (double)i/j;
4.3.3 特殊的数据类型转换
/*
(1)任意数据类型的数据与String类型进行“+”运算时,结果一定是String类型
*/
System.out.println("" + 1 + 2);//12
/*
(2)String类型不能通过强制类型()转换,转为其他的类型
*/
String str = "123";
int num = (int)str;//错误的
int num = Integer.parseInt(str);//后面才能讲到,借助包装类的方法才能转
4.4 运算符(Operator)
- 按功能分:算术运算符、赋值运算符、比较运算符、逻辑运算、条件运算符…
- 操作数个数分:一元运算符(单目运算符)、二元运算符(双目运算符)、三元运算符 (三目运算符)
分类 | 运算符 |
---|---|
算术运算符 | + 、- 、* 、/ 、% 、++ 、-- |
赋值运算符 | = 、+= 、-= 、*= 、/= 、%= 等 |
关系运算符 | > 、>= 、< 、<= 、== 、!= |
逻辑运算符 | & 、` |
条件运算符 | (条件表达式)?结果1:结果2; |
位运算符(了解) | & 、` |
4.4.1 算术运算符
算术运算符 | 符号解释 |
---|---|
+ | 加法运算,字符串连接运算,正号 |
- | 减法运算,负号 |
* | 乘法运算 |
/ | 除法运算,整数/整数结果还是整数 |
% | 求余运算,余数的符号只看被除数 |
++ 、 -- | 自增自减运算 |
/*
加减乘除、取模
*/
int a = 3;
int b = 4;
System.out.println(a + b);// 7
System.out.println(a - b);// -1
System.out.println(a * b);// 12
System.out.println(a / b);// 0
System.out.println(3.0 / 4.0);// 0.75
System.out.println(a % b);// 3
System.out.println(5%2);//1
System.out.println(5%-2);//1
System.out.println(-5%2);//-1
System.out.println(-5%-2);//-1
//商*除数 + 余数 = 被除数
//5%-2 ==>商是-2,余数时1 (-2)*(-2)+1 = 5
//-5%2 ==>商是-2,余数是-1 (-2)*2+(-1) = -4-1=-5
/*
"+"号的用法
*/
System.out.println("Hello" + "World"); // HelloWorld
String str2 = "Java";
// String + int --> String
System.out.println(str2 + 520); // Java520
System.out.println(str2 + 5 + 20); // Java520
4.4.2 自加和自减
- ++在前,先自加,后使用;
- ++在后,先使用,后自加。
/*
(1)变量在单独运算的时候,变量 前++ 和变量 后++ ,变量的是一样的
*/
// 定义一个int类型的变量a
int a = 3;
//++a;
a++;
// 无论是变量前++还是变量后++,结果都是4
System.out.println(a);
/*
(2)和其他变量放在一起使用或者和输出语句放在一起使用,前++ 和 后++ 就产生了不同
变量 前++ :变量先自身加1,然后再取值
变量 后++ :变量先取值,然后再自身加1
*/
int x = 3;
//int y = ++x; // y的值是4,x的值是4
int y = x++; // y的值是3,x的值是4
// 和输出语句一起
int z = 5;
//System.out.println(++z);// 输出结果是6,z的值也是6
System.out.println(z++);// 输出结果是5,z的值是6
int a = 1;
a = a++;//(1)先取a的值“1”放操作数栈(2)a再自增,a=2(3)再把操作数栈中的"1"赋值给a,a=1
int i = 1;
int j = i++ + ++i * i++;
/*
从左往右加载
(1)先算i++
①取i的值“1”放操作数栈
②i再自增 i=2
(2)再算++i
①i先自增 i=3
②再取i的值“3”放操作数栈
(3)再算i++
①取i的值“3”放操作数栈
②i再自增 i=4
(4)先算乘法
用操作数栈中3 * 3 = 9,并把9压入操作数栈
(5)再算求和
用操作数栈中的 1 + 9 = 10
(6)最后算赋值
j = 10
*/
练习
int i = 1;
int j = i++;//j=1,i=2
int k = i++ * ++j + ++i * j++;
//i++ * ++j = 2 * 2;//i=3,j=2
//++i * j++ = 4 * 2;//i=4,j=3
//k = 4+8=12;//i=4,j=3
System.out.println("i = " + i);
System.out.println("j = " + j);
System.out.println("k = " + k);
4.4.3 赋值运算符
所有的赋值运算符的=左边一定是一个变量
赋值运算符 | 符号解释 |
---|---|
= | 将符号右边的值,赋值给左边的变量 |
+= | 将符号左边的值和右边的值进行相加操作,最后将结果赋值给左边的变量 |
-= | 将符号左边的值和右边的值进行相减操作,最后将结果赋值给左边的变量 |
*= | 将符号左边的值和右边的值进行相乘操作,最后将结果赋值给左边的变量 |
/= | 将符号左边的值和右边的值进行相除操作,最后将结果赋值给左边的变量 |
%= | 将符号左边的值和右边的值进行取余操作,最后将结果赋值给左边的变量 |
4.4.4 关系运算符/比较运算符
- 比较运算符,是两个数据之间进行比较的运算,运算结果一定是boolean值
true
或者false
- 其中>,<,>=,<=不支持boolean,String类型,==和!=支持boolean和String。
关系运算符 | 符号解释 |
---|---|
< | 比较符号左边的数据是否小于右边的数据,如果小于结果是true。 |
> | 比较符号左边的数据是否大于右边的数据,如果大于结果是true。 |
<= | 比较符号左边的数据是否小于或者等于右边的数据,如果大于结果是false。 |
>= | 比较符号左边的数据是否大于或者等于右边的数据,如果小于结果是false。 |
== | 比较符号两边数据是否相等,相等结果是true。 |
!= | 不等于符号 ,如果符号两边的数据不相等,结果是true。 |
4.4.5 逻辑运算符
逻辑运算符,是用来连接两个布尔类型结果的运算符(
!
除外),运算结果一定是boolean值true
或者false
逻辑运算符 | 符号解释 | 符号特点 |
---|---|---|
& | 与,且 | 有false 则false |
` | ` | 或 |
^ | 异或 | 相同为false ,不同为true |
! | 非 | 非false 则true ,非true 则false |
&& | 双与,短路与 | 左边为false,则右边就不看 |
` | ` |
4.4.6 条件运算符
//条件表达式?结果1:结果2
int i = (1==2 ? 100 : 200);
System.out.println(i);//200
int j = (3<=4 ? 500 : 600);
System.out.println(j);//500
4.4.7 位运算符
- 左移<<:
<<
左移几位就相当于乘以2的几次方 - 右移>>:
>>
右移几位就相当于除以2的几次方 - 无符号右移:往右移动后,左边空出来的位直接补0,不看符号位
位运算符 | 符号解释 |
---|---|
& | 按位与,当两位相同时为1时才返回1 |
` | ` |
~ | 按位非,将操作数的每个位(包括符号位)全部取反 |
^ | 按位异或。当两位相同时返回0,不同时返回1 |
<< | 左移运算符 |
>> | 右移运算符 |
>>> | 无符号右移运算符 |
public class TestOne {
public static void main(String[] args) {
System.out.println("十进制:"+(-10)+"\n二进制补码字符串:\n"+Integer.toBinaryString(-10));
System.out.println("负数的右移:"+(-10>>3)+"\n负数的右移二进制补码字符串:\n"+Integer.toBinaryString(-10>>3));
System.out.println("负数的无符号右移:"+(-10>>>3)+"\n负数的无符号右移二进制补码字符串:\n"+Integer.toBinaryString(-10>>>3));
}
}
/*
结果
十进制:-10
二进制补码字符串:
11111111111111111111111111110110
负数的右移:-2
负数的右移二进制补码字符串:
11111111111111111111111111111110
负数的无符号右移:536870910
负数的无符号右移二进制补码字符串:
11111111111111111111111111110
*/
4.4.8 运算符优先级
5、常量(Constant)和变量(Variable)
5.1 常量
- 常量:包括字面常量和自定义常量。程序执行过程中,值不发生变化的量。可通过final自定义常量。
常量池
5.2 变量
- 变量要注意的地方
- 先声明后使用,不然会报找不到符号错误
- 使用前初始化,不然会报初始化错误
- 有作用域,超过作用域,会报找不到符号错误
- long类型:如果赋值的常量整数超过int范围,需要在数字后面加L或l
- float类型:如果赋值为常量小数,那么需要在小数后面加F或f
- char和String:char使用单引号’',String使用双引号""
补充知识:计算机存储数据
计算机世界中只有二进制。那么在计算机中存储和运算的所有数据都要转为二进制。包括数字、字符、图片、声音、视频等。
数据存储最小单位是位(bit),也就是二进制,二进制系统中,每个0或1就是一位,叫做bit(比特),8bits称为一个字节(Byte)。字节是计算机信息基础中用于计量存储容量的一种计量单位,一字节等于八位。
- 8 bit = 1 Byte
- 1024 Byte = 1 KB
- 1024 KB = 1 MB
- 1024 MB = 1 GB
- 1024 GB = 1 TB
1、进制分类
- 十进制:0-9,逢十进一
- 二进制:0-1,逢二进一
- 八进制:0-7,逢八进一,每三位二进制是一位八进制值
- 十六进制:0-9,a-f/A-F,不区分大小写,每四位二进制是一位十六进制值
2、进制换算
十进制 | 二进制 | 八进制 | 十六进制 |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 |
2 | 10 | 2 | 2 |
3 | 11 | 3 | 3 |
4 | 100 | 4 | 4 |
5 | 101 | 5 | 5 |
6 | 110 | 6 | 6 |
7 | 111 | 7 | 7 |
8 | 1000 | 10 | 8 |
9 | 1001 | 11 | 9 |
10 | 1010 | 12 | a或A |
11 | 1011 | 13 | b或B |
12 | 1100 | 14 | c或C |
13 | 1101 | 15 | d或D |
14 | 1110 | 16 | e或E |
15 | 1111 | 17 | f或F |
16 | 10000 | 20 | 10 |
2.1 十进制转二进制:除以2倒取余数,直到商为0
2.2 二进制转十进制:从右往左一次是2的0次,2的1次,2的2次…
2.3 二进制转八进制:从右往左,每三位转换成一位八进制值,不够三位补0
2.4 二进制转十六进制:从右往左,每四位转换成一位八进制值,不够三位补0
3、代码四种进制表示
//十进制:正常表示
System.out.println(10);
//二进制:0b或0B开头
System.out.println(0B10);
//八进制:o或O开头
System.out.println(010);
//十六进制:0x或0X开头
System.out.println(0X10);