一、基本的包
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()拷贝的是引用,而不是对象。对象本身不改变。