每一种编程语言都有一套自己的语法规则,Java语言也不例外,编写Java程序也需要遵从一定的语法规则,如代码的书写、标识符的定义、关键字的使用等。本节将对Java语言的基本语法进行详细讲解。
Java程序代码必须放在一个类中,初学者可以简单地把一个类理解为一个Java程序。类使用class关键字定义,在class前面可以有类的修饰符,类的定义格式如下:
修饰符 class 类名{ 程序代码 }
在编写Java程序时,有以下几点需要注意。
(1)Java程序代码可分为结构定义语句和功能执行语句,其中,结构定义语句用于声明一个类或方法,功能执行语句用于实现具体的功能。每条功能执行语句的最后必须用分号(;)结束。如下面的语句所示:
System.out.println("这是第一个Java程序!");
需要注意的是,在程序中不要将英文的分号(;)误写成中文的分号(;),如果写成中文的分号,编译器会报告 “illegal character”(非法字符)错误信息。
(2)Java语言是严格区分大小写的。在定义类时,不能将class写成Class,否则编译器会报错。程序中定义一个computer的同时,还可以定义一个Computer,computer和Computer是两个完全不同的符号,在使用时务必注意。
(3)在编写Java程序时,为了便于阅读,通常会使用一种良好的格式进行排版,但这并不是必须的,也可以在两个单词或符号之间插入空格、制表符、换行符等任意的空白字符。例如,下面这段代码的编排方式也是可以的。
public class HelloWorld {public static void main(String [ ] args){System.out.println("这是第一个Java程序!");}}
虽然Java没有严格要求用什么样的格式编排程序代码,但是,考虑到可读性,编写的程序应代码整齐美观、层次清晰。常用的编排方式是一行只写一条语句,符号“{”与语句同行,符号“}”独占一行,示例代码如下:
public class HelloWorld { public static void main(String[] args){ System.out.println("这是第一个Java程序!"); } }
(4)Java程序中一个连续的字符串不能分成两行书写。例如,下面这条语句在编译时将会报错。
System.out.println("这是第一个 Java程序!");
为了便于阅读,需要将一个比较长的字符串分两行书写,可以先将字符串分成两个短的字符串,然后用加号(+)将这两个字符串连起来,在加号(+)处换行。例如,可以将上面的语句修改成如下形式:
System.out.println("这是第一个" + "Java 程序!");
在编写程序时,为了使代码易于理解,通常会在编写代码时为代码添加一些注释。注释是对程序的某个功能或者某行代码的解释说明,它只在Java源文件中有效,在编译程序时编译器会忽略这些注释信息,不会将其编译到class字节码文件中。
Java中的注释有以下3种类型。
1. 单行注释
单行注释用于对程序中的某一行代码进行解释,一般用来注释局部变量。单行注释用符号“//”表示,“//”后面为被注释的内容,具体示例如下:
int c = 10; // 定义一个整型变量
2. 多行注释
多行注释就是注释的内容可以为多行,它以符号“/*”开头,以符号“*/”结尾。多行注释具体示例如下:
/* int c = 10; int x = 5; */
3. 文档注释
文档注释是以“/**”开头,并在注释内容末尾以“*/”结束。文档注释是对一段代码概括性的解释说明,可以使用javadoc命令将文档注释提取出来生成帮助文档。文档注释具体示例如下:
/** name = "黑马程序员"; */
在编程过程中,经常需要在程序中定义一些符号标记一些名称,如包名、类名、方法名、参数名、变量名等,这些符号称为标识符。标识符可以由字母、数字、下画线(_)和美元符号($)组成,但标识符不能以数字开头,不能是Java中的关键字。
下面的标识符都是合法的。
username username123 user_name userName $username
而下面的标识符都是不合法的。
123username class 98.3 Hello World
Java程序中定义的标识符必须严格遵守上面列出的规则,否则程序在编译时会报错。除了上面列出的规则外,为了增强代码的可读性,建议初学者在定义标识符时还应该遵循以下规则。
(1)包名的所有字母一律小写,如cn.itcast.test。
(2)类名和接口名每个单词的首字母都要大写,如ArrayList、Iterator。
(3)常量名的所有字母都要大写,单词之间用下画线连接,如DAY_OF_MONTH。
(4)变量名和方法名的第一个单词首字母小写,从第二个单词开始每个单词首字母大写,如lineNumber、getLineNumber。
(5)在程序中,应该尽量使用有意义的英文单词定义标识符,以便于阅读。例如,使用userName定义用户名,使用password定义密码。
关键字是编程语言里事先定义好并赋予了特殊含义的单词。与其他语言一样,Java中预留了许多关键字,如class、public等。下面列举了Java中所有的关键字。
每个关键字都有特殊的作用,例如,package关键字用于声明包,import关键字用于引入包,class关键字用于声明类。本书后面的章节将逐步对其他关键字进行讲解,这里没有必要记住所有的关键字,只需要了解即可。
编写Java程序时,需要注意以下几点。
(1)所有的关键字都是小写的。
(2)不能使用关键字命名标识符。
(3)const和goto是保留字关键字,虽然在Java中还没有任何意义,但在程序中不能用来作为自定义的标识符。
(4)true、false和null虽然不属于关键字,但它们具有特殊的意义,也不能作为标识符使用。
常量就是在程序中固定不变的值,是不能改变的数据。例如,数字1、字符'a'、浮点数3.2等都是常量。在Java中,常量包括整型常量、浮点数常量、字符常量、字符串常量、布尔常量和null常量。
1.整型常量
整型常量是整数类型的数据,有二进制、八进制、十进制和十六进制4种表示形式,具体如下。
•二进制:由数字0和1组成的数字序列。从JDK 7开始,允许使用字面值表示二进制数,前面要以0b或0B开头,目的是与十进制进行区分,如0b01101100、0B10110101。
•八进制:以0开头并且其后由0~7范围内(包括0和7)的整数组成的数字序列,如0342。
•十进制:由数字0~9范围内(包括0和9)的整数组成的数字序列,如198。
•十六进制:以0x或者0X开头并且其后由0~9、A~F(包括0和9、A和F,字母不区分大小写)组成的数字序列,如0x25AF。
需要注意的是,在程序中为了标明不同的进制,数据都有特定的标识,八进制必须以0开头,如0711、0123;十六进制必须以0x或0X开头,如0xaf3、0Xff;整数以十进制表示时,第一位不能是0。例如,十进制的127,用二进制表示为0b1111111或者0B1111111,用八进制表示为0177,用十六进制表示为0x7F或者0X7F。
2.浮点数常量
浮点数常量就是在数学中的小数,浮点数分为单精度浮点数(float)和双精度浮点数(double)两种类型。其中,单精度浮点数后面以F或f结尾,而双精度浮点数则以D或d结尾。当然,在使用浮点数时也可以在结尾处不加任何后缀,此时JVM会默认浮点数为double类型的浮点数。浮点数常量还可以通过指数形式表示。
浮点数常量具体示例如下:
2e3f 3.6d 0f 3.84d 5.022e+23f
3.字符常量
字符常量用于表示一个字符,一个字符常量要用一对英文半角格式的单引号(' ')括起来。字符常量可以是英文字母、数字、标点符号和由转义序列表示的特殊字符。具体示例如下:
'a' '1' '&' '\r' '\u0000'
上面的示例中,'\u0000'表示一个空白字符,即在单引号之间没有任何字符。之所以能这样表示,是因为Java采用的是Unicode字符集,Unicode字符以\u开头,空白字符在Unicode码表中对应的值为'\u0000'。
4.字符串常量
字符串常量用于表示一串连续的字符,一个字符串常量要用一对英文半角格式的双引号(" ")括起来,具体示例如下:
"HelloWorld" "123" "Welcome \n XXX" ""
一个字符串可以包含一个字符或多个字符,也可以不包含任何字符,即长度为零。
5.布尔常量
布尔常量即布尔型的值,用于区分事物的真与假。布尔常量有true和false两个值。
6.null常量
null常量只有一个值null,表示对象的引用为空。关于null常量将会在第3章中详细介绍。
多学一招:十进制和二进制之间的数值转换
通过前面的介绍可知,整型常量可以分别用二进制、八进制、十进制和十六进制数表示,不同的进制并不影响数据本身,同一个整型常量可以在不同进制之间转换。下面介绍较为常用的两种进制之间相互转换的方式,具体如下。
1.十进制转二进制
十进制转换成二进制就是一个除以2取余数的过程。把要转换的数除以2,得到商和余数,将商继续除以2,直到商为0。最后将所有余数倒序排列,得到的数就是转换结果。
以十进制的6转换为二进制数为例进行说明,转换过程如图2-1所示。
图2-1 十进制转二进制
十进制数据6三次除以2得到的余数依次是0、1、1,将所有余数倒序排列是110,所以十进制的6转换成二进制数,结果是110。
2.二进制转十进制
二进制转换成十进制数要从右到左用二进制位上的每个数乘以2的相应次方。例如,将最右边第一位的数乘以2的0次方,第二位的数乘以2的1次方,第n位的数乘以2的n-1次方,然后把所有相乘后的结果相加,得到的结果就是转换后的十进制数。例如,把二进制数0110 0100转换为十进制,转换方式如下:
0×2 0 +0×2 1 +1×2 2 +0×2 3 +0×2 4 +1×2 5 +1×2 6 +0×2 7 = 100
由于0乘以任意数都是0,因此上述表达式也可以简写为
1×2 2 +1×2 5 +1×2 6 = 100
得到的结果100就是二进制数0110 0100转换后的十进制数。