Java学习笔记 [1] —— 基本结构、注释、数据类型、变量、运算符
Java应用程序的基本结构
public class FirstSample
{
public static void main(String[] args)
{
System.out.println("We will not use 'Hello, World!"');
}
}
- Java区分大小写
- public——访问修饰符(access modifier), 修饰符用于控制程序的其他部分对这段代码的访问级別。 根据 Java 语言规范,main 方法必须声明为 public 。
- 关键字 class 表明 Java 程序中的全部内容都包含在类中。
- 类名:类名的定义规则很宽松,必须以字母开头,后面接字母和数字的组合,长度没有限制,不能与Java的保留字相同。标准命名规则: 大写字母开头的名词,如果由几个单词组成则每个单词第一个字母都大写,例: FirstSample 。
输出:
System.out.println() 输出换行
System.out.print() 输出不换行
注释
- // 单行注释。
- /*开头 */结尾 可以将一段较长的注释括起来。
- /**开头 */结尾 这种注释可以用来自动地生成文档。
数据类型
Java 是一种强类型语言。这就意味着必须为每一个变量声明一种类型。在 Java 中,一共有 8 种基本类型(primitive type), 其中有 4 种整型、2 种浮点类型、 1 种用于表示 Unicode编码的字符 单元的字符类型 char 和 1 种用于表示真值的 boolean类型。
整型
类型 | 储存需求 | 取值范围 |
---|---|---|
int | 4 字节 | -2 147 483 648 ~ 2 147483647 (正好超过 20亿) |
short | 2 字节 | -32768 ~ 32767 |
long | 8 字节 | -9 223372 036 854 775 808 ~ 9 223372 036854 775 807 |
byte | 1 字节 | -128 ~ 127 |
- 长整型数值有一个后缀 L 或 1 (如 4000000000L)。
- 十六进制数值有一个前缀 0x 或 0X (如 0xCAFE)
- 八进制有一个前缀 0, 例如,010 对应八进制中的 8。很显然,八进制表示法比较容易混淆,所以建议最好不要使用八进制常数。
- 从 Java7 开始, 加上前缀 0b 或 0B 就可以写二进制数。例如,0b1001就是 9。
- Java中没有任何无符号形式的 int、long、short 或 byte 类型。
浮点类型
类型 | 储存需求 | 取值范围 |
---|---|---|
float | 4 字节 | 大约 ± 3.402 82347E+38F (有效位数为 6 ~ 7 位) |
double | 8 字节 | 大约 ± 1.797693 134862315 70E+308 (有效位数为 15 位) |
-
double 表示这种类型的数值精度是 float 类型的两倍。
-
绝大部分应用程序都采用double 类型。
-
下面是用于表示溢出和出错情况的三个特殊的浮点数值:
1.正无穷大
2.负无穷大
3.NaN (不是一个数字)
例如,一正整数除以 0 的结果为正无穷大。计算 0/0 或者负数的平方根结果为 NaN。常量 Double_POSITIVE_INFINITY、Double.NEGATIVEJNFINITY 和 Double.NaN 分别表示这三个特殊的值。
!不能这样检测一个特定值是否等于 Double.NaN:
if (x = Double.NaN) // is never true
所有“ 非数值” 的值都认为是不相同的。然而,可以使用 Double.isNaN 方法:
if (Double.isNaN(x)) // check whether x is "not a number"
char 类型
由于 Unicode 编码机制的复杂性,强烈建议不要在程序中使用 char 类型,除非确实需要处理 UTF-16 代码单元。
boolean 类型
boolean (布尔)类型有两个值:false 和 true, 用来判定逻辑条件。
- 整型值和布尔值之间不能进行相互转换。
变量
- Java不区分声明和定义。
变量初始化
要想对一个已经声明过的变量进行赋值, 就需要将变量名放在等号(=) 左侧, 相应取值 的 Java 表达式放在等号的右侧。
int vacationDays;
vacationDays=12;
也可以将变量的声明和初始化放在同一行中。例如:
int vacationDays = 12;
常量
在 Java中, 利用关键字 final 指示常量。例如:
public class Constants
{
public static void main(String[] args)
{
final double CM_PER_INCH = 2.54;
double paperWidth = 8.5;
double paperHeight = 11;
System,out.println("Paper size in centimeters: " + paperWidth * CM PER INCH + " by " + paperHeight * CM.PER.INCH);
}
}
关键字 final 表示这个变量只能被赋值一次。一旦被赋值之后,就不能够再更改了。习惯上, 常量名使用全大写。
在Java中,经常希望某个常量可以在一个类中的多个方法中使用,通常将这些常量称为类常量。可以使用关键字 static final 设置一个类常量。下面是使用类常量的示例:
public class Constants2
{
public static final double CM_PER_INCH = 2.54;
public static void main(String[] args)
{
double paperWidth = 8.5;
double paperHeight = 11;
System.out.println("Paper size in centimeters: " + paperWidth * CMJERJNCH + by " + paperHeight * CM_PER_INCH);
}
}
需要注意,类常量的定义位于 main方法的外部。因此,在同一个类的其他方法中也可以使用这个常量。而且,如果一个常量被声明为 public,那么其他类的方法也可以使用这个常量。在这个示例中,Constants2.CM_PER-INCH 就是这样一个常量。
运算符
- 在 Java中,使用算术运算符 +、- 、* 、/ 表示加、减、乘、除运算。
- 当参与 / 运算的两个 操作数都是整数时,表示整数除法;否则,表示浮点除法。
- 整数的求余操作(有时称为取模) 用 % 表示。
- 需要注意,整数被0除将会产生一个异常,而浮点数被0除将会得到无穷大或 NaN结果。
- 对于使用strictfp关键字标记的方法必须使用严格的浮点计算来生成可再生的结果。例如,可以把 main 方法标记为
public static strictfp void main(String[] args)
于是,在 main 方法中的所有指令都将使用严格的浮点计算。
数学函数与常量
在 Math类中,包含了各种各样的数学函数。
平方根
Math.sqrt( )
幂运算
Math.pow( , )
三角函数
Math.sin( )
Math.cos( )
Math.tan( )
Math.atan( )
Math.atan2( )
指数函数和对数函数
Math.exp( )
Math.log( )
Math.log10( )
最后,Java还提供了两个用于表示 π 和 e 常量的近似值:
Math.PI
Math.E
- 提示:不必在数学方法名和常量名前添加前缀" Math ",只要在源文件的顶部加上下面这行代码就可以了(类似于C++的头文件)。
import static java.1ang.Math.*;
数值类型之间的转换
当使用两个数值进行二元操作时(例如 n + f,n 是整数,f 是浮点数), 先要将两个操作数转换为同一种类型,然后再进行计算。
- 如果两个操作数中有一个是 double 类型,另一个操作数就会转换为 double 类型。
- 否则,如果其中一个操作数是 float 类型,另一个操作数将会转换为 float 类型。
- 否则,如果其中一个操作数是 long 类型,另一个操作数将会转换为 long 类型。
- 否则,两个操作数都将被转换为 int 类型。
强制类型转换
需要通过强制类型转换(cast) 实现这个操作。
强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名。例如:
double x * 9.997;
int nx = (int) x;
这样,变量 nx 的值为 9。
强制类型转换通过截断小数部分将浮点值转换为整型。如果想对浮点数进行舍人运算,以便得到最接近的整数(在很多情况下,这种操作更有用),那就需要使用 Math.round 方法:
double x = 9.997;
int nx = (int) Math.round(x);
现在,变量 nx 的值为 10。
结合赋值和运算符
x+=4 等价于 x=x+4。
自增与自减运算符
自增自减运算符有两种形式:“ 后缀 ” 形式:n++,“ 前缀 ” 形式:++n。
后缀和前缀形式都会使变量值加 1 或减 1。
前缀形式会先完成加 1; 而后缀形式会使用变量原来的值。
int m = 7;
int n = 7;
int a = 2 * ++m; // now a is 16, m is 8
int b = 2 * n++; // now b is 14, n is 8
关系和 boolean 运算符
==、!=、<、>、<=、>=、&&、||、? : 与C++用法相同。
位运算符??
运算符优先级
枚举类型
有时候,变量的取值只在一个有限的集合内。这种情况可以自定义枚举类型。枚举类型包括有限个命名的值。 例如,
enum Size {SMALL, MEDIUM, LARGE, EXTRA.LARCE};