Java 中标识符是为方法、变量或者其他用户定义项定义的名称。标识符用来对变量、常量、类和方法等进行命名。因此,一个良好的编程习惯要求命名标识符时,应赋予它一个有意义或有用途的名字。 标识符可以有一个或多个字符。在 Java 语言中,标识符的构成规则如下:
1、标识符由数字(0~9)、美元符号($)、下划线(_)以及Unicode字符集组合构成。
2、标识符各符号之间没有空格。
3、标识符第一个字符不能为数字。
4、标识符不能为关键字和保留字。
5、标识符的命名最好能反映其作用。
变量的命名规则
1、满足标识符的命名规则
2、符合驼峰法命名规范
3、尽量简单,做到见名如意
4、变量名的长度没有限制,但尽量做到第三条
变量的声明与赋值
在 Java 中,变量分为两种:基本类型变量和引用类型变量。
变量必须先声明后使用,在声明变量的时候,可以给它一个初始值。
例如:
int x = 1;
上述语句声明了一个整型 int 类型的变量,名称为 x,初始值为 1。
变量的一个重要特点是可以重新赋值。例如:对变量 x,先赋值100,在赋值200:
public class Test {
public static void main(String[] args) {
int x = 100; // 定义int类型变量x,并赋予初始值100(变量的初始化)
System.out.println(x); // 打印该变量的值,观察是否为100
x = 200; // 重新赋值为200
System.out.println(x); // 打印该变量的值,观察是否为200
}
}
注意到第一次定义变量 x 的时候,需要指定变量类型 int,因此使用语句 int x = 100;。而第二次重新赋值的时候,变量 x 已经存在了,不能再重复定义,因此不能指定变量类型 int,必须使用语句 x = 200;。
JAVA的字面值:
给基本类型的变量赋值的方式叫做 字面值,如下所例:
float hp = 313f;
int armor = 24;
1.整数字面值
当以l或者L结尾的时候,一个整数字面值是long类型,否则就是int类型。 建议使用大写的L而非小写的l,因为容易和1混淆。
byte,short,int和long的值都可以通过int类型的字面值来创建。
例:
public class HelloWorld {
public static void main(String[] args) {
long val = 26L; //以L结尾的字面值表示long型
int decVal = 26; //默认就是int型
int hexVal = 0x1a; //16进制
int oxVal = 032; //8进制
int binVal = 0b11010; //2进制
System.out.println(oxVal);
}
}
2.浮点数字面值
当以f或者F结尾的时候,就表示一个float类型的浮点数,否则就是double类型(以d或者D结尾,写不写都可以)。
浮点数还可以用E或者e表示(科学计数法)
e2表示10的二次方,即100
1.234e2 = 1.234x100
public class HelloWorld {
public static void main(String[] args) {
float f1 = 123.4F;// 以F结尾的字面值表示float类型
double d1 = 123.4;// 默认就是double类型
double d2 = 1.234e2;// 科学计数法表示double
}
}
3.字符和字符串字面值
字符的字面值放在单引号中,字符串的字面值放在双引号中
需要注意的是,\表示转义,比如需要表示制表符,回车换行,双引号等就需要用 \t \r \n " 的方式进行
public class HelloWorld {
public static void main(String[] args) {
String name = "盖伦";
char a= 'c';
//以下是转义字符
char tab = '\t'; //制表符
char carriageReturn = '\r'; //回车
char newLine = '\n'; //换行
char doubleQuote = '\"'; //双引号
char singleQuote = '\''; //单引号
char backslash = '\\'; //反斜杠
}
}
4、布尔型
布尔类型(boolean)用于对两个数值通过逻辑运算,判断结果是“真”还是“假”。Java 中用保留字 true 和 false 来代表逻辑运算中的“真”和“假”。因此,一个 boolean 类型的变量或表达式只能是取 true 和 false 这两个值中的一个。
变量按照数据类型可以分为基本数据类型和引用数据类型,引用数据类型的包括数组和类等,类定义的变量又称之为对象。
如果按照作用范围来分,则可以分为类级,对象实例级,方法级,块级。本节课程重点介绍方法级的变量如何在内存中进行存储,方法级变量又称之为局部变量。
通常我们可以把内存分为三个区域:
当前我们在主方法中存储的局部变量是存储在内存的栈区的。
int n = 100;
//该语句执行的时候,会先在栈区开辟int类型大小的空间(占用4字节,32位二进制的空间)
//在开辟完成后,通过赋值等于号,将100存储到开辟的空间中去
//所以此处可以将n,看做100所在的内存空间的别名
字符串
字符串比较特殊,它不属于基本数据类型,它是类! 但是字符串又比较特殊,它有一些和基本数据类型比较类似的地方,比如它变量的定义形式。
String str = "Hello,World!";
字符串是由双引号引起来的0个或多个字符,注意:字符串允许是空字符串!
不同类型之间的数据可以互相转换,但是要满足一定的规则
1.转换规则
转换规则如图所示
精度高的数据类型就像容量大的杯子,可以放更大的数据 ;
精度低的数据类型就像容量小的杯子,只能放更小的数据 ;
小杯子往大杯子里倒东西,大杯子怎么都放得下;
大杯子往小杯子里倒东西,有的时候放的下,有的时候就会有溢出;
需要注意的一点是:
虽然short和char都是16位的,长度是一样的
但是彼此之间,依然需要进行强制转换
例:
public class HelloWorld {
public static void main(String[] args) {
char c = 'A';
short s = 80;
//虽然short和char都是16位的,长度是一样的
//但是彼此之间,依然需要进行强制转换
c = (char) s;
//直接进行转换,会出现编译错误
s = c;
}
}
2.低精度向高精度转换
long l = 50;
int i = 50;
l 是long类型的,其类型长度是64位
i 是int类型的,其类型长度是32位
所以l的精度,比i的精度要高
l = i;
把i的值赋给l, 首先l和i彼此的类型是不一样的,那么能否转换就取决于彼此的精度;
这个例子,是低精度向高精度转换 是可以正常转换的;
换句话说,int比较小,要放进比较大的long,随便怎么样,都放的进去。
public class HelloWorld {
public static void main(String[] args) {
long l = 50;
int i = 50;
//int比较小,要放进比较大的long,随便怎么样,都放的进去
l = i;
}
}
3.高精度向低精度转换
byte b = 5;
int i1 = 10;
int i2 = 300;
b = i1;
b=i2;
b的类型是byte,其长度是8,最大只能放127;
i1 的类型是int, 其长度是32,最大,反正就是很大了,超过127;
所以, 把int类型的数据转成为byte类型的数据,是有风险的;
有的时候是可以转换的,比如 b = i1 (i1=10);
有的时候不可以转换 比如 b= i2 (i2=300) 因为放不下了;
编译器就会提示错误;
这个时候就只能采用强制转换,强制转换的意思就是,转是可以转的,但是不对转换之后的值负责。
public class HelloWorld {
public static void main(String[] args) {
byte b = 5;
int i1 = 10;
int i2 = 300;
b = (byte) i1;
//因为i1的值是在byte范围之内,所以即便进行强制转换
//最后得到的值,也是10
System.out.println(b);
//因为i2的值是在byte范围之外,所以就会按照byte的长度进行截取
//i2的值是300,其对应的二进制数是 100101100
//按照byte的长度8位进行截取后,其值为 00101100 即44
b =(byte) i2;
System.out.println(b);
//查看一个整数对应的二进制的方法:
System.out.println(Integer.toBinaryString(i2));
}
}