JAVA基础语法
1.关键字和保留字
1.1 关键字
对Java的编译器有特殊的意义,他们用来表示一种数据类型或者表示程序的结构。
关键字中所有字母都为小写,目前共计50个(包括2个保留字)。
1.2 保留字
保留字是为Java预留的关键字,他们虽然现在没有作为关键字,但在以后的升级版本中有可能作为关键字。
1.3 总览
2.标识符
凡是可以由自己命名的地方都称为标识符。
例如,对于常量、变量、函数、语句块、类、项目等都需要一个名字,这些我们都统统称为标识符。
2.1 命名规则
1.标识符有字母、数字、_(下划线)、$所组成,其中不能以数字开头,不能用Java中的保留字(关键字)
2.标识符采用有意义的简单命名
3."$"不要在代码中出现。(是由于在后面内部类中,编译后会出现$符号)
2.2 命名规范(驼峰命名法)
- 类名和接口名:每个单词的首字母,其余为小写。(大驼峰)
- 方法名:第二个单词起的首字母为大写,其余全为小写。(小驼峰)
- 常量名:基本数据类型的常量名使用全部大写字母,字与字之间用下划线分隔
3.变量
在程序运行期间,随时可能产生一些临时数据,应用程序会将这些数据保存在内存单元中,每个内存单元都用一个标识符来标识,这些用于标识内存单元的标识符就称为变量,内存单元中储存的数据就是变量的值。
数据处理时程序的基本功能,变量是程序中数据的载体。因此变量在程序中占有重要的地位。小伙伴们应理解程序中变量的意义与功能,后续的学习中将会引导大家学习如何定义、使用不同类型的变量,以及如何在程序中对变量进行运算。
4.数据类型
Java的数据类型只有两大类:8大基本数据类型与引用数据类型。
4.1 基本数据类型
- 基本数据类型:6种数字类型(byte/short/int/long/float/double)、1种字符型(char)、1种布尔型(boolean)
char 数据类型可以储存任何字符。
4.2引用数据类型
在Java中,引用数据类型指的是那些不是Java基本数据类型(如int、float、double等)的数据类型。Java的引用数据类型主要指的是对象,它们存储在堆内存中,并且通过引用(或指针)来访问。以下是Java中一些常见的引用数据类型:
- Object - 所有Java类的基类,可以创建Object类型的引用来指向任何对象。
- String - 字符串类型,虽然在Java中String是不可变的,但它实际上是一个对象。
- Array - 数组类型,可以是基本数据类型的数组,也可以是引用类型的数组。
- Class Instances - 类实例,任何自定义类的实例都是引用数据类型。
- Collections - 集合框架中的各种类型,如ArrayList、LinkedList、HashMap、HashSet等,它们都是实现了Collection或Map接口的类。
- Interfaces - 接口,虽然接口本身不是引用类型,但接口的实现通常是类,因此它们的实例是引用类型。
- Enums - 枚举,虽然枚举在Java中是特殊的类类型,但它们可以被当作类实例来使用。
- Wrapper Classes - 包装类,如Integer、Float、Double等,它们是基本数据类型的包装类,用于将基本数据类型包装成对象。
Java中所有的类、接口、数组以及枚举类型都是引用数据类型。当创建这些类型的实例时,实际上是在堆内存中创建对象,并将对象的引用地址赋给变量。这些变量实际上是指向堆内存中对象的引用,而不是对象本身
5.数据类型的转换
5.1 自动类型转换(隐式类型转换)
自动类型转换是指在赋值或运算时,较小范围的数据类型自动转换为较大范围的数据类型。这种转换是安全的,不会丢失数据。常见的自动类型转换包括:
将整数类型(如byte、short、char)转换为较大的整数类型(如int、long)。
将较小范围的浮点数类型(如float)转换为较大范围的浮点数类型(如double)。
将基本数据类型转换为对应的包装类类型(如int转换为Integer)。
例如:
java
byte b = 10;
int i = b; // 自动类型转换,byte到int
double d = 10.5;
float f = d; // 自动类型转换,double到float
5.2 强制类型转换(显式类型转换)
强制类型转换是指将一个较大范围的数据类型转换为较小范围的数据类型。这种转换可能会丢失数据,因此需要程序员显式指定。常见的强制类型转换包括:
将较大的整数类型(如long)转换为较小的整数类型(如byte、short、int)。
将较大的浮点数类型(如double)转换为较小的浮点数类型(如float)。
将包装类类型转换为基本数据类型。
例如:
java
int i = 10;
byte b = (byte) i; // 强制类型转换,int到byte
double d = 10.5;
float f = (float) d; // 强制类型转换,double到float
Integer iObj = 10;
int iPrim = iObj.intValue(); // 包装类到基本数据类型
5.3注意事项
- 数据丢失:在进行强制类型转换时,可能会丢失数据。例如,将一个较大的整数转换为较小的整数类型时,可能会丢失高位的值。
- 类型安全:Java是强类型语言,类型转换需要明确指定,编译器会检查类型转换的合法性。
- 包装类和基本数据类型:基本数据类型和其对应的包装类之间可以自动类型转换,但包装类到基本数据类型需要显式转换。
6.运算符
6.1 算术运算符
算术运算符都是双目运算符,即连接两个操作数的运算符。优先级上,*、/、% 具有相同运算级别,并高于 +、-(+、- 具有相同级别)
加法运算:+
减法运算:-
乘法运算:*
除法运算:/,(另外,整型之间的除法运算是整除,这也就意味着2 / 4的结果为0,如果我们想像数学一样得到一个小数,可以使用浮点类型的操作数。)
取模运算:%(要求两个整型数字相除取余数)
6.2 自增(++)、自减(- -)运算符
++ 或 - - 是单目运算符,放在操作数的前面或后面都是允许的。
++运算,变量自增长1;- -运算,变量自减少1。
那么如果有一个变量i,++i和i++有什么区别呢?
独立运算时:i++和++i没有区别,都是实现自动加1的功能
混合运算时:i++和++i就不同了
1.++/- -在先,先运算后取值
int a = 1;
int b = ++a;
System.out.println(a);//计算结果是2
System.out.println(b);//计算结果是2
前++/- -时,就相当于变量a先自增1,再把值赋给b;
2.++/- -在后,先取值后运算
int a = 1;
int b = a++;//这就等价于 int b=a;a=a+1;
System.out.println(a);//计算结果是2
System.out.println(b);//计算结果是
后++/- -时,就相当于变量a先把值赋给b,再自增1;
注意:
自增/自减运算可以用于整数类型 byte、short、int、long,浮点类型 float、double,以及字符串类型 char。
在 Java 1.5 以上版本中,自增/自减运算可以用于基本类型对应的包装器类 Byte、Short、Integer、Long、Float、Double 和 Character。
6.3 赋值运算符
赋值运算符是指为变量或常量指定数值的符号。赋值运算符的符号为“=”,例如 int a=2.
它是双目运算符,左边的操作数必须是变量,不能是常量或表达式。
记住在Java中两个数相等用的符号是,而=是赋值运算符。
例如 int a=1,int b=1,如果表示a等于b,则是ab
赋值运算符可以和算数运算符组成复合赋值运算:
等于号:=(用于给变量赋值)
加等于:+=
减等于:-=
乘等于:*=
除等于:/=
取模等于:%=
6.4 关系运算符
关系运算符用来比较两个值的关系。关系运算符是二元运算符,运算结果是 boolean 型。当运算符对应的关系成立时,运算结果是 true,否则是 false。
- 相等:==(如果判断正确结果为true)
- 小于号:<
- 大于号:>
- 小于等于:<=
- 大于等于:>=
- 不等于:!=
6.5. 逻辑运算符
逻辑运算符分为:
- 短路逻辑运算符
- 逻辑运算符
短路逻辑运算符 与 逻辑运算符 的区别是:
逻辑运算符:先走一遍,在判断
短路逻辑运算符:一但符合条件,后面的判断不走
注意:短路与(&&)和短路或(||)能够采用最优化的计算方式,从而提高效率。在实际编程时,应该优先考虑使用短路与和短路或。
- 逻辑运算符
逻辑运算符:&、|、^、!
- 短路逻辑运算符
短路逻辑运算符:&&、||
双与:&&(全真才是真)
单与:&(全真才是真)
双或:||(全假才是假)
单或:|(全假才是假)
取反:!
6.6 >,>>和>>> 的使用和区别
-
“>” 表示大于,如:if(a>b)…结果是boolean类型
-
">>“在c++中,移位运算符有双目移位运算符:<<(左移)和>>(右移)。移位运算符组成的表达式也属于算术表达式,其值为算术值。左移运算是将一个二进制位的操作数按指定移动的位数向左移位,移出位被丢弃,右边的空位一律补0。右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位或者一律补0,或者补符号位,这由不同的机器而定。在使用补码作为机器数的机器中,正数的符号位为0,负数的符号位为1,
说白了,就是把要移动的数转换成2进制,右移几位就去掉右边的几位数,左移几位就在右边加几个0,比如14右移2位就是转成二进制变成1110,去掉右边的10,变成11,11转成十进制就是3;左移2位就是111000,转成十进制就是56。
例如:如:int i=15; i>>2的结果是3,移出的部分将被抛弃。
转为二进制的形式可能更好理解,
0000 1111(15)右移2位的结果是0000 0011(3),
0001 1010(18)右移位的结果是0000 0011(3)。 -
”>>>" 表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0。
例如:res = 20 >> 2;
20的二进制为 0001 0100,右移2位后为 0000 0101,则结果就为 res =5;
res = -20 >> 2;
-20的二进制为 1110 1011,右移2位,此时高位补0,即 0011 1010,结果为 res =- 5;
左移没有<<<运算符!