一、基本的包
java.lang包含一些形成语言核心的类,如String、Math、Integer和Thread。
java.awt包含了构成抽象窗口工具包(AWT)的类,这个包被用来构建和管理应用程序的图形用户界面。
java.applet包含了可执行applet特殊行为的类。
java.net包含执行与网络相关的操作的类和处理接口及统一资源定位器(URLs)的类。
java.io包含处理I/O文件的类。
java.util包含为任务设置的实用程序类,如随机数发生、定义系统特性和使用与日期日历相关的函数。
二、标识符、关键字、基本数据类型和编码约定
(一)标识符
1)注 释
三种允许的Java技术程序注释风格
//comment on one line
/* comment on one
or more line */
/** documenting comment */
紧放在声明(变量、方法或类的声明)之前的文档注释表明, 注释应该被放在自动生成的文档中(由javadoc命令生成的HTML文件)以当作对声明项的描述。
注意:有关这些注释的格式和 javadoc工具的使用,请见JDK1.2 API文件的docs/tooldocs/win32目录
2)分号、块和空白
一个语句是一行用分号(;) 终止的代码
一个块(block)是以上括号和下括号为边界的语句集合,块语句可被嵌套
Java程序中允许任意多的空白
3)标识
在Java编程语言中,标识符是赋予变量、类或方法的名称。标识符可从一个字母、下划线(_)或美元符号($)开始,随后也可跟数字。标识符是大小写区别对待的并且未规定最大长度。
(二)、关键字
abstract |
do |
implements |
private |
throw |
boolean |
double |
import |
protected |
throws |
break |
else |
instanceof |
public |
transient |
byte |
extends |
int |
return |
true |
case |
false |
interface |
short |
try |
catch |
final |
long |
static |
void |
char |
finally |
native |
super |
volatile |
class |
float |
new |
switch |
while |
continue |
for |
null |
synchronized |
|
default |
if |
package |
this |
|
以下是有关关键字的重要注意事项:
true、false和null为小写,而不是象在C++语言中那样为大写。严格地讲,它们不是关键字,而是文字。然而,这种区别是理论上的。
无sizeof运算符;所有类型的长度和表示是固定的,不依赖执行。
goto和const不是Java编程语言中使用的关键字。
(三)、基本Java类型
Java编程语言为八个原始数据类型和一个特殊类型定义了文字值。原始类型可分为四种:
逻辑类 boolean
文本类 char、String
整数类 byte、short、int、long
浮点类 double、float
1)、逻辑类──boolean 数据类型有两种文字值:true和false。
2)、文本类──char和String
(1)char
代表一个16-bit无符号的(不分正负的)Unicode字符
必须包含用单引号(’’)引用的文字
使用下列转义符号:
\n 换行 \r 回车 \b 退格 \f 换页 \t 水平制表符
\’ 单引号 \’’ 双引号 \\ 反斜杠
\u???? 一个特殊Unicode字符,????应严格使用四个16进制数替换
(2)String
不是一个原始数据类型,它是一个类
具有用双引号引用的文字“This a fox.”
可按如下情形使用:String greeting = “Good Morning!! \n”;
String不是原始类型,而是一个类(class),它被用来表示字符序
列。字符本身符合Unicode标准,且上述char类型的反斜线符号适
用于String。与C和C++不同,String不能用\0作为结束。
3)、整数类──byte, short, int, long
采用三种进制──十进制、八进制和16进制
2 十进制值是2
077 首位的0表示这是一个八进制的数值
0xBAAC 首位的0x表示这是一个16进制的数值
具有缺省int
用字母“L”和“l”定义long
注意:所有Java编程语言中的整数类型都是带符号的数字。
整数数据类型具有下列范围:
8 bits |
byte |
-27 ...27-1 |
16 bits |
short |
-215...215-1 |
32 bit |
int |
-231...231-1 |
64 bits |
long |
-263...263-1 |
4)、浮点──float和double
缺省为double
浮点文字包括小数点或下列各项之一
E或e (增加指数值)
F或f (float)
D或d (double)
3.14 一个简单的浮点值(a double)
4.02E23 一个大浮点值
2.718F 一个简单的float长度值
123.4E+306D 一个大的带冗余D的double值
浮点数据类型具有下列范围:
32 bits |
float |
1.7E-308~1.7E+308 |
64 bits |
double |
3.4E-038~3.4E+038 |
注意:浮点文字除非明确声明为float,否则为double
(四)、编码约定
classes──类名应该是名词,大小写可混用,但首字母应大写。
interface──界面名大小写规则与类名相同。
method──方法名应该是动词,大小写可混用,但首字母应小写。在每个方法名内,大写字母将词分隔并限制使用下划线。
Variables──所有变量都可大小写混用,但首字符应小写。词由大写字母分隔,限制用下划线,限制使用美元符号($),因为这个字符对内部类有特殊的含义。
constant──原始常量应该全部大写并用下划线将词分隔;对象常量可大小写混用。
control structures──当语句是控制结构的一部分时,即使是单个语句也应使用括号({})将语句封闭。
spacing── 每行只写一个语句并使用四个缩进的空格使你的代码更易读。
comments──用注释来说明那些不明显的代码段落; 对一般注释使用//分隔符,而大段的代码可使用 /*…*/分隔符。使用 /**…*/将注释形成文档,并输入给javadoc以生成HTML代码文档。
三、自定义数据类型
(一)、创建一个新类型
Java编程语言使用类来创建新类型。请看下列原始类型声明:
class MyDate {
int day;
int month;
int year;
}
使用:
MyDate myBirth;
myBirth.day = 26;
myBirth.month = 11;
yourBirth.year = 1960;
词class是Java编程语言的一个关键字,必须全部小写。名称MyDate按照大小写的有关约定处理,而不是由语意要求来定。
(二)、创建一个对象
当任何原始类型(boolean、byte、short、char、int、long、float或double)的变量被声明时,作为上述操作的一部分,存储器空间也同时被分配。使用非原始类型(如String或class)的变量的声明不为对象分配存储器空间。事实上,使用class类型声明的变量不是数据本身,而是数据的引用(reference)。
注意:你也可以认为引用是一个指针(pointer), 这可能会有助于你的理解。实际上, 在大多数实现中, 也确实可以这样认为。值得注意的是, Java编程语言实际上不支持指针数据类型。
在你可以使用变量之前,实际存储器必须被分配。这个工作是通过使用关键字new来实现的。如下所示:
MyDate myBirth;
myBirth = new MyDate ();
第一个语句(声明)仅为引用分配了足够的空间,而第二个语句则通过调用对象为构成MyDate的三个整数分配了空间。对象的赋值使变量myBirth重新正确地引用新的对象。这两个操作被完成后,MyDate对象的内容则可通过myBirth进行访问。
假使定义任意一个class XXXX, 你可以调用new XXXX () 来创建任意多的对象,对象之间是分隔的。一个对象的引用可被存储在一个变量里,因而一个”变量点成员”(如myBirth.day)可用来访问每个对象的单个成员。请注意在没有对象引用的情况下,仍有可能使用对象,这样的对象称作”匿名”对象。
(三)、引用类型的赋值
在Java编程语言中,用类的一个类型声明的变量被指定为引用类型,这是因为它正在引用一个非原始类型,这对赋值具有重要的意义。请看下列代码片段:
int x = 7;
int y = x;
String s = “Hello”;
String t = s;
四个变量被创建:两个原始类型int和两个引用类型String。
(四)、术语
类:在Java编程语言中定义新类型的一种途径。类声明可定义新类型并描述这些类型是如何实现的。
对象:一个类的实例。类可被认为是一个模板,一个对象就是你每次使用new创建一个类的实例的结果。
引用类型:一个用户定义类型, 它可引用类、界面和数组。
成员:构成一个对象的元素之一。这个词也被用作定义类的元素(elements)、成员变量(member variabl)、实例变量(instance variable)和域(field)也经常被互换使用。
四、表达式和流程控制
(一)、表达式
1)、变量和作用域
在方法内定义的参数被称为局部(local)变量,有时也被用为自动(automatic)、临时(temporary)或栈(stack)变量。
在方法外定义的变量是在使用new Xxxx ()调用构造一个对象时被创建。在构造一个对象时,可创建两种变量。 一是类变量,它是用static关键字来声明的;只要需要对象,类变量就将存在。 二是实例变量,它不需用static关键字来声明;只要对象被当作引用,实例变量就将存在。实例变量有时也被用作成员变量,因为它们是类的成员。
方法参数变量定义在一个方法调用中传送的自变量,每次当方法被调用时,一个新的变量就被创建并且一直存在到程序的运行跳离了该方法。
2)、变量初始化
在Java程序中,任何变量都必须经初始化后才能被使用。当一个对象被创建时,实例变量在分配存储器的同时被下列值初始化:
byte、short、int 0
long 0L
float 0.0f
double 0.0d
char '\u0000' (NULL)
boolean false
All reference types Null
注意:
一个具有空值的引用不引用任何对象。试图使用它引用的对象将会引起一个异常。
在方法外定义的变量被自动初始化。局部变量必须在使用之前做“手工”初始化。
3)、运算符
Java软件运算符在风格和功能上都与C和C++极为相似。按优先顺序列出了各种运算符(“L to R”表示左到右结合,“R to L”表示右到左结合)
Separator [] () ; ,
R to L ++ -- + - ~ ! (data type)
L to R * / %
L to R + -
L to R << >> >>>
L to R < > <= >= instanceof
L to R == !=
L to R &
L to R ^
L to R |
L to R &&
L to R ||
R to L ?:
R to L = *= /= %= += -= <<= >>= >>>= &= ^= |=
(二)、流程控制
if, else分支语句 |
if (布尔表达式){
语句或块;
}
if (条件为真) {
语句或块;
} else {
语句或块;
} |
|
switch分支语句 |
switch (expr1){
case expr2:
statements;
break;
case expr3:
statements;
break;
default:
statements;
break;
} |
在switch (expr1) 语句中,expr1必须与int类型是赋值兼容的;byte, short或char类型可被升级;不允许使用浮点或long表达式。
|
for循环语句 |
for (init_expr;
boolean testexpr;
alter_expr)
{
statement or block
} |
Java编程语言允许在for () 循环结构中使用逗号作为分隔符。 例如,for (i= 0, j = 0; j<10; i++, j++)是合法的;它将i值初始化为零,并在每执行完一次循环体后,增加一次它们的值。 |
while循环语句 |
while (布尔表达式) {
语句或块
} |
|
do/while循环语句 |
do {
语句或块;
}
while (布尔测试) |
|
下列语句可被用在更深层次的控制循环语句中:
l break [标注];
l continue[标注];
l label: 语句;// where statement must be any legal statement.
break语句被用来从switch语句、loop语句和预先给定了label的块中退出。
continue语句被用来略过并跳到循环体的结尾。
label可标识控制需要转换到的任何有效语句,它被用来标识循环构造的复合语句。
例如
loop:while(true) {
for (int i=0;i<100;i++) {
switch (c = System.in.read()) {
case -1:
case ` \n `:break loop;
....
}
} // end for
} // end while
test: for (...) {
....
while (...) {
if (j > 10) {
continue test;
}
} // end while
} // end for
五、数组
(一)、数组的声明
可以声明任何类型的数组---原始类型或类类型:
char s[];
Point p[]; // where point is a class
在Java编程语言中,即使数组是由原始类型构成,或带有其它类类型,数组也是一个对象。声明不能创建对象本身,而创建的是一个引用,该引用可被用来引用数组。数组元素使用的实际存储器可由new语句或数组初始化软件动态分配。
(二)、创建数组
你可以象创建对象一样,使用关键字new 创建一个数组。
s = new char [20];
p = new Point [100];
用来指示单个数组元素的下标必须总是从0开始,并保持在合法范围之内。任何访问在上述界限之外的数组元素的企图都会引起运行时出错。
(三)、初始化数组
当创建一个数组时,每个元素都被初始化为0 (\u0000或null)字符
Java编程语言允许使用下列形式快速创建数组:
String names[] = {
“Georgianna”,
“Jen”,
“Simon”,
};
其结果与下列代码等同:
String names[] ;
names = new String [3];
names [0] = “Georgianna”;
names [1] = “Jen”;
names [2] = “Simon”;
这种”速记”法可用在任何元素类型。例如:
Myclass array[] = {
new Myclass (),
new Myclass (),
new Myclass ()
};
适当的类类型的常数值也可被使用:
Color palette[] = {
color.blue,
color.red,
color.white
};
(四)、多维数组
Java编程语言没有象其它语言那样提供多维数组。因为一个数组可被声明为具有任何基础类型,所以你可以创建数组的数组(和数组的数组的数组,等等)。一个二维数组如下例所示:
int twoDim [][] = new int [4][];
twoDim[0] = new int [5];
twoDim[1] = new int [5];
twoDim[2] = new int [5];
twoDim[3] = new int [5];
因为这种对每个元素的分别初始化,所以有可能创建非矩形数组的数组。也就是说,twoDim的元素可按如下方式初始化:
twoDim[0] = new int [2]
twoDim[1] = new int [4];
twoDim[2] = new int [6];
twoDim[3] = new int [8];
由于此种初始化的方法烦琐乏味,而且矩形数组的数组是最通用的形式,因而产生了一种”速记”方法来创建二维数组。例如:
int twoDim [][] = new int [4][5];
可被用来创建一个每个数组有5个整数类型的4个数组的数组。
(五)、数组界限
在Java编程语言中,所有数组的下标都从0开始。一个数组中元素的数量被作为具有length属性的部分数组对象而存储;这个值被用来检查所有运行时访问的界限。如果发生了一个越出界限的访问,那么运行时的报错也就出现了。
例如:
int list [] = new int [10];
for (int i= 0; i< list.length; i++)
System.out.println(list[i]);
使用length属性使得程序的维护变得更简单。
(六)、拷贝数组
数组一旦创建后,其大小不可调整。然而,你可使用相同的引用变量来引用一个全新的数组:
int myArray [] = new int [6];
myArray = new int [10];
在这种情况下,第一个数组被有效地丢失,除非对它的其它引用保留在其它地方。
Java编程语言在System类中提供了一种特殊方法拷贝数组,该方法被称作arraycopy()。例如,araycopy可作如下使用:
int myArray[] = { 1, 2, 3, 4, 5, 6 };
int hold[] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
System.arraycopy(myArray, 0, hold, 0,myArray.length);
在这一点,数组hold有如下内容:1,2,3,4,5,6,4,3,2,1。
注意:在处理对象数组时,System.arraycopy()拷贝的是引用,而不是对象。对象本身不改变。 
|