标识符与数据类型
Java基本语法
语句、语句块
Java中以分号来作为语句的分隔符号,一个大括号包括的语句为一个语句块,程序中允许出现任意数量的空格。
注释
- // 行内注释,表示从该符号开始到该行结束全是注释内容;
- /* */ 多行注释,表示这两个符号之间的所有语句全是注释内容;
- /** */ 文档注释,表示这两个符号之间的文本将自动包含在用javadoc命令生成的HTML格式的文档中。
标识符
标识符定义规则
- 以字母、"_"、"$"开始,且必须为字符序列;
- 数字不能作为标识符的第一个字符;
- 标识符不能是Java语言的关键字,但可用关键字作为标识符的一部分;
- 大小写敏感,长度也没有限定。
Java与C语言不同的是它不采用计算机系统通常采用的ASCII代码集而是采用Unicode。这种字符集中每一个字母都用十六位表示,整个字符集中包含65536个字符,除了A到Z、a到z和数字0到9之外还涵盖了多国语言中的符号。
标识符风格约定
- 对于变量名和方法名,不用"_“和”$"作标识符的第一个字符,因为这两个字符对于内部的方法具有特殊含义;
- 类名、接口名、变量名和方法名采用大小写混合的形式,每个单词的首字母大写,其余字母小写。但变量名和方法名的第一个单词小写(例如anyVariableWord);而类名和接口名则是第一个单词首字母大写(例如HelloWorld);
- 常量名完全大写并且用下划线作为标识符中各个单词的分隔符,例如MAXIMUM_SIZE;
- 方法名用动词,类名和接口名用名词;
- 变量名应该能表示一定的含义,尽量不使用单个字符作为变量名。但一些临时变量如循环控制变量可以采用i、j、k等。
关键字
关键字 | 含义 |
---|---|
abstract | 表明类或者成员方法具有抽象属性 |
assert | 断言,用来进行程序调试 |
boolean | 基本数据类型之一,声明布尔类型的关键字 |
break | 提前跳出一个块 |
byte | 基本数据类型之一,字节类型 |
case | 用在switch语句之中,表示其中的一个分支 |
catch | 用在异常处理中,用来捕捉异常 |
char | 基本数据类型之一,字符类型 |
class | 声明一个类 |
const | 保留关键字,没有具体含义 |
continue | 回到一个块的开始处 |
default | 默认,例如,用在switch语句中,表明一个默认的分支。Java8 中也作用于声明接口函数的默认实现 |
do | 用在do-while循环结构中 |
double | 基本数据类型之一,双精度浮点数类型 |
else | 用在条件语句中,表明当条件不成立时的分支 |
enum | 枚举 |
extends | 表明一个类型是另一个类型的子类型。对于类,可以是另一个类或者抽象类;对于接口,可以是另一个接口 |
final | 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量 |
finally | 用于处理异常情况,用来声明一个基本肯定会被执行到的语句块 |
float | 基本数据类型之一,单精度浮点数类型 |
for | 一种循环结构的引导词 |
goto | 保留关键字,没有具体含义 |
if | 条件语句的引导词 |
implements | 表明一个类实现了给定的接口 |
import | 表明要访问指定的类或包 |
instanceof | 用来测试一个对象是否是指定类型的实例对象 |
int | 基本数据类型之一,整数类型 |
interface | 接口 |
long | 基本数据类型之一,长整数类型 |
native | 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的 |
new | 用来创建新实例对象 |
package | 包 |
private | 一种访问控制方式:私用模式 |
protected | 一种访问控制方式:保护模式 |
public | 一种访问控制方式:共用模式 |
return | 从成员方法中返回数据 |
short | 基本数据类型之一,短整数类型 |
static | 表明具有静态属性 |
strictfp | 用来声明FP_strict(单精度或双精度浮点数)表达式遵循[IEEE 754]算术规范 |
super | 表明当前对象的父类型的引用或者父类型的构造方法 |
switch | 分支语句结构的引导词 |
synchronized | 表明一段代码需要同步执行 |
this | 指向当前实例对象的引用 |
throw | 抛出一个异常 |
throws | 声明在当前定义的成员方法中所有需要抛出的异常 |
transient | 声明不用序列化的成员域 |
try | 尝试一个可能抛出异常的程序块 |
void | 声明当前成员方法没有返回值 |
volatile | 表明两个或者多个变量必须同步地发生变化 |
while | 用在循环结构中 |
基本数据类型
逻辑型:boolean
boolean类型的变量有两种取值:true和false。其在机器中只占一位。boolean类型的变量默认初始值为false。定义语句:boolean truth = true;
。
与其他高级语言不同,Java中的布尔值不能和0、1相互转换,即false和true在Java里面并不对应任何零或非零的整数值。
文本型:char和String
char
char是一个16位的Unicode字符,用单引号表示。默认初始值是\u0000。与C语言一样,一些控制字符需要利用转义序列来表示。
常见转义字符:
转义字符 | 意义 | ASCII码值(十进制) |
---|---|---|
\a | 响铃(BEL) | 007 |
\b | 退格(BS) ,将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下页开头 | 012 |
\n | 换行(LF),将当前位置移到下一行开头 | 010 |
\r | 回车(CR),将当前位置移到本行开头 | 013 |
\t | 水平制表(HT) (跳到下一个TAB位置) | 009 |
\v | 垂直制表(VT) | 011 |
\\ | 代表一个反斜线字符 | 092 |
\’ | 代表一个单引号(撇号)字符 | 039 |
\"" | 代表一个双引号字符 | 034 |
\0 | 空字符(NULL) | 000 |
\ddd | 1到3位八进制数所代表的任意字符 | 三位八进制 |
\xhh | 1到2位十六进制所代表的任意字符 | 二位十六进制 |
char类型到int类型的转换:
public class CharToInt {
public static void main(String[] args) {
int intResult,intVar = 10;
char charVar = '语';
intResult = intVar + charVar;
System.out.println("The char is: " + charVar);
System.out.println("The char's Unicode is: \\u" + Integer.toHexString(charVar));
System.out.println("The int value corresponding to the char is: "
+ new Integer(charVar).toString());
System.out.println("Int " + intVar + " adds the char, the result is : " + intResult);
}
}
/*
结果:
The char is: 语
The char's Unicode is: \u8bed
The int value corresponding to the char is: 35821
Int 10 adds the char, the result is : 35831
*/
String
String不是一个变量类型而是一个类。字符串在Java中是一个对象,可以用String和StringBuffer这两个类来表达,前者表示的字符串不能够修改,而后者可以。此外,与C不同,Java中字符串不以’\0’为结束符。定义字符串时要用双引号,例如String name = "Rick";
和StringBuffer simpleGreet = "How are you?";
。
整形:byte、short、int和long
这四种整数类型的区别主要在于长度,也就是能够表达的数字的范围有区别,从他们长度的位数可以推知他们所能够表达的数字范围:byte 8位、short 16位、int 32位、long 64位。(char 16位)
所有整型变量的默认初始值都是0,默认类型是int。
如果一个数超出计算机的表达范围,这种现象称为溢出,超出最大值称为上溢,超出最小值称为下溢。最大值+1后产生上溢变成同类型的最小值,最小值-1后产生下溢变成同类型的最大值。
整形常量可以有3种形式:十进制、八进制和十六进制。int类型:八进制表示以整数0为前导;十六进制表示以0X或0x为前导。long类型:八进制和十六进制都是在int的同种表达方式后面加大写或小写(建议用大写)的L作后缀。
浮点型:double和float
float 32位,double 64位。
浮点型变量的初始默认值是0.0,默认类型是double,而且在运算过程中不会因为溢出而导致异常处理,上溢时结果为正负无穷大,下溢时结果为0.0,如果出现数学上无定义的值就表示为NaN(如除数为零时的除法结果)。
浮点型常量还可以用科学计数法来表示用E或e,如6.02E23。还可以用F或f来表示float类型的常量,用D或d来表示double类型的常量,如3.14e5F,6.02E23d。
基本数据类型的声明与赋值:
public class Basic{
public static void main(String[] args) {
int x,y;
float z = 3.414f;
double w = 3.1415;
boolean truth = true;
char c;
String str;
String str1 = "bye";
c = 'A';
str = "Hi out there";
x = 6;
y = 10000;
System.out.println("x = " + x);
System.out.println("y = " + y);
System.out.println("z = " + z);
System.out.println("w = " + w);
System.out.println("truth = " + truth);
System.out.println("c = " + c);
System.out.println("str = " + str);
System.out.println("str1 = " + str1);
}
}
/*
结果:
x = 6
y = 10000
z = 3.414
w = 3.1415
truth = true
c = A
str = Hi out there
str1 = bye
*/
复合数据类型
用class
创建一个复合数据类型。
public class MyDate{
public static void main(String[] args) {
class OwnDate{
int day;
int month;
int year;
}
OwnDate a;
a = new OwnDate(); //实例化,开辟数据空间
a.day = 5;
a.month = 2;
a.year = 2020;
System.out.println(a.year + "." + a.month +"." + a.day);
}
}
/*
结果:
2020.2.5
*/
基本类型变量和引用类型变量
基本类型变量:包含了值,值的长度和格式符合变量所属数据类型的要求。
引用类型变量:变量值是指向内存空间的引用(地址),所指向的内存中保存着一个值或一组值。在其他语言中引用也叫作指针或内存地址。但是Java不支持显式使用内存地址,而必须通过变量名对某个内存地址进行访问。
Java中基本类型变量声明时系统自动给该变量分配空间,因此基本变量的声明就很简单,声明完就可以直接使用。而引用类型变量在声明时只是给该变量分配了引用空间,数据空间并未分配,因此引用类型变量在声明后不能直接使用,还要给其分配数据空间(将类实例化)。引用型变量之间的赋值也是引用型赋值(直接将两个变量的引用指向同一地址)。
声明引用型变量的例子如下(部分代码)。
//错误方法:
class MyDate{
int day;
int month;
int year;
}
MyDate a;
a.day = 5; //错误!数据空间未分配就直接使用。
//正确方法:
class MyDate{
int day;
int month;
int year;
}
MyDate a;
a = new MyDate(); //分配数据空间。
a.day = 5;