第3章 Java的基本程序设计结构
3.1 一个简单的java应用程序
从第一个main方法开始
public class ClassName { public static void main(String[] args) {
program statements
}}
Java函数调用通用语法为
object.method(paramsters)
3.2 注释
// 作用域是从首行到末尾
/* 可用于长篇注释 */
/**
*可以用于自动生成文档
*@version 1.01 2020-10-11
*@author shenzhao
*/
3.3 数据类型
整型
bute //1字节 -128~127
short //2字节 -32768~32768int //4字节 -2 147 483 648~2 147 483 647 大概是21亿
long //8字节 64位长度 具体自己算 -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807
长整型数值要有个后缀 L或l(40000000L或 400000000l)
十六进制 以 0X或0x开头,例如0xCAFE
八进制 以0开头 例如 010表示8,但是容易混淆,最好不用八进制
从Java7开始用0b或0B开头可以表示二进制数,例如0b1001表示9,另外同样是从Java7开始可以为数字字面量增加下划线如用1_000_000或(0b1111_0100_0010_0100_0000)表示一百万,这些下划线只是用于易读,编译器会自动去除这些下划线。
注意,Java8中没有任何无符号型byte short int long
浮点类型
浮点类型应用于表示有小数部分的值
float //4字节 大约 (+/-)3.402823 47E+38F(6~7位有效位数)
double //8字节 大约 (+/-)1.797 693 134 862 315 70E+308(15位有效位)
double表示的数值精度是float的两倍多,绝大部分采用double类型。
float数值又一个后缀F或f(例如3.14F),不加后缀的浮点数默认位double类型。
用于表示溢出和出错情况 的三个特殊的浮点数值:
Double.POSITIVE_INFINITY //正无穷
Double.NEGATIVE_INFINITY //负无穷
Double.NaN //不是一个数字
需要注意的是浮点数不使用于无法接受舍入误差的金融计算,通常用BigDecimal类来处理金融计算值。
char类型
char类型原本用于表示单个字符,但是现在情况有所变化,如今有一些Unicode字符需要用2个char。
char值需要用两个单引号括起来(例如:'A'),也可以用转义序列表示 \u0000 ~\uffff,转义序列 \u 还可以出现在加引号的字符常量或字符串之外(而其他所有转义序列不可以)。 例 如:
public static void main(String\u005B\u00SD args)
就完全符合语法规则, \u005B 和 \u005D 是 [ 和 ] 的编码。
注意转义序列会在代码解析之前得到处理
我们强烈建议不要在程序中使用 char 类型, 除非确实需要处理 UTF-16 代码单元。最好 将字符串作为抽象数据类型处理 (有关这方面的内容将在 3.6 节讨论 )。
boolean类型
包含true和false,用来判断逻辑条件。整型和布尔型之间不能互相转换。
3.4 变量
变量名必须是一个以字母开头并由字母或数字构成的序列。需要注意,与大多数程序设计语言相比,Java中字母和数字的范围更大 字母包括'A''Z','a''z','_','/span>或在某种语言中表示字母的任何 Unicode 字符。
如果想知道哪些Unicode字符属于Java中的字母,需要用Character类中的isJavaIdentifierStart和isJavaIdentifierPart方法来检查。
_尽管 $ 是一个合法的 Java 字符, 但不要在你自己的代码中使用这个字符。 它只用 在 Java 编译器或其他工具生成的名字中。 _
_另外, 不能使用 Java 保留字作为变量名 (请参看附录 A 中的保留字列表 。) _
变量初始化
声明一个变量之后, 必须用赋值语句对变量进行显式初始化, 千万不要使用未初始化的 变量。
在 Java 中, 不区分变量的声明与定义。
常量
利用关键字final指示常量,关键字 final 表示这个变量只能被赋值一次,一旦被赋值之后 就不能够再更改了,习惯上常量名使用全大写。
final double CM_PREINCH = 2.54;
注意类常量放在main函数外,加了public修饰符后可在类外被调用
public class Constants2{
public static final double CM_PRE_INCH = 2.54;
public static void main(String[] args)
{
System.out.println(CM_PRE_INCH);
}
}
class demo{
public static void main(String[] args) {
System.out.println(Constants2.CM_PRE_INCH);
}
}
const 是java中保留的关键字,但是目前并没有使用,必须要使用final定义常量。
3.5 运算符
+
-
*
/ 在操作数都是整数时,表示整数除法,否则表示浮点除法。 需要注意, 整数被 0 除将会产生一个异常, 而浮点数被 0 除将会得到无穷大或 NaN 结果
% 整数的求余操作
在进行浮点数计算时使用strictfp修饰去使程序遵循严格的浮点数计算,不会使用高精度浮点寄存器。
数学函数与常量
在 Math 类中,包含了各种各样的数学函数。在编写不同类别的程序时,可能需要的函数也不同。 要想计算一个数值的平方根,可以使用Math.sqrt方法。
//常用的三角函数
Math,sin
Math.cos
Math.tan
Math.atan
Math.atan2
//指数函数及反函数 Math.exp
Math.log
Math.loglO
//派 和 e 常量的近似值 Math.PI Math.E
在 Math 类中,为了达到最快的性能,所有的方法都使用计算机浮点单元中的例程。如果得到一个完全可预测的结果比运行速度更重要的话,那么就应该使用 StrictMath类 。
数值之间类型转换
不损失精度
char -> int
byte -> short -> int -> long
float -> double
int -> double
损失精度
int ··> float
long ··> float
long ··> double
强制类型转换
double x= 9.997;
int nx = (int) x;
注意舍入运算使用Math.round() 并且返回值类型为long
尽量不要在boolean类型与其他类型做强制类型转换
结合赋值和运算符
+= -= *= /=等
自增与自减运算符
++ --(尽量少用 容易让人迷惑)
关系和boolean运算符
比较 三目 短路操作
位运算符
&与 |或 ^异或 ~非(无短路操作)
<<左移 >>右移 >>> 无符号右移 移位运算符会完成模32(int类型)或64(long类型)的运算
括号与运算符级别
略
枚举类型
enum Size {SMALL, MEDIUM, LARGE, EXTRA_LARGE}
会在第五章详述
3.6 字符串
Java标准库中内置了一个叫String的类。
字串 substring取得
拼接 +或join
String all = String.join(" / ", "S", "M", "L", "XL");
不可变字符串
编译器可以让不可变字符串共享
字符串是否相等 equals,compareTo
空串 “” 不是 null
码点与代码单元 (length方法返回UTF-16编码表示的给定字符串所需要的代码单元数量)
String API
Java中String类包含了50多个方法。
char charAt(int indx) //返回给定位置的代码单元
int codePointAt(int index) //返回给定位置开始的码点
int offsetByCodePoints(int startIndex, int cpCount) //返回startIndex代码点开始,位移cpCount后的码点索引