程序结构
输出、注释和转义
[输出]
AP只需要我们知道两种输出,一种是System.out.print
一种是System.out.println
,区别在于前者不会换行,后者会。AP输入不要求掌握,出现输入的话会专门说明。
可以参考如下例子:
#### `System.out.println:`
<lab lang="java" parameters="filename=Hello.java">
public class Hello {
public static void main(String[] args) {
System.out.println("第一行输出");
System.out.println("第二行输出");
}
}
</lab>
#### `System.out.print:`
<lab lang="java" parameters="filename=Hello.java">
public class Hello {
public static void main(String[] args) {
System.out.print("第一行输出");
System.out.println("还是第一行输出");
}
}
</lab>
[注释]
除了Javadoc,注释本身Java来说并没有什么含义,然而对阅读代码的人来说却至关重要。注释描述了代码的内容和要注意的点。注释有两种,一种是行注释,就像上面的这个例子,只对一行//
后面的内容有效,另一种是块注释,写法是/*注释内容*/
对/*
和*/
之间的内容都有效,可以好几行。
[Javadoc]是一种特殊的注释,描述函数的运行环境和效果。
[转义]
AP中需要掌握以下的[转义序列(escape sequence)]:
| 序列 | 含义 |
| - | - |
| \"
| 双引号 |
| \n
| 换行 |
| \\
| \
本身 |
[变量和类型]
别忘了点击蓝色链接可以跳到教程原文哦~
[变量]
变量的定义(define)方式和初始化(initialize)方式:
变量类型 变量名 = 初始化值;
例如:
String text = "Hello Java!";
[变量命名]
AP中我们需要知道这4条命名规则:
- 变量名称需要有描述性,比如(
string
这种变量名就没有准确描述存储的内容) - 如果要描述内容的名称只有一个单词,那么这个变量名可以用这个单词的全小写形式(如
number
),如果名称由两个或两个以上个单词组成,那么变量名为第一个单词首字母小写,剩下的单词紧跟着第一个单词,但第一个字母大写(如学生数量为studentNumber
) - 在变量名中,第一个位置不能是数字(如不能以
1Hello
作为变量名),同时变量名不能有空格,不能有“-”、“/”等对计算机来说有歧义的符号(如abc*def
会被计算机理解成abc乘以def) - 在Java中,变量不能是系统保留用的关键字(比如
class
、static
)
[类型和储存方式]
最基本的几个类型:
- 整数类型
int
,在计算机中,int
是以二进制形式储存的,可以存储-2^31
到2^31-1
之间的数。 - 浮点类型
double
,对应我们一般称的“小数”,同样也是通过二进制储存的,使用科学计数法,存储方式为:符号 * 有效位数 * 2 ^ 指数
,还可以表示数字无效(NaN
, Not a Number),或者正负无穷(Infinity
和-Infinity
)。 - 字符串类型
String
,字符串类型储存的是一串文字。字符串的储存方式是把每个字符通过一张叫ASCII码表的转换表对应成数字,再把数字一个一个地按顺序储存起来。 - 布尔类型
boolean
,只有两种取值,一种是真(true
),一种是假(false
)。 - 数组和数组列表
Array
和ArrayList
,本教程之后会说明,也可以看[Array和ArrayList教程]。
[final
变量]
final
变量(final variable, 也叫用户定义常量,user-defined constant),是只能赋值一次,赋值以后不能再改的的特殊变量。
[运算和操作符]
数学运算
加减乘除和除余基本运算(不包括乘方运算),分为整数运算和浮点运算两种,进行哪种看的是操作数有没有浮点值。
要点:
- 整数运算的结果一定是整数,可以理解为算数除法舍去小数点后的部分的结果。浮点运算可能会有精度问题,不能直接判断相等
- 除零的情况下整数运算和浮点运算的不同,整数会抛出异常,浮点则返回
NaN
类型转换(cast)
在整型前面加上(double)
,转为浮点类型。在浮点前面加上(int)
可以转为整型,不过要小心丢失小数点后面的内容。
关系运算
主要有:
运算符 | 含义 |
---|---|
> |
大于 |
< |
小于 |
>= |
大于等于 |
<= |
小于等于 |
== |
是否等于 |
!= |
是否不等于 |
关系运算符返回一个布尔类型的数值,如果关系是正确的,那么返回真(true
),如果关系是错误的,那么返回假(false
)。
逻辑运算
关系运算判断的是布尔值本身或者布尔值之间的关系,主要有:
运算符 | 含义 |
---|---|
&& | 与 |
|| | 或 |
! | 非 |
与需要左右两边都为真才返回真,或只需要一边为真即可,非只需要右边的一个操作数,会反过来输出(操作数为真输出假,操作数为假输出真)。
赋值运算和增减量运算
赋值运算符由最基本的=
运算符和复合赋值运算符组成:
运算符 | 含义 |
---|---|
= |
赋值 |
+= |
加上 |
-= |
减去 |
*= |
乘上 |
/= |
除去 |
%= |
进行除余赋值运算 |
++ |
增量运算,与+=1 等价 |
-- |
减量运算,与-=1 等价 |
一个复合运算符可以看成算术运算符加上赋值运算符。
优先级
Java中运算优先级如下,从高往低排列:
a) ()
b) ! , ++ , -
c) * , / , %
d) + , -
e) < , > , <= , >=
f) == , !=
g) &&
h) ||
i) = , += , -= *= , /= , %=
[判断结构]
[if...else if...else结构]
if (条件1) {
···
//如果条件1为真,则执行,执行完跳出if
} else if(条件2) { //条件1为假才判断
//如果条件2为真,则执行,执行完跳出if
// 这里还可以加其他的else if
} else { // 前面的条件都不对才判断
···
//如果条件为假,则执行
}
[最小化求值/短路求值原理(short-circuit evaluation)]
计算机程序再运行的时候会自动排除一些不可能发生的情况,从而让电脑少算一些值来加快电脑运行的速度。
[德摩根定律]
在计算机里,德摩根定律表示的是两种等价关系:
!a && !b <=> !(a || b)
!a || !b <=> !(a && b)
其中,<=>
意味着等价,前提条件是a
和b
都是布尔值。
[循环结构]
[for循环]
for循环的用法如下:
for(初始条件;终止条件;更新语句){
...//循环内容
}
for的运行方式是:
a)先运行初始条件,然后测试终止条件,如果终止条件不符合(false)则跳出循环继续执行;
b)如果终止条件符合(true)则继续运行,执行循环内容,然后运行更新语句;
c)重复执行b)直到循环结束。
[while循环]
while循环的运行原理和for循环大抵相同,但在写法上有一定差异。while循环的写法如下:
while(测试条件){
...//循环内容
}
while循环会先判断条件,如果符合(true)就会继续执行循环内容,不符合就会跳出循环执行下面的内容,执行完循环内容后会返回来判断条件,如果符合的话接着执行循环内容,一直重复知道条件不符合(false)为止。
[for-each循环]
这种代码用于循环访问一个数组或者集合中的所有元素。用法如下:
for(SomeType element : collection){
...//循环内容
}
注意: for-each 循环不能被用来替换或删除元素,同时不显示index。
break
的作用是跳出当前循环块(for、while、for-each)或程序块(switch)并执行循环块或程序块外的代码。
continue
用于结束循环体中其后语句的执行,并跳回循环程序块的开头执行下一次循环,而不是立刻循环体。
[异常]
异常(exception)是一种Java程序在执行过程中抛出的错误情况。需要掌握的有:
ArithmeticException(算术错误如0/0)
NullPointerException(访问了空引用)
IndexOutOfBoundsException(在List越界抛出)
ArrayIndexOutOfBoundsException(是IndexOutOfBoundsException的子类,数组越界抛出)
IllegalArgumentException(参数错误)