语法基础(一)
一. 关键字和标识符
1. 关键字
概念: Java关键字是事先定义好的对Java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名和参数。
2. 标识符
概念: 程序中自己命名的都叫标识符。 比如: 类名,变量名,常量名,方法名。
命名规则:
- 不可以使用Java保留的关键字。
- 数字,字母,下划线(_)组成,严格区分大小写,也可以使用$。
- 不能数字开头。
建议:
1. 包名小写,类名大驼峰式 。
2. 变量名方法名首字母小写,其它单词首字母大写。
3. 常量(final修饰过的)使用全大写。
二. 常量和变量
首先了解Java中8大基本数据类型
类型 | 字节数 | 二进制位数 | 默认值(作为成员变量) |
---|---|---|---|
boolean(布尔型) | 理论上是(1/8) | 理论上是1 | false |
byte(字节型) | 1 | 8 | 0 |
short(短整型),char(字符型) | 2 | 16 | short是0 char是 ‘u0000’ |
int(整型),float(单精度浮点数) | 4 | 32 | int是0 float是0.0 |
long(长整型),double(双精度浮点数) | 8 | 64 | long是0 double是0.0 |
1. 常量
概念: 程序运行中不会发生变化的量。
根据概念可以有:
- 整型常量
- 浮点数常量
- 字符常量
- 字符串常量
- 布尔常量
2. 变量
概念: 程序运行期间,内容可以随意改变的量。
- 当创建变量的时候,需要在内存中申请空间。(前提需要知道数据类型,变量名,初始值)
- 内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。
- 通过定义不同类型的变量,可以在内存中存储整数,小数或字符。
创建变量格式:
数据类型 变量名 = 值;
或者
数据类型 变量名;
变量名 = 值;
作用域: 从变量定义开始,到所属大括号结束。
生命周期:
1. static修饰的变量,生命周期取决于类何时被加载及卸载。
2. 成员变量,生命周期取决于对象何时被创建及销毁。
3. 成员方法中局部变量,生命周期取决于该方法何时被调用与结束。
注意: 当成员变量和成员方法中的变量同名,而且使用的时候没用this,那么方法内的变量名就只表示局部变量。
变量和常量的注意事项:
- 数据范围与字节数不一定相关,float数据范围比long更广泛,但float只有4个字节,long有8个字节。
- 浮点数知识一个近似值,并不是精确的值。
- 浮点数默认类型是double,若使用float类型,需要末尾加上"F"。
- 字符串不属于基本类型,而是引用类型。
- 整型默认类型是int,浮点数默认类型是double
(也可以理解为,所有长度低于int的类型(byte、short、char)在运算之后结果将会被提升为int型。double同理。)
public class A{
public byte num1=1;
public void a(){
//创建byte类型
byte num2=2;
// byte num3=num1+num2 该行会报错,类型不匹配: 不能从int类型转换为byte类型
int num4=num1+num2; // 不会报错
//创建long类型
//long num5=99999999999; 该行会报错,数字太大
long num6=99999999999L; //不会报错,末尾加L,说明该整数是long类型的
}
}
分析原因:
一. (对于byte)
① 1是常量,整型默认为int类型 0000 0000 0000 0001,2为 0000 0000 0000 0010
② 两个数都没有超出 byte规定范围,存入byte时会去掉多余字节
③ 但是num1和num2是变量,变量的值可以随时更改,若外部修改num1的值使其为127,num1+num2 结果为 129 整型默认int类型则 0000 0000 1000 0001,超出byte表示范围,此时若强行赋值给byte类型就会发生精度损失,安全起见所以进行报错。
(也可以理解为,所有长度低于int的类型(byte、short、char)在运算之后结果将会被提升为int型)
二.(对于long)
1. 99999999999是常量,整型默认为int 1011101001000011101101110011111111111,长度超出int能表示的范围所以发生错误。
2. 99999999999L是常量,由于后缀"L"声明为Long类型的,符合长度范围,不报错。
三. 数据类型转换(对于基本数据类型)
类型转换分为两种: 自动(隐式)数据类型转换,强制(显式)数据类型转换。
1. 自动类型转换
概念: 当参与运算的数据类型不同时,则会自动转换成同一类型,然后进行运算。
特点: 不需要进行处理,自动完成数据类型转换。
转换规则: 若运算类型不同,自动从低级转换向高级类型转换,数据范围从小到大。
低 ------------------------------------> 高
byte,short,char—> int —> long—> float —> double
2. 强制类型转换:
概念: 当操作数的类型不同,需要将结果或者操作数转化为所需要的类型,这个过程即为强制类型转换。
特点: 需要手动进行处理,强制转换为需要的类型。
转换规则: 从高级转换向低级类型转换,数据范围从大到小。
转换格式: 范围小的类型变量 = (范围小的类型) 范围大的数据。
关于类型转换需要注意的地方:
- 不能对boolean类型进行类型转换。
- 转换过程中可能导致溢出或损失精度(尤其是强制转换)。
public static void main(String[] args) {
//自动类型转换
byte num1=10;
int num2=num1; //自动转换为int类型
int num3=20;
//一个byte类型,一个int类型,运算类型不同,自动提升到int类型,进行相加,结果为int类型
int num4=num1+num3;
float num5=num3+num1; //自动转换为float类型
//一个int类型,一个float类型,运算类型不同,自动提升到float类型,进行相加,结果为float类型
float num6=num5+num3;
//int num7 = num5+num3; 报错,无法自动向低精度转换,会发生精度丢失,所以报错。
//强制类型转换
int num7=(int) num5 +num3; //结果为: 50
//手动进行的强制转换
}
参考资料:
https://www.cnblogs.com/xiaozhongfeixiang/p/11502971.html
( 注:部分资料参考网络,如有侵权或错误请留言,感谢!)