java教程之Java编程基础
Java语言由语法规则和类库两部分组成,其中语法规则确定了Java程序的书写规范,学习好语法规则是Java语言,也是所有编程语言的基本功。本文主要向大家简单介绍一下Java的语法规则。 Java语言与C/C++语言有着紧密的联系,Java中的许多术语来自于C++,起语法也来自于C++。因此Java的语法和c++的语法计划一模一样。下面简单介绍一下Java的具体语法。
一、Java的词法
1、标识符
标识符是类、变量和方法等的名字,作用是让编译器能够识别它们。在Java语言中,标识符可以包含数字、字母、下划线(_)和美圆符号($),但是不能以数字作为开头。与C/C++语言不同的是,Java语言还可以将一些非拉丁字母包含在标识符中,这是因为Java语言使用的是Unicode字符,所有的十六进制00C0以上的Unicode字符都可以用在标识符中。但是Java语言的关键字是不能用来作为标识符的。
我们在使用标识符的时候应该尽量表达所要表示的类、变量、方法等的含义。另外,标识符中可以使用下划线,我们应该充分利用这一点以提高程序的可读性。
2、关键字
以下是Java的全部关键字:
abstract double int strictfp** boolean else interface super break extends long switch byte final native synchronized case finally new this catch float package throw char for private throws class goto* protected transient const* if public try continue implements return void default import short volatile do instanceof static while * 尚未使用的关键字 ** 为Java 2增加的关键字
3、注释
Java有三种形式的注释:
第一种是C语言的传统注释方式,即将“/*”和“*/”之间的文本都视为注释,这种注释可以跨越多行。
第二种是C++风格的注释,即将“//”之后直到行尾的文本都视为注释,这种注释只能包含一行。
第三种是Java新增加的注释方式,即将“/**”和“*/”之间的文本都视为注释,这种注释也可以夸耀多行。注意,这种注释方式生成的注释将作为Javadoc文档保存。
二、操作符
1、算术操作符
操作符 | 用途 | 优先级 | 结合性 |
++,-- | 自动递增,自动递减 | 2(仅次于括号) | 从右到左 |
+,- | 一元加,一元减 | 2 | 从右到左 |
*,/ | 乘,除 | 3 | 从左到右 |
% | 取余(求模) | 3 | 从左到右 |
+,- | 加,减 | 4 | 从左到右 |
2、布尔运算与关系运算符
操作符 | 用途 | 优先级 | 结合性 |
>,<,>=,<= | 测试相对大小 | 6 | 从左到右 |
== | 测试相等性 | 7 | 从左到右 |
!= | 测试不等性 | 7 | 从左到右 |
?: | 根据第一个操作数返回后两个操作数之一 | 13 | 从左到右 |
! | 非 | 2 | 从右到左 |
& | 布尔与 | 8 | 从左到右 |
^ | 异或 | 9 | 从左到右 |
| | 布尔或 | 10 | 从左到右 |
&& | 条件与 | 11 | 从左到右 |
|| | 条件或 | 12 | 从左到右 |
3、位操作符
操作符 | 用途 | 优先级 | 结合性 |
~ | 非(位求补) | 2 | 从右到左 |
<<,>> | 左移,右移 | 5 | 从左到右 |
>>> | 当作无符号右移 | 5 | 从左到右 |
& | 位和 | 8 | 从左到右 |
^ | 位异或 | 9 | 从左到右 |
| | 位或 | 10 | 从左到右 |
4、赋值操作符
操作符 | 用途 | 优先级 | 结合性 |
= | 赋值 | 14 | 从右到左 |
*= | 操作同时赋值 | 14 | 从右到左 |
/= | 操作同时赋值 | 14 | 从右到左 |
%= | 操作同时赋值 | 14 | 从右到左 |
-= | 操作同时赋值 | 14 | 从右到左 |
+= | 操作同时赋值 | 14 | 从右到左 |
>>= | 操作同时赋值 | 14 | 从右到左 |
<<= | 操作同时赋值 | 14 | 从右到左 |
>>>= | 操作同时赋值 | 14 | 从右到左 |
^= | 操作同时赋值 | 14 | 从右到左 |
|= | 操作同时赋值 | 14 | 从右到左 |
&= | 操作同时赋值 | 14 | 从右到左 |
5、特殊操作符
cast操作符将一种数据类型转换成为另一种数据类型,cast应写成把要校正操作数的类型名放在括号中。
例如:
int i; long l; l=7876547; i=(int)l;
如果给高精度的变量赋予一个低精度值,则不需校正。类型校正操作符的优先级为2,结合性为从右到左结合。
将以上讲到的操作符的优先级总结如下:
优先级 | 运算符 | 结合顺序 |
1 | []数组运算 .点运算符 ()调用方法 | 从左到右 |
2 | ! ~ ++ -- +(一元加) -(一元减) ()强制类型转换 new | 从右到左 |
3 | * / % | 从左到右 |
4 | +(二元加) -(二元减) | 从左到右 |
5 | >> << >>> | 从左到右 |
6 | < <= > >= instanceof | 从左到右 |
7 | == != | 从左到右 |
8 | & | 从左到右 |
9 | ^ | 从左到右 |
10 | | | 从左到右 |
11 | && | 从左到右 |
12 | || | 从左到右 |
13 | ?: | 从左到右 |
14 | = += -= *= /= %= &= |= ^= <<= >>= >>>= | 从右到左 |
三、常量
1、整型常量
在Java语言中,整型常量有三种形式,它们分别是:十进制、八进制、十六进制。需要注意的是十进制数不能以0开头,这是因为八进制的数是以0开头的,而十六进制数以0x或0X开头。
2、浮点型常量
浮点数只能表示十进制数。浮点数有两种表示方法,即标准表示法和科学记数法。浮点数又分为单精度数和双精度数。
3、布尔型常量
布尔型常量有两个值:ture(或TURE)和false(或FALSE)它们分别表示真和假,这两个值用来表示事物的状态,它们必居其一。通过测量布尔值可以判断是否执行某个步骤。
4、字符型常量
字符型常量是一个单一的字符,其形式是由两个单引号引起来的一个字符。但是两个单引号引起来的不能是单引号和反斜杠,即‘’和‘\’是不正确的写法。
大家一定要记住,Java语言中的字符是16位的Unicode字符,这与C/C++等语言是不一样的。
字符串常量
字符串常量是由双引号引起来的一系列字符,与C/C++语言中不同的是,Java语言中的字符串不是通过字符数组来实现的,而是通过字符串类(即String类)来实现的。
四、变量和数据类型
在Java中,数据的类型可以分为四种:基本数据类型、数组类型、类和接口类型。任何数据都一定是上述数据类型的一种。
其中基本数据类型可以分为四大类:布尔型、字符型、整数型和浮点型。这些类型的数据与前面介绍的常量的类型基本相同,在此不再多说。下面将整数型和浮点型变量的取值范围列出:
表一、
类型 | 宽度 | 取值范围 |
byte | 8位 | -256到256 |
short | 16位 | -32768到32767 |
int | 32位 | -2147483648到2147483647 |
long | 64位 | -9223372036854775808到9223372036854775807 |
表二、
进制 | 整数 | 长整数 |
十进制 | 最大正整数 | 2147483647(2的31次方减1) 923372036854775807L(2的63次方减1) |
八进制 | 最大正整数 | 077777777777(2的31次方减1) 07777777777777777777L(2的63次方减1) |
二进制 | 最小负整数 | 020000000000(-2的31次方) 04000000000000000000L(-2的63次方) |
十六进制 | 最大正整数 | 0x7fffffff(2的31次方减1) 0x7fffffffffffffffL(2的63次方减1) |
十六进制 | 最小负整数 | 0x80000000(-2的31次方) 0x8000000000000000L(-2的63次方) |
浮点数能表示的数值从小到大分别是:负无穷大、负有限值、负零、正零、正有限值及正无穷大。其中正零和负零在进行数值比较的时候是相等的,但仍有办法分辨这两个值,例如在进行1.0/0.0的时候会得到正无穷大的结果。其它非零非无穷大的有限值是以s*m*(2^e)来表示的,s和m的取值范围见下表:
表三、
类型 | s | m |
float +1或-1 | 小于2的24次方的正整数 | 149到104的整数 |
double +1或-1 | 小于2的53次方的正整数 | 1045到1000的整数 |
与C/C++语言中不同的是,在Java语言中,所有的基本数据类型都有预设值,就是说当我们声明一个变量时,即使我们没有对它赋值,它的值也是一定的,而不像在C/C++中那样是不可预测的。
五、Java与C/C++的比较
由于Java的语法直接来源于C/C++,所以Java的程序控制语句与C/C++一模一样,在此不再多说。以下重点介绍一下Java与C/C++的不同。
指针
大家在使用C语言编程的时候想必都曾经因为指针的复杂计算而烦恼,在C/C++语言编程过程中,指针可能引起许多错误,这些复杂的指针算法所产生的错误常常让人迷惑不解,导致C/C++程序员在此浪费了大量的时间。考虑到这种原因,Java中取消了指针。指针的功能由参考(reference)所取代,这使得Java中对复杂数据结构的实现更加容易,因为用对象和对象数组实现复杂的数据结构更可靠。
函数
在Java中没有C/C++中应用广泛的函数,C/C++中通过函数实现的功能在Java中都是通过类和方法来实现的。
继承
C++支持多重继承,这是一个从多个父类中派生一个类的有效办法,但这种派生很复杂,也很容易产生问题。因此,Java中没有采用多重继承,但Java的Objective C协议接口能完成C++中多重继承的所有功能。
goto语句
大家知道,在使用高级语言编程时过多的使用goto语句会使程序变得十分混乱,因此Java中也没有使用goto语句。但是不可否认,当程序比较容易控制的时候,适当使用goto语句能使程序的运行更快捷,因此Java中使用了多重break和continue语句(允许break和continue语句使用标签)实现C++种goto语句的功能。
联合和结构
在C++中有三种数据结构:联合、结构和类;Java中只有类,它可以实现上述三者的功能。
字符串
在C/C++中,字符串是通过字符数组实现的,但是由于数组的空间不是动态分配的,这容易出现越界错误,例如:常有预先设定的字符数组不能容纳后输入的字符串。在Java中,字符串是一类特定的对象,这使得字符串更具有一致性和可预见性。
Typedef、Define和预处理器
Java中不需要#define语句、预处理器或者typedef,但需要头文件。在Java中一个类的信息必须包含在一个文件中,而C/C++中有关类的信息可能分散在多个文件中。
数据类型的自动强制转换