本篇我们开始进入Java的学习,首先在学习如何编写Java语言前要先了解Java程序的基本结构。
一、Java程序的基本结构
一个Java程序的基本结构大体可以分为包、类、main()主方法、标识符、关键字、语句和注释等,如下:
1 package hello; // 定义包 2 3 public class Structure { // 创建类 4 5 static int num = 1; // 定义类的成员变量 6 7 public static void main(String[] args) { // 定义主方法 8 9 String str = "http://www.cnblogs.com/adamjwh/"; // 定义局部变量 10 11 System.out.println(num); // 输出成员变量的值 12 13 System.out.println(str); // 输出局部变量的值 14 15 } 16 17 }
我们来逐一分析一下每一条语句,过多的概念我就不详述了,只说最基本的。
第一条语句“package hello;”定义了Java程序中类所在的包是hello,hello是一个标识符,由程序员自己定义,package是关键字。注意:标识符和关键字区分大小写。
第二条语句“public class Structure”用于创建一个名为Structure的类,类名由程序员自己定义,其中public及class是关键字,关于public和static的用法会在后续篇章中提到。
第三条语句“static int num = 1;”定义了类的成员变量,static和int都是关键字,而num是一个标识符,由程序员自己定义。
第四条语句“public static void main(String[] args)”是类的主方法,Java程序从这里开始执行,除了可以将“String[] args”改为“String args[]”外,不可改变本条语句的任何部分。
第五条语句“String str = "http://www.cnblogs.com/adamjwh”是在主方法中定义了一个局部变量,String是一个类,用于创建字符串对象(说简单点就是说,如果你想创建一条字符串,就使用String类),str是局部变量的名称,为程序员自己定义的一个标识符,而后面引号中的网址是局部变量str的值,“=”为赋值运算符。
第六条语句“System.out.println(num);”是输出语句,这是输出语句的固定写法,注意区分大小写,输出换行为println,不换行为print。
第七条语句同样为输出语句,执行将输出str的值,即http://www.cnblogs.com/adamjwh。
二、标识符和关键字
那么说了这么多是不是觉得好复杂啊,标识符、关键字都是什么。其实标识符可以简单理解为一个名字,用来标识类名、变量名、方法名、数组名、文件名的有效字符序列。
例如,定义一个变量i并赋值为100,那么我们可以写出如下代码: int i = 100;
这就是一个典型的赋值语句,其中int是定义一个整型数,i就是标识符,由程序员自己起名,但有一定的规则,简单点来说就是由字母、数字、下划线和美元符号组成,第一个字符不能为数字,并且区分大小写,不能为关键字或保留字。
我们可以举几个例子看看,合法标识符如name、user、_u8080、tc_bvt等等,非法标识符如5work、7fix等等。
上面提到的关键字和保留字,是Java语言中已经被赋予特定意义的一组单词,不可作为标识符使用,比如上面代码中的int就是关键字,至于java的关键字有哪些我就不过多的描述了,毕竟网上有很多很详细的介绍,我们还是主要从代码入手。
三、基本数据类型
了解了上面的Java程序的基本结构后是不是对Java有一定的感觉了呢,那么编写程序肯定要用到许许多多数据,那Java中的数据又是如何分类及编写的呢?
在Java中有8种数据类型,其中6种是数值类型,另外两种分别是字符类型和布尔类型,如下:
1 public class Type { 2 3 /* 整数类型 */ 4 byte myByte = 45; // byte型变量,占一个字节,取值范围-128~127 5 short myShort = 100; // short型变量,也即短整型,占两个字节,取值范围-32768~32767 6 int myInt = 450; // int型变量,也即整型,占四个字节,取值范围-2147483648~2147483647 7 long myLong = 45261636L; // long型变量,也即长整型,占八个字节,取值范围-9223372036854775808~9223372036854775807 8 9 /* 浮点类型 */ 10 float myFloat = 15.621F; // 单精度浮点型,占四个字节,结尾必须加'F'或'f',如果不加自动定义为double型变量,取值范围1.4E-45~3.4028235E-38 11 double myDouble = 15.621D; // 双精度浮点型,占八个字节,结尾可以加'D'或'd',也可不加,取值范围4.9E-324~1.7976931348623157E-308 12 13 /* 字符类型 */ 14 char myChar = 'a'; // 字符类型变量,用于存储单个字符,占两个字节,需用单引号括起来 15 16 /* 布尔类型 */ 17 boolean myBoolean = true; // 布尔类型又称逻辑类型,只有true和false两个值,分别代表“真”和“假” 18 }
当我们要定义一个变量的时候,先判断变量的数据类型,再从上方8种类型中选择合适的类型使用即可,定义方法就如上方代码,以“[数据类型] [变量名] = [值]”的形式即可,其中变量名需自起名,满足上面提到的标识符的几个条件。
在字符类型中还有一种特殊的字符,以反斜线“\”开头,后跟一个或多个字符,具有特定的含义,叫做转义字符。
转义字符 | 含义 |
\ddd | 1~3位八进制数据所表示的字符,如\456 |
\dxxxx | 4位十六进制所表示的字符,如\0051 |
\' | 单引号字符 |
\\ | 反斜杠字符 |
\t | 垂直制表符,将光标移到下一个制表符的位置 |
\r | 回车 |
\n | 换行 |
\b | 退格 |
\f | 换页 |
转义字符一般多用于输出,比如“\n”回车换行,“\t”移到下一制表位,如果想要输出单引号、双引号、下划线等字符时,也需要用转义字符进行输出。
四、变量与常量
刚刚我们提到了变量,接下来就说一下什么是变量和常量。在程序执行过程中,其值不能改变的称为常量,其值能改变的称为变量。变量与常量的声明都必须使用合法的标识符,所有变量与常量只有在声明之后才能使用。下面举一个声明变量的例子:
int age; // 声明int型变量 char c = 'J' // 声明char型变量并赋值
既然叫变量那肯定是能改变的,现在我们对变量进行一下改变试试:
1 public class Variable { 2 3 public static void main(String[] args) { 4 int num = 10; // 定义一个变量num,并赋给初值10 5 System.out.println("num的初值为:"+num); // 输出当前变量num的值为10 6 7 num = 100; // 将100赋给num 8 System.out.println("num现在的值为:"+num); // 输出现在变量num的值为100 9 } 10 11 }
上方是一段测试代码,我们首先定义一个变量,起名为num,然后对它赋一个初值10,再对这个变量赋值为100,看两次值的变化,运行结果如下所示:
由此可以看出变量是在运行过程中其值可以改变。
而常量在整个程序中只能被赋值一次,需通过final关键字进行限定,如 final double PI = 3.1415926; ,为定义一个常量,名为PI(圆周率),我们如果单独定义一个变量是“double PI = 3.1415926;”,现在定义一个常量就是在double前加一个final关键字进行限定即可。
看到这里,是不是对Java的声明及定义有一些了解了呢?也许在之前大家也都见到了有些变量前有static这个关键字,它有什么用呢?这里就要说的变量的有效范围了。
变量的有效范围是指程序代码能够访问该变量的区域,若超出变量所在区域访问变量则编译时会出现错误。可分为“成员变量”和“局部变量”。
在类体中定义的变量被称为成员变量,成员变量在整个类中都有效,分为静态变量和实例变量两种。
class var { int x = 45; // 定义实例变量 static int y = 90; // 定义静态变量
}
其中x是实例变量,y是静态变量。如果成员变量的类型前面加上static,就被称为静态变量,静态变量的有效范围可以跨类,甚至可达到整个应用程序之内,也可用“类名.静态变量”的方式在其它类中使用(具体会在今后的篇幅中出现,想了解的可先行查阅资料)。
而在类的方法体中定义的变量(即“{”与“}”之间的声明变量)称之为局部变量。只在当前代码块中有效,简单点来说就是只在其所定义的大括号中有效。下面举一个例子:
1 public class Val { 2 3 static int times = 3; // 定义成员变量times 4 public static void main(String[] args) { 5 int times = 4; // 定义局部变量times 6 7 System.out.println("times的值为:" + times); // 将times输出 8 System.out.println("静态变量times的值为:" + Val.times); // 输出静态变量 9 } 10 11 }
输出结果为:
从这段代码可以看出,首先在main方法外定义了一个成员变量times,并且是一个静态变量,而在main方法内又定义了一个局部变量times。这里有人就会问了,变量名不是不能相同吗?注意,这里第一个times是成员变量,作用范围是针对于整个类而言,而第二个times是局部变量,只在main方法内有效,所以两个重名并不冲突。但如果我们直接输出times,如第一个输出,输出结果为4,是局部变量起了作用,因为当局部变量与成员变量名字相同时,此时成员变量将被隐藏,即这个成员变量在此方法中暂时失效。如果我们想调用成员变量,需要使用“类名.静态变量”调用,如第二个输出,类名为Val,静态变量名为times,用“Val.times”即可调用静态变量的值为3。
五、代码注释
注释可以提高程序的可读性,注释包含的文字不会对程序产生任何影响,在Java中,代码注释主要有以下几种:
1. 单行注释
“//”为单行注释标记,从“//”开始到换行为止的所有内容均被注释而被编译器忽略。
// 这是一条单行注释
2. 多行注释
“/* */”为多行注释标记,符号“/*”与“*/”之间的所有内容均为注释内容,可以换行。
/* 注释内容1 注释内容2 ...... */
在多行注释中可以嵌套单行注释,比如下面的用法是正确的:
/* 名称:博客园 // 时间:2018-1-20 */
但在多行注释中不能嵌套多行注释。
3. 文档注释
“/** */”为文档注释标记。符号“/**”与“*/”之间的内容均为文档注释内容。当文档注释出现在任何声明之前时,会被Javadoc文档工具读取作为Javadoc文档内容。格式与多行注释相同。
1 /** 2 * name: Hello World 3 * time: 2018-1-20 4 * author: Adam 5 **/
下一篇将继续介绍Java语言基础中的运算符及类型转换。