JavaSE(4)——变量
一、关键字和保留字
1. 关键字
- 定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)。
- 特点:关键字中所有字母都为小写。
2.保留字
现有Java版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留字。(goto、const
)
二、标识符
-
定义:Java对各种变量、方法和类等要素命名时使用的字符序列称为标识符。
-
技巧:凡是自己可以起名字的地方都叫标识符。
-
定义合法标识符的规则:(合法标识符例如:
mile
、Test
、a0d
、ad_fd
等)- 由26个英文字母大小写,0-9,_或$组成数字不可以开头。
- 不可以使用关键字和保留字,但能包含关键字和保留字。
- Java中严格区分大小写,长度无限制。
- 标识符不能包含空格。
-
标识符命名规范:(如果不遵守如下规范,编译也可以通过,建议如此)
- 包名:多单词组成时所有字母都小写:
xxxyyyzzz
- 类名、接口名:多单词组成时,所有单词的首字母大写:
XxxYyyZzz
- 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:
xxxYyyZzz
- 常量名:所有字母都大写。多单词时每个单词用下划线连接:
XXX_YYY_ZZZ
- 包名:多单词组成时所有字母都小写:
在命名的时候尽量让名字有意义能够做到见名知意。
Java采用Unicode字符集,因此表示夫也可以使用汉字声明,但是不建议使用。
三、变量
1. 变量:
- 概念:
- 内存中的一个存储区域。
- 该区域的数据可以在同一类型范围内不断变化。
- 变量是程序中最基本的存储单元。包含变量类型、变量名和存储的值。(有些不需要具体的变量类型的语言叫做弱类型语言,对于要求成员写出指定变量类型这就是强类型语言)
- 作用: 用于在内存当中保存数据
注意点:
- Java中每个变量必须先声明,后使用
- 使用变量名来访问这块区域的数据
- 变量的作用域:其定义所在的一对{}内
- 变量只有在其作用域内才有效
- 同一个作用域内,不能定义重名的变量
变量的定义、赋值、使用在如下代码实例中可见
代码示例:
package exercise.variabletext;
public class VariableText {
public static void main(String[] args) {
//变量的定义
int i = 23;
//变量的使用
System.out.println(i);
//编译错误:使用Number之前并未定义过Number
//System.out.println(Number);
//变量的声明
//编译错误:使用Number之前未被赋值过
//System.out.println(Number):
int Number;
//变量的赋值
Number = 1000;
System.out.println(Number);
//编译错误:myClass在不同的作用域当中
//System.out.println(myClass);
//不可以在同一个作用域内定义同名的变量
//int myAge = 22;
}
public void method() {
int myClass = 1;
}
}
- 数据类型: (按数据类型分类)
-
基本数据类型
-
数值型
- 整数类型(
byte
、short
、int
、long
)
- Java各整数类型有固定的表数范围和字段长度,不受具体OS的影响,以保证java程序的可移植性。
- Java的整型常量默认为int型,声明long型常量须后加
l
或L
- Java程序中变量通常声明为int型,除非不足以表示较大的数,才使用long
- 浮点类型(
float
、double
)
-
与整数类型类似,Java浮点类型也有固定的表数范围和字段长度,不受具体操作系统的影响。
-
浮点型常量有两种表示形式:
- 十进制数形式:如:
5.12
、512.0f
、.512
(必须有小数点) - 科学计数法形式:如:
5.12e2
、512E2
、100E-2
- 十进制数形式:如:
-
float:单精度,尾数可以精确到7位有效数字。很多情况下,精度很难满足需求。
-
double:双精度,精度是float的两倍。通常采用此类型。
-
Java的浮点型常量默认为double型,声明float型常量,须后加
f
或F
。 -
通常,定义浮点型变量时,使用double型。
- 整数类型(
-
字符型(
char
)
-
定义char字符类型时,通常加
' '
-
Java当中的所有字符都是使用Unicode编码,所以一个字符可以存储一个字母,一个汉字,或其他书面语的一个字符。
-
三种表现形式:
- 字符常量使用
' '
括起来的单个字符。eg:char c1 = 'a';
- 转义字符使用转义字符
\
将其后面的字符转化为特殊字符型常量。eg:char z1 = '\n';
- Unicode值
eg:char u1 = '\u000a'
- 字符常量使用
-
字符集
字符编码(英语:Character encoding)、字集码是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递。常见的例子包括将拉丁字母表编码成摩斯电码和ASCII。其中,ASCII将字母、数字和其它符号编号,并用7比特的二进制来表示这个整数。通常会额外使用一个扩充的比特,以便于以1个字节的方式存储。
- 布尔型(
boolean
)
- 常常用来判断逻辑条件。
- 只有两个值
true
、false
。(Java不可以是哦那个0或者非0的整数代替true
和false
,这要区别C语言)
-
-
引用数据类型(引用型变量后面会做细致介绍)
-
类(
class
) -
接口(
interface
) -
数组(
[]
)
-
基本数据类型的转换:(前提这里只是讨论七种基本数据类型变量间的运算,不包含boolean类型的。)
- 自动类型提升: 当容量(这里容量的大小指的是数表示的范围的大小)小的数据类型的变量与容量大的数据类型的变量做运算的时候,结果自动提升为容量大的数据类型。(
byte
、short
、char``这三种类型相互运算的时候结果都是int
-->int
-->long
-->float
-->double
)
代码示例:
package exercise.variabletest;
public class VariableTest3 {
public static void main(String[] args) {
byte b1 = 2;
int i1 = 129;
//编译不通过:不可以使用byte接受int类型的变量
//byte b2 = b1 + i1;
int i2 = b1 + i1;
System.out.println(i2);
long l1 = b1 + i1;
System.out.println(l1);
float f = b1 + i1;
System.out.println(f); //131.0
short s1 = 123;
double d1 = s1;
System.out.println(d1); //123.0
//****************************************
char c1 = 'a';
int i3 = 10;
int i4 = c1 + i3; //最小用int接收,只能往大了写
//特别的char、short、byte之间做运算的时候结果是int型变量
short s2 = 10;
int s3 = c1 + s2;
//char c2 = c1 + s2; //编译不通过
byte b2 = 10;
//char c3 = b2 + c1; //编译不通过,结果也是int
}
}
- 强制类型转换: 自动类型提升运算的逆运算
- 强制类型转换需要使用强转符:
()
- 强制类型转换可能导致精度损失。
代码示例:
- 强制类型转换需要使用强转符:
package exercise.variabletest;
public class VariableTest4 {
public static void main(String[] args) {
double d1 = 12.9;
int i1 = (int)d1; //截断操作
System.out.println(i1);
//没有精度损失
long l1 = 123;
short s2 = (short)l1;
//也算是一种精度损失
int i2 = 128;
byte b = (byte)i2;
System.out.println(b); //-128
}
}
一些常见的编码问题:long
型变量在定义的时候,什么时候后面需要加L/l
;float
型变量在定义的时候,什么时候后面需要加F/f
(编程实例)
package exercise.variabletest;
public class VariableTest2 {
public static void main(String[] args) {
//1.编码情况:
long l = 2432123;
System.out.println(l);
//编译失败:过大的整数
//long l1 = 243242343243224;
long l1 = 2434243123124324L;
//***********************
//编译失败,因为浮点数默认为double类型,所以会报错,所以在float类型声明或者定义时,一定要加上f
//float f1 = 12.3;
//2.编码情况2:
//整型常量:默认类型为int型。
//浮点型常量:默认类型为double型。
byte b = 12;
//byte b1 = b + 1;//编译失败
//float f1 = b + 12.3; //编译失败
}
}
2. 字符串类型: String
String
不属于基本数据类型,属于引用数据类型。- 声明
String
类型变量时,使用一对""
。 String
可以和8中基本数据类型做运算,且运算只能是连接运算+
。运算的结果仍然是String
类型。
package exercise.stringtest;
public class StringTest {
public static void main(String[] args) {
String s1 = "Hello World!";
System.out.println(s1);
String s2 = "a";
String s3 = ""; //String可以为空。
//char c = ''; //编译不通过,char型变量不可以为空,有且只能有一个
//*******************
int number = 1001;
String numberStr = "学号:";
String info = numberStr + number; //+连接运算
boolean b1 = true;
String info1 = info + b1;
System.out.println(info1);
}
}
变量在类中声明的位置: 成员变量 vs
局部变量