变量
- 在类、接口、枚举中声明的变量被称为成员变量 成员变量又分为两类:
- 类变量(静态变量):被static关键字修饰的变量。
- 实例变量(非静态变量):未被static关键字修饰的变量。
static int n1 = 100;(类变量)
int n2 = 128;(实例变量)
- 方法内部声明的变量和方法的形式参数变量都被称为局部变量(本地变量)
- 局部变量的声明与赋值可以分为两步:
int x;// 声明
x = 256;// 初始化
System.out.println("x = " + x);
- 推荐的代码写法: 变量的声明和初始化可以一步完成
int y = 512;
- 同时声明多个变量,并赋相同值
int i1, i2, i3;
i1 = i2 = i3 = 10;
- 在声明的数据类型前加入final关键字,就会声明一个常量
- 常量:
- 只能为其赋值一次的内存空间,即初始化后,值不可再被修改
- 如果试图在被初始化后的常量上进行值的修改,则不允许程序通过编译
- 如果能确定一个变量的值在日后不会改变,则应该将其声明为final的
- 局部变量和常量在第一次使用前必须进行初始化,否则不能通过编译
- Java 10引入的局部变量类型自动推断(var)
- ava的编译器在编译源代码时会通过值对变量的类型进行自动的推断
- ava的编译器在编译源代码时会通过值对变量的类型进行自动的推断
- 虽然使用var关键字声明变量看上去有点像Javascript中声明变量的语法,但Java依旧是强类型的语言,一旦变量的类型被推断出,则不能再对类型进行改。如:age = true;
- 如果使用var来声明变量,则必须在声明的同时为其进行初始化,否则无法通过编译。因为此变量的类型要通过初始化的具体值来判定。
- 关于赋值运算
- 用字面量进行变量的赋值
int a = 100;
boolean b = false;
double c = 56.388283;
- 把表达式的运算结果赋值给变量
int sum1 = a + 100;
System.out.println("sum1 = " + sum1);
(赋值运算从右向左)
- 把调用方法返回的结果赋值给变量
int x = 1000;
int y = 3568;
int z = Math.max(x, y);
System.out.println("z = " + z);
int i = Math.max(a * x, y * 2);
System.out.println("i = " + i);
- 取x的当前值并除以2,然后将结果再赋值给x。
x = x / 2;
System.out.println("x = " + x);
- 布尔类型字面量只有true和false两种取值
boolean b1 = false;
boolean b2 = true;
- 与C语言不同,true和false不能被转换为数值类型
- 浮点数据类型
- 浮点数据类型字面量,默认类型为double.若想使用float类型的字面量,需在其后加F或f后缀
float f1 = 0.5F;
float f2 = .5F;
float f3 = 5.F;
float f4 = 1.3282e+8F;// 1.3282 * 10的8次方
float f5 = 1.3282e-5F;// 1.3282 * 10的-5次方
float f6 = -1.3282e-5F;// -1.3282 * 10的-5次方
//double类型也有后缀
double d1 = 0.8;
double d2 = 5.323D;
double d3 = 5.323d;
- double字面量也可以使用科学计数法表示
System.out.println(0.8 + 0.3);// 1.1
- 摄入误差
System.out.println(0.8 + 0.4);// 1.2000000000000002
- long数据类型
- 8进制字面量:以0开头,后边跟数字0~7,但8进制不常用
System.out.println("010: "+ 010);
System.out.println("021: "+ 021);
- 16进制字面量:以0x或0X开头,后边跟09af(10~15)
System.out.println("0x10: "+0x10);
System.out.println("0x32: "+0x32);
System.out.println("0x2e: "+0x2e);
- 从Java 7开始,引入了2进制字面量.2进制字面量:以0b或0B开头,后边跟数字0和1
System.out.println("0b100011101: "+0b100011101);
System.out.println("0b1010: "+0b1010);
- 从Java 7开始,可以在数字中加入_作为分隔符(注意:不可加在数字的开始和结束位置,也不可以加在小数点两侧。 是为阅读程序方便而加入的,在程序被编译后,所有会被丢弃)
System.out.println("0b1000_1111_0101: "+0b1000_1111_0101);
错误书写格式:
long num1 = long num1 = 28_349_558_923_458L;
// long num2 = _28_349_558_923_458L;
// long num3 = 28_349_558_923_458_L;
注:整数类型数据在代码中会默认为int类型数据,因此在编写long类型数据是应在数字后加上大写字母L
double num4 = 288_223.389_283;
// double num5 = 288_223_.389_283;
// double num6 = 288_223._389_283;
正确书写格式
- char数据类型
- 字符类型字面量表示Unicode字符集中的单个字符,使用一对单引号进行界定
- 字符类型是int类型的子集,范围在[0, 65535]区间内。字符型可以转换为int类型,int类型中的0~65535可以转换为char类型
- char与int之间的关系即字符与字符编码之间的关系如:a:97 A:65
- char类型数据不能用单引号引单个字符或说引号引单个字符
// char c2 = 'abc';(错误)
// char c3 = "a";(错误)
- 转义符
- char x = '\n';// 换行*
x = '\r';// 回车*
x = '\b';// 退格
x = '\t';// 水平制表(Tab)*
x = '\f';// 换页
x = ''';// 单引号*
x = '"';// 双引号*
x = '\';// 反斜线*
x = '\101';
// 3位8进制数字,表示000377(0255),对应西欧字符集(ISO-8859_1)
x = '\u4e00';// 以反斜线加u开头,后跟4位16进制数,可以表示全部Unicode字符集中的字符 - 字符型字面量用单引号,字符串字面量用双引号,在程序中字符串字面量比字符字面量更常用,字符类型的转义符也可以使用在字符串中。
String str = "This's an apple.\n\tThat\'s an \"orange\".";
System.out.println("str = " + str);