基础篇1.0Java语言基础
Java程序的基本结构
Java程序的基本结构大体可以分为包、类、main()主方法、标识符、关键字、语句和注释等。

第1条语句‘package Mr;’定义了Java程序中类所在的包是Mr,其中Mr是一个标识符,由程序员自己定义;package是定义包的关键字,在Java程序中,要定义包必须使用package关键字。
注意:标识符和关键字是区分大小写的。
第2条语句‘public class Example’是创建类的语句,其中public是Java程序的关键字,这里用于修饰类;class是用于创建类的关键字,class后的Example就是所创建类的名称,该类名为程序员自己定义。
第3条语句‘static int ONE =1;’定义了类的成员变量,其中static是Java程序的关键字,用于修饰成员变量;int也是一个关键字,是Java程序中的整数数据类型,用于定义常量和变量,这里定义的是类的成员变量;ONE是一个标识符,是该类的成员变量, 名称为程序员自己定义,该成员变量的数据类型是整数类型。
第4条语句‘public static void main(String[] args)’是类的主方法,是Java应用程序的入口点,Java程序是从该方法开始执行的,其中main是主方法的名称,程序员不可以更改;public是Java程序的关键字,这里用于修饰主方法;static是Java程序的关键字,这里用于修饰主方法;void也是一个关键字,用于修饰方法,表示方法没有返回值;String也是一个类,用于创建字符串对象,这里用于修饰主方法的形参,在String后面跟上一对方括号表示主方法的形参是一个字符串数组,args是一个标识符,是主方法的形参数组,其数据类型是string类型。
Java语言中,主方法的写法是固定的,除了主方法的形参“String[] args”可以修改为‘String args[]’以外,不可以改变第4条语句中的任何部分,否则Java程序都将无法运行。
第5条语句“String var = ‘hello’;”在主方法内定义了一个局部变量,其中string是一个类,用于创建字符串对象,这里创建了一个局部变量;var是局部变量的名称,是程序员自己定义的一个标识符,“hello”是局部变量var的值,是一个字符串常量;等号“=”是赋值运算符,用于将等号右边的字符串常量赋值给等号左边的变量var,这样变量var的值就是hello了。
注意:在Java程序中,除了字符串中常用的标点符号以外,代码中的所有标点符号必须是半角的或在英文输入法下输入(如逗号、分号、双引号等),否则程序会出错。
第6条语句“system.out.println(ONE);”是一个输出语句,可以在命令行或控制台输出信息,其中“system.out.println();”是输出语句的固定写法,其中system是一个系统类的名称,其第一个字母必须是大写的,out是system类提供的一个标准输出流,println()是标准输出流out提供的方法,用于输出信息;println()方法内部的ONE是输出的内容,这里的ONE是类第一个成员变量,其值是1,所以执行语句输出1.
最后一条语句"system.out.println(var);"是一个输出语句,其含义同第6条语句,这里的var是主方法定义的一个局部变量,其值是“Hello”,所以执行该语句将输出Hello。
标识符和关键字
关键字是Java中一些具有特殊意义的字符,不可以使用关键字对标识符进行命名。
标识符
(概念)标识符可以简单理解为一个名字,用来标识类名、变量名、方法名、数组名、文件名的有效字符序列。
(标识符的命名规则)1.Java语言的标识符字母、数字、下划线和美元符号组成,第一个字符不能是数字。2.Java语言使用Unicode标准字符集,最多可以识别65535个字符。Java语言中的字母可以使Unicode字符集中的任何字符,包括拉丁字母、汉字、日文和其他许多语言的字符。3.标识符不能是Java的关键字和保留字。4.Java语言中标识符是区分大小写的,如果两个标识符的字母相同但是大小写不同,就是不同的标识符。
注意:在程序开发中,可以使用汉字、日文等作为标识符,但是为了避免出错,尽量不要使用,最好连下划线和数字也不要使用,而只用英文进行命名,且首字母用大写字母。
关键字
(概念)关键字是Java语言中已经被赋予特定意义低一些单词,不可以把这些字作为标识符来使用。

注意:在命名表示符中,虽然const和goto不是Java的关键字,但也不可以使用,这两个词可能会在以后的升级版本中得以使用。
基本数据类型
Java中有8种基本数据类型,其中6种是数值类型,另外两种分别是字符类型和布尔类型,而6种数值类型中有4种是整数类型,另外两种是浮点类型。

整数类型
整数类型用来存储整数数值,即没有小数部分的数值,可以使正数、负数,也可以是零。根据所占内存大小的大小不同,可以分为byte、short、int和long4种类型。它们所占内存和取值范围:

1.byte型
使用byte关键字来定义byte型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。byte型是整型中所分配的内存空间最少的,只分配一个字节;取值范围也是最小的,只在-128~127之间,在使用时一定要注意,以免数据溢出产生错误。
(实例)byte x = 48,y = -108,z; //定义byte型变量x/y/z,并赋初值给x/y
2.short型
short型即短整型,使用short关键字定义short型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。系统给short型分配2个字节的内存,取值范围也比byte型大了很多,在-32768~32767之间,虽然取值范围变大,但还是要注意数据溢出。
3.int型
int即整数型,使用int关键字来定义int型变量,可以一次定义多个变量并对其进行赋值,也可以不赋值。int型变量取值范围很大,在-2147483648~2147483647之间,足够一般情况下使用,所以是整型变量中应用最广泛的。
4.long型
long型即长整型,使用long关键字来定义long型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。而在对long型变量赋值时结尾必须加上“L”或者“l”,否则将不被认为是long型。当数值过大,超出int型范围时就使用long型,系统分配给Long型变量8个字节,取值范围则更大。
注意:在定义long型变量时最好在结尾加上“L”,因为“l”非常容易和数字“1”混淆。

浮点类型
浮点类型表示有小数部分的数字。Java语言中,浮点类型分为单精度浮点型(float)和双精度浮(double),他们具有不同的取值范围。

1.float型
(概念)float型即单精度浮点型,使用float关键字来定义float型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。对float型进行赋值时必须在结尾添加“F”或者“f”,如果不加,系统自动将其定义为double型变量。
2.double型
(概念)double型即双精度浮点型,使用double关键字来定义double型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。再给double型赋值时,可以使用“D”或“d”明确表明这是一个double类型的数据,但是可以加也可以不加。
字符类型
(概念)char型即字符类型,使用char关键字进行声明,用于分配单个字符,系统分配两个字节的内存空间。在定义字符型变量时,要用单引号括起来,且单引号中只能有一个字符,多了就不是字符类型了,而是字符串类型,需要用双引号进行声明。

(概念)字符类型中有一种特殊的字符,以反斜线‘\’开头,后跟一个或多个字符,具有特定的含义,不同于字符原有的意义,叫做转义字符。例如,(举例)‘\n’就是一个转义字符,意思是‘回车换行’。


注意:转义字符本身也是字符,所以将转义字符赋值给字符变量时,与其他字符常量值一样需要使用单引号。
布尔类型
(概念)布尔类型又成为逻辑类型,只有true和false两个值,分别表示布尔逻辑中的“真”和“假”。使用boolean关键字声明布尔类型变量,通常被用在流程控制中作为判断条件。
变量与常量
(概念)在程序执行过程中,其值不能改变的量称为常量,其值能改变的量称为变量。变量与常量的声明都必须使用合法的标识符,所有常量与变量只有在声明之后才能使用。
1.声明变量
(概念)定义一个变量,就是要告诉编译器(compiler)这个变量属于那种数据类型,这样编译器才知道需要分配多少空间,以及能存放什么样的数据。(用法)变量都有一个变量名,变量名必须是合法的标识符,内存空间内的值就是变量值。在声明变量时可以不给予赋值,也可以直接付给初值。

由图可知,系统的内存可大致分为3个区域,即系统区(OS)、程序区(program)和数据区(data)。当程序执行时,程序代码会加载到内存中的程序区,数据暂时存储在数据区中。
Java中变量的命名规则如下:
1)变量名必须是一个有效的标识符。变量名必须使用Java语言中合法的标识符,即以字母、数字和下划线组成,且首字母不能是数字,还不可以使用Java中的关键字。
2)变量名不能重复。如果两个变量具有同样的变量名,系统在对其进行使用时,就不知道调用哪个变量,运行结果就会出现错误。
3)应选择有意义的单词作为变量名。在命名变量时,最好能通过变量名看出变量的内容,这样既方便读者对程序的理解,增加可读性,又方便程序的维护。
注意:在Java语言中语序使用汉字或其他语言文字作为变量名,如Int 年龄= 21,在程序运行时也不会出错,但建议读者尽量不要使用这些语言文字作为变量名。
2.声明常量
(概念)常量名通常使用大写字母,但这并不是必需的,很多Java程序员使用大写字母表示常量,常常是为了清楚地表明正在使用常量。
说明:当定义的常量如果属于“成员变量”,则必须在定义时就赋给初值,否则将会在编译时出错。
3.变量的有效范围
(概念)变量的有效范围是指程序代码能够访问该变量的区域,若长处变量所在区域访问变量则编译时会出现错误。在程序中,一般会根据变量能够访问的区域将变量分为“成员变量”和“局部变量”。
1)成员变量
(概念)在类体中定义的变量称为成员变量,成员变量在整个类中都有效。类的成员变量又可以分为静态变量和实例变量两种。
(实例)
其中,x为动态变量,y为静态变量(也称为类变量)。如果成员变量的类型前面加上关键字static,这样的成员变量称为静态变量。静态变量的有效范围可以跨类,甚至可达到整个应用程序之内。对于静态变量,除了能在定义它的类内存取,还能直接以“类名.静态变量”的方式在其他类内使用。
2.局部变量
在类的方法体中定义的变量(方法内部定义,“{”与“}”之间的代码中声明的变量)称之为局部变量。局部变量只在当前代码块中有效,通俗地理解就是在其所定义的大括号内有效,出了这个大括号就没有效了,在其他类体中不能调用该变量。
局部变量的声明周期取决于方法,当方法被调用时,Java虚拟机为方法中的局部变量分配内存空间,当该方法的调用结束后,则会释放方法中局部变量占用的内存空间,局部变量也随即销毁。
注意:局部变量可与成员变量的名字相同,此时变量将隐藏。即这个成员变量在此方法中暂时失效。如果想要调用成员变量,需要使用“类名.静态变量”调用。
成员变量和局部变量都有自己的有效范围,
运算符
(概念)运算符是一些特殊的符号,主要用于数学函数、一些类型的赋值语句和逻辑比较方面。
赋值运算符
(概念)赋值运算符即“=”,是一个二元运算符(即对两个操作数进行处理),其功能是将右方操作数所含的值赋值给左方的操作数。语法格式为:变量类型 变量名 = 所赋的值;
左方必须是一个变量,而右边所赋的值可以是任何数值或表达式,包括变量、常量或表达式。
说明:在Java中可以将赋值运算符连在一起使用,例如:x=y=z=5;在这个语句中,变量x,y,z得到同样的值5.赋值运算符使用的顺序是先将a+4赋值给b,再将b的值赋值给C,从右向左运算。不过,程序开发中不建议使用这种赋值语法。
算术运算符
Java中的算术运算符主要有+(加号)、-(减号)、*(乘号)、/(除号)和%(求余),他们都是二元运算符。Java中算术运算符的功能及使用方式如表所示:

其中“+”和“-”运算符还可以作为数据的正负符号。如+5、-7。
注意:除法运算时,0作为除数时会报错:Arithmetic EXception.
自增和自减运算符
(概念)自增、自减运算符是单目运算符,可以放在操作元之前,也可以放在操作元之后。操作元必须是一个整型或者浮点型变量。放在操作元前面的自增、自减运算符,会先将变量的值加1(减1),然后再使该变量参与表达式的运算;放在操作元之后的自增、自减运算符,会先使变量参与表达式的运算,然后再将该变量加1(减1)。
比较运算符
(概念)比较运算符属于二元运算符,用于程序中的变量和变量之间、变量和常量之间以及其他类型的信息之间的比较。比较运算符的运算结果是Boolean型,当运算符对应的关系成立时,运算结果是true,否则结果是false。比较运算符通常用在条件语句中来作为判断的依据。

逻辑运算符
包括&&[&](逻辑与)、||(|)逻辑或和!(逻辑非),返回值为布尔类型的表达式,操作元也必须是Boolean型数据。与比较运算符相比,逻辑运算符可以表示更加复杂的条件,如连接几个关系表达式进行判断。在逻辑运算符中,除了“!是一元运算符之外,其余的都是二元运算符,其用法和含义如表:

用逻辑运算符进行逻辑判断时,不同的逻辑运算符与不同的操作元进行操作时,运行结果也不相同,运行结果如表:

注意:在Java中,逻辑运算符“&&”与“&”都表示“逻辑与”,那么他们之间的区别在哪里呢?从表中可以看出,当两个表达式都为true时,逻辑与的结果才会是true。使用逻辑运算符“&”会判断两个表达式;而逻辑运算符“&&”则是针对boolean类型进行判断,当第一个表达式为false时则不会去判断第二个表达式,直接输出结果。使用“&&”可节省计算机判断的次数。通常将这种在逻辑表达式中从左端的表达式可推断出整个表达式的值称为“短路”,而那些始终执行逻辑运算符两边的表达式称为“非短路”。“&&”属于“短路”运算符,而“&”则属于“非短路”运算符。“||”和“|”也是如此。
位运算符
位运算符用于对整型和字符型的操作数,对其内存进行操作,数据在内存中以二进制的形式表示。例如,int型变量7的二进制表示是000000000000000000000000000000000111,-8的二进制表示是11111111111111111111111111111000,最高位是符号位,0表示正数,1表示负数。
java语言提供的位运算符如表:

1)“按位与”运算
“按位与”运算的运算符为“&”,是双目运算符。其运算的法则是:如果两个操作数对应位都是1,则结果位才是1,否则为0。如果两个操作数的精度不同,则结果的精度与精度高的操作数相同,如图所示。

2)“按位或”运算
“按位或”运算的运算符为“|”,是双目运算符。其运算法则是:如果两个操作数对应位都是0,则结果位才是0,否则为1。如果两个操作数的精度不同,则结果的精度与精度最高的操作数相同。如图所示:

3)“按位非”运算
“按位非”运算也称“按位取反”运算,运算符为“~”,是单目运算符。其运算法则是:将操作数二进制中的1全部修改为0,0全部修改为1,如果所示:

4)“按位异或”运算
“按位异或”运算的运算符是“^”,是双目运算符。其运算法则是:当两个操作数的二进制表示相同(同时为0或同时为1)时,结果位0,否则为1.若两个操作数的精度不同,则结果数的精度与精度高的操作数相同。

5)移位运算符
Java语言中的移位运算符有3种,其操作的数据类型只有byte、short、char、int和long5种。
左移运算符“<<”。所谓左移运算符,就是将左边的操作数在内存中二进制数据左移右边操作数指定的位数,右边移空的部分补0.
右移运算符“>>”,右移则复杂一些,当使用“>>”符号时,如果最高位是0,左移空的位就填入0;如果最高位是1,右移空的位就填入1,使用方法与左移类似。
无符号右移运算符“>>>”。Java还提供了无符号右移运算符“>>>”,不管最高位是0还是1,左移空的高位都填入0.
注意:移位能让用户实现整数除以或乘以2的n次方的效果。例如y<<2与y*4的结果相同;y>>1的结果与y/2的结果相同。总之,一个数左移n位,就是将这个数乘以2的n次方;一个数右移n位,就是将这个数除以2的n次方。
三元运算符
三元运算符是Java中唯一一个三目运算符,其操作元有3个,第一个是条件表达式,其余的是两个值,条件表达式成立时运算取第一个值,不成立时取第二个值。
三元运算符用于判断,等价于if……else语句
当表达式“20<45"的运算结果返回真时,则Boolean型变量a取值false,此例的结果是true。
运算符优先级
Java中的表达式就是使用运算符连接起来的符合Java规则的式子,运算符的优先级决定了表达式中运算执行的先后顺序。各运算符的优先级由高到底如图所示:


类型转换
类型转换时将变量从一种类型更改为另一种类型的过程。例如,可以将string类型数据456转换为一个int整型变量456。Java对数据类型的转换有严格规定,数据从占用存储空间较小的类型转换为占用存储空间较大的数据类型时,则自动类型转换(隐式类型转换);反之则必须做强制类型转换(显式类型转换)。
自动类型转换
Java中8种基本类型可以进行混合运算,不同类型的数据在运算过程中首先会自动转换为同一类型,再进行计算。数据类型根据占用存储空间的大小分为高低不同的级别,占用空间小的级别低,占用空间大的级别高,自动类型转换遵循低级到高级转换的规则。
自动类型转换要遵循一定的规则,那么在运算时类型间将怎样转换,规则如下:

强制类型转换
(概念)当把高精度的变量的值赋给低精度的变量时,必须使用显示类型转换运算(又称强制类型转换)。语法格式如下:(类型名)要转换的值
当把整数赋值给一个byte、short、int、long型变量时,不可超出这些变量的取值范围,否则就会发生数据溢出。

此时就造成了数据丢失,所以在使用强制类型转换时,一定要加倍小心,不要超出变量取值范围,否则就得不到想要的结果。
注意:boolean型的值不能被转换为其他类型数据,反之亦然。
代码注释和编码规范
代码注释
通过在程序代码中添加注释可以提高程序的可读性,注释中包含了程序的信息。在Java源程序文件的任意位置都可添加注释语句,注释中的文字Java编译器并不会编译。所有代码中的注释文字并不对程序产生影响。Java语言提供了3种添加注释的方法,分别为单行注释、多行注释和文档注释。
1)单行注释
“//”为单行注释标记,从符合“//”开始直到换行为止的所有内容均作为注释而被编译器忽略。语法格式:
//注释内容
2)多行注释
“/**/”为多行注释标记,符号“/*”与“*/”之间的所有内容均为注释内容。语法格式:
/*
注释内容1
注释内容2
*/
3)文档注释
“/** */”为文档注释标记。符号“/**”与“*/”之间的内容均为文档注释内容。当文档注释出现在任何声明(如类的声明、类的成员变量的声明、类的成员方法的声明等)之前时,会被javadoc文档工具读取作为Javadoc文档内容。文档注释的格式与多行注释的格式相同。
注意:一定要养成良好的编码风格。软件编码规范中提到“可读性第一,效率第二”,所以必须在程序中添加适量的注释来提高程序的可读性和可维护性。
编码规范
总结的编码规范如下:
1)每条语句都要单独占一行。虽然Java语言中可以在一行当中写几条语句,但为了程序看起来更加规范,且便于维护,要养成每行只写一条语句的好的编码规范。
2)每条命令都要以分号结束。语句要以分号结尾,程序代码中的分号必须为英文状态下的,如果写错会报错:illegal character(非法字符错误)
3)声明变量时要分行声明。即使是相同的数据类型也要将其放置在单独的一行上,这样有助于注释。
4)Java语句中多个空格看成一个。在Java代码中,关键字和关键字间如果有多个空格,这些空格均被视作一个。
5)不要使用技术性很高、难懂、易混淆判断的语句。为了程序日后的维护方便,应尽量使用简单的技术完成程序需要的功能。
6)对于关键的方法要多加注释。多加注释会增加程序的可读性,有助于阅读者很快地了解代码结构。
本章小结
需要掌握的是Java语言的基本数据类型、变量与常量以及运算符等三大知识点。Java语言的基本数据类型中没有string类型。另外,对数据类型之间的转换也要有一定的了解。在使用变量时,需要注意变量的有效范围,否则在使用时会出现编译错误或浪费内存资源。Java中各种运算符也是Java基础中的重点,正确使用这些运算符,才能得到预期结果。
浙公网安备 33010602011771号