一、Java标识符
1、标识符(identifier)
java编程中标识符是赋予变量、对象、类和方法的名称
- 标识符可以由字母,数字,下划线_,和"$"组成
- 标识符必须以字母、下划线_或$开头,之后可以跟其他字符
- 标识符严格区分大小写,无长度限制
- 在自定义标识符的时候,应该使其能够反映表示的变量、对象或类的意义
例如: 2mail (不能以数字开头)
room# 为非法标标识符
2、关键字(keyword)
关键字是一种特定专用的标识符,不允许重新定义其含义。
关键字都用小写字母表示
常用的关键字有:
Java中没有goto和const
二、数据类型
1.基本数据类型
基本数据类型的变量在堆栈中直接包含其数据,每个变量都有自己的数据副本。
①取值范围
数据类型 | 字节 | 取值范围 | 默认值 |
---|---|---|---|
byte | 1 | -27~(27-1) | 0 |
char | 2 | \u000~\ufff | \u0000 |
short | 2 | -215~(215-1) | 0 |
int | 4 | -231~(231-1) | 0 |
long | 8 | -263~(263-1) | 0 |
float | 4 | 3.4E-38~3.4E38 | 0.0F |
double | 8 | 1.7E-308~1.7E308 | 0.0D |
boolean | 1 | true/false | false |
1Byte(字节)=8bit(位)
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
---|---|---|---|---|---|---|---|
27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 |
②类型转换(可能会导致数据的溢出或者精度的下降)
- 自动类型转换(隐式转换):小范围类型到大范围类型
byte b = 20;
int a = b; //大类型可以容纳小类型
- 强制类型转换(显示转换):大范围类型到小范围类型
int a;
byte b = (byte)a; //强制让小类型容纳大类型
- 运算过程中转换:
short sh1=(short)(sh+3)
图中的虚线表示可能会降低精度
2.引用数据类型
引用数据类型的变量在堆栈中存储对数据的引用地址,数据存储在堆中。
三、变量与常量
1.变量
变量是程序中的基本存储单元,在程序运行的时候得到其数据,可以修改。
①变量的作用域(变量的可被访问范围)
- 成员变量 (在类内部声明的变量)即类的字段
- 方法体局部变量(花括号之内声明的变量)必须初始化才可以使用
- 语句块局部变量(在控制结构块中声明的变量,例如for、if语句中声明的变量)
切记:java中没有全局变量!
2.常量
常量是指在程序执行过程中值不变的量
- 整型常量
整型常量在机器中占32位。
①十进制整数 (以10为基数): 123,-345,0
②八进制整数 (以8为基数):以0开头,如0123表示十进制数83,-011表示十进制数-9
③十六进制整数(以16为基数):0x或0X开头,0x123表示十进制数291,-0x12表示十进制数-18 - 浮点数类型常量
①十进制数形式,由数字和小数点组成:0.23 .23 23. 23.0
②科学计数法形式: 123e3或123E3 - 布尔型常量
①true
②false - 字符类型常量
在单引号‘’之内的字符,常用有很多转义字符
- 字符串类型常量
在双引号“”之内的一串字符,在java中字符串常量作为String类的一个对象来处理。 - null型常量(空引用)
引用类型的唯一文本常量,可以为任何引用类型,赋值给任何引用类型的变量。 - 用户声明常量
final int A = 1;
四、必懂拓展
1.装箱(包)和拆箱(包)
装箱和拆箱可以实现简单类型和引用类型之间的转换
8种简单类型 | 对应的包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
char | Character |
float | Float |
double | Double |
①装箱:(自动装包)将简单类型包装成对应的包装类(调用valueOf方法)
代码:Integer a = 100; // Integer.valueOf
反编译
查看源码
由反编译得出的结果看到调用了Integer.valueOf方法
例:
public class Test {
public static void main(String[] args) {
int a = 10;
int b = 10;
Integer a1 = 200;
Integer a2 = 200;
Integer b1 = 100;
Integer b2 = 100;
System.out.println( a == b);
System.out.println( a1 == a2);
System.out.println( b1 == b2);
}
}
运行结果:
如果是简单类型,比较的是数值是否相等 (a == b)
如果是引用类型:比较地址
如果在范围[-127 ~ 128]之内则放进缓存,不在int范围[-127~128]以内要创建一个新的对象
integer a1=new integer(200)
integer a2=new integer(200)
system.out.printLn(a1 == a2) //打印出true
②拆箱:(自动拆包)将包装类转化为基本类型(调用intvalue方法)
代码:
Integer a=10;
int a1=a;
double d=a.doubleValue; //将a强转为double型赋给double