语法图解
语法图解使用了下列规则:
从左到右、从上到下、顺着行的路径读语法图解。
在语法图解中使用了下列符号:
>>- 指示了一个语句的开始
-> 指示该语句在下一行继续
>- 指示该语句从前一行继续
->< 指示该语句的终止
句法单元而不是完整语句的图以 |- 开始并以 -|结束。
要求的项在主要路径上。
>>-required-item---------------------><
可选的项在主要路径下。
>>-required-item--+----------------+-----><
'-optional-item--'
选择项目在一个堆栈中。如果它们被要求,它们是在主路径上;如果它们是可选的,它们是在主路径下。
>>-required-item--+-required-choice1-+--+------------------+--><
'-required-choice2-' +-optional-choice1-+
'-optional-choice2-'
一个选择的缺省项是在该主路径的上面。
.-default-optional-choice-.
>>-required-item--+-------------------------+--><
+-optional-choice1--------+
'-optional-choice2--------'
重复项有一个返回到该主行左上面的箭头。
关键字是小写的。每一个必须象显示的那样被拼写。
变量是大小写混合的(例如 InterfaceTypeList)。每个代表一个用户提供的名称或值。
包括的标点符号是该语法语句的部分。
abstract关键字
类语法
>>-+--------+-abstract-class-Identifier-+-------------------+->
'-public-' '-extends-ClassType-'
>-+------------------------------+-ClassBody-><
'-implements-InterfaceTypeList-'
方法语法
>>-+-----------+-abstract-ResultType-Identifier->
+-public----+
'-protected-'
>-(-+---------------------+-)-;-><
'-FormalParameterList-'
描述
abstract 关键字被用来创建抽象类和方法。抽象类不能被实例化,它们的用途是向子类提供通用的信息。抽象类可以包含正常的类包含的任何东西,也就是说,类和实例变量,以及带有任何修饰词的方法和构造子。只有抽象类可能有抽象方法。如果一个不是抽象的类包含一个抽象方法,那么,将会出现编译错误。如果下列的一个成立,那么一个有抽象方法:
它显式地声明了一个 abstract 方法。
它从它的直接父类继承了一个抽象方法。
一个直接的类的父接口声明或继承了它的一个方法(这因此必须是 abstract )以及该类既没有声明也没有继承一个实现的方法。
如果用户声明 private,static,和 final 方法为 abstract,编译错误将出现。不可能重设一个private方法,因此一个 abstract private 方法将永远不会被实现。 Static 方法总是可用的,因此必须有一个实现; static abstract 方法将永远没有实现。 final 方法不能被重设,因此不会有 final abstract 方法的实现。
一个抽象类可以通过提供另一个抽象方法声明来覆盖一个抽象方法。这可以提供一个放置文档注释的地方或来声明一个可以抛出的更加限制的被检查异常集合。
示例
在以下示例中,抽象类 MyAbstractClass 有一个通常方法和一个抽象方法。该具体类 MyConcreteClass 继承自 MyAbstractClass 并且提供了 abstractMethod 的一个实现。
public abstract class MyAbstractClass {
public void regularMethod() {
abstractMethod();
}
protected abstract void abstractMethod();
}
public class MyConcreteClass extends MyAbstractClass {
protected void abstractMethod() {
// does something interesting
}
}
下列代码片段显示 MyAbstractClass 和 MyConcreteClass 类的合法和非法使用。
// 非法。编译错误。
MyAbstractClass abstractClass = new MyAbstractClass();
// 合法。
MyConcreteClass concreteClass = new MyConcreteClass();
// 非法。受保护方法。
concreteClass.abstractMethod();
// 合法。一般方法。
concreteClass.regularMethod();
double 关键字描述
该 double 数值类型表示一个双精度型 64 位 IEEE 754 浮点数。一个 double 实例变量、类变量和数组元素的缺省值是零,也就是说,0.0。double 的值是从 4.9e-324 到 1.7976931348623157e308。
一个浮点数值文字被假定为是类型 double; 可选的,用户可以用一个 ASCII 字符 D 或 d 作它们的后缀。
示例
用户可以声明一个 double 值,并且在声明它是给它一个初始值:
double exampleDouble = 5.0;
另外的 double 字面量的例子包括:
1e1
2.
.3
0.0
3.14
1e-9d
1e137
int 关键字描述
该 int 数值类型代表了一个 32-bit 带正负号的二进制补码整数。一个 int 实体变量、类变量和数组元素的缺省值是零,也就是说,0。 int 的值是闭区间 -2147483648 到 2147483647 的整数。
示例
用户可以声明一个 int 值,并且在声明它是给它一个初始值:
int exampleInt = 1000; //name of the variable is exampleInt and its value is 1000
switch语法
v-------------------------------------------'
>>-switch-(-Expression-)-{-+-case-ConstantExpression-:-BlockStatements-+->
>-+---------------------------+-}-><
'-default-:-BlockStatements-'
描述
该 switch 语句使用户将一个变量与不同的测试值相比较。它根据一个表达式的值在一个循环中将控制传送到几个语句中的一个。如果该测试值与任何一个 case 值相等,那么相应的结果发生并且
break 语句引起 switch 语句的执行结束。 Expression 的类型必须是 byte、short 、int 或 long,否则将出现一个编译错误。
一个 switch 语句体必须是一个块。任何被该块立即包含的语句可能被用一个或多个 case 或 default 标签所标记。
当 switch 语句被执行,首先该 Expression 被求值。如果Expression 的求值因为某种原因突然完成, switch 语句会因为同样的原因突然完成。否则,执行将通过将 Expression 的值与每个 case 常量比较而继续。 这以后,基于下列规则,做出判定: 如果 case 常量的之一等于 Expression 的值,那么我们说该 case 匹配,并且所有在 switch 块中匹配的 case 标签后的语句,如果有的话,被顺序执行。如果所有这些语句正常完成,或者如果在该匹配的 case 标签后没有语句,那么整个 switch 语句正常完成。 如果没有 case 匹配,有一个 default 标签,那么所有在该 switch 块中匹配的 default 标签后的语句,如果有的话,被顺序执行。 如果所有这些语句正常完成,或者如果在该 default 标签后没有语句,那么整个 switch 语句正常完成。 如果没有 case 匹配并且没有 default 标签,那么没有进一步的动作发生并且该 switch 语句正常完成。 所有下列必须是正确的否则将出现编译错误: 与switch语句相关的每个case常量表达式必须是可赋予 switch 的 Expression 的类型的。 不能有两个与switch语句相关的case常量表达式具有相同的值。 至多只有一个 default 标签可与同一个 switch 语句相关联。 示例
在下面的例子中,我们使用一个 for 循环来在 switch 语句中迭代四次,用零到三的值来测试它。
for (int test = 0; test <= 3; test++) {
switch (test){
case 1:
System.out.println("Good");
break;
case 2:
System.out.println("Very Good");
break;
default:
System.out.println( "Boring" );
break;
}
}
上面代码产生下列输出:
Boring
Good
Very Good
Boring