Java核心技术 卷I 第10版 笔记
基于《Java核心技术 卷I 第10版》,边看边写,持续更新
• Java严格区分大小写
• 编译时需要提供文件名(如:Welcome.java
);运行时只需要提供类名(如:Welcome
),不要带扩展名 .java
或 .class
• 主类名必须与.java文件名一致,并区分大小写
• 语句以分号(;)结束
• 强类型语言,必须为每一个变量声明一种类型
• 整型值和布尔值之间不能相互转换(不可用1和0代替true和false)
第2章 Java程序设计环境
1、下载安装JDK(建议装在D盘)
2、系统变量设置
右键“我的电脑”→“属性”→“高级系统设置”→“环境变量”,在“系统变量”中:
<1>新建变量名 JAVA_HOME
变量值:JDK安装位置(如:E:\Java\JDK
)
<2>修改 Path
变量
新建变量值 %JAVA_HOME%\bin
并且上移到第一个
3、设置完成后检查:
cmd窗口执行 java –version
显示版本
cmd窗口执行 javac –version
显示版本
4、安装库源文件(非必要)
将 src.zip
文件解压到 JDK
目录中的 src
文件夹(新建)中
(可用winrar直接解压或使用命令 jar –xvf src.zip
)
5、安装文档内容(非必要)
官网下载文档压缩包,将 docs
文件夹解压到 JDK
目录中(与 src
同一目录)
6、安装《Java核心技术》源代码(非必要)
从 horstmann.com/corejava.html
下载源代码并解压到任意位置
Linux下相关方法:
1、下载 .tar.gz
包,并解压到 /opt/
目录,路径如:/opt/jdk-10/bin/
2、设置路径
在 ~/.bashrc(或~/.bash_profile)
文件在最后添加内容:
export PATH=/opt/jdk-10/bin:$PATH
3、安装库源文件
cd ~
mkdir javasrc
cd javasrc
jar -xvf jdk/src.zip //jdk/src.zip指src.zip文件的路径
7、Eclipse相关
<1>下载Eclipse IDE for Java Developers(zip版)
<2>汉化:
从Eclipse Babel Project下载中文版语言包,替换相应文件
<3>Eclipse导入现有代码文件:
“File”→“New”→“Java Project”→输入项目名,不勾选“Use default location”→“Browse”到源文件所在目录→“Finish”
8、命令行HelloWorld
<1>文本编辑器编写代码,扩展名为.java
<2>cmd窗口编译java源代码
javac filename.java
编译完成后生成 filename.class
文件
※ .java文件名与类名一致,并且区分大小写
<3>运行:java filename //不加扩展名
第3章 Java的基本程序设计结构
1、类的标准命名规范:类名是以大写字母开头的名词。如果名字由多个单词组成,每个单词的第一个字母都应该大写(骆驼命名法)
2、源代码文件名称必须与公共类(public class)的名字相同,并用.java作为扩展名,且区分大小写。在类的源文件中必须包含一个main方法,可以在main方法中调用自定义的其它方法
※ main方法必须声明为 public
,声明main方法的格式如下:
public class ClassName
{
public static void main(String[] args)
{
program statements
}
}
3、点号(.)用于调用对象的方法,格式如下:
object.method(parameters)
Java的方法中可以没有参数,也可以有一个或多个参数。即使没有参数也要有括号
4、Java注释:(三种方法)
<1>双斜线(//)从//开始到结尾
<2>用(/)开始,(/)结尾,表示长注释 <不可嵌套>
<3>以(/*)开始,(/)结尾的注释,可以自动生成文档
5、数据类型(共8种)
<1>整型:int
(4字节);short
(2字节);long
(8字节);byte
(1字节)
<2>浮点型:float
(4字节);double
(8字节)
<3>字符类型:char
<4> boolean
类型(整型值和布尔值之间不能相互转换)
- 浮点型(
float
)数值以F
或f
作后缀 - 无后缀的浮点数默认为
double
型(或以D
或d
作后缀) - 长整型(
long
)数值以L
或l作后缀 - 十六进制数以
0x
或0X
作前缀 - 八进制数以
0
为前缀 - 二进制数以
0b
或0B
作前缀 - 可以为数字字面加下划线,以方便阅读,编译器会自动忽略(
1_000_000
)
※ Java没有任何无符号形式的 int
,long
,short
或 byte
类型
6、用于表示溢出和出错情况的三个特殊的浮点数值:
<1>正无穷大(常量 Double.POSITIVE_INFINITY
)
<2>负无穷大(常量 Double.NEGATIVE_INFINITY
)
<3> NaN
(不是一个数字)(常量 Double.NaN
)
示范:
if(x==Double.NaN)//错误表述,所有“非数值”的值都认为是不相同的
if(Double.isNaN(x))//正确表述,检查x是否为一个数字
7、Unicode
转义序列会在解析代码之前得到处理
8、变量声明方法:变量类型+变量名
,如:
boolean done;//必须以分号结尾
int i, j;//同时声明2个int变量,合法,但不提倡
※ 字符 $
只用在Java编辑器或者其他工具生成的名字中
9、变量名规则:一个以字母开头,并由字母或数字构成的序列,(字母包括下划线(_)),区分大小写,长度不限
※ 可以用 Character
类的 isJavaIdentifierStart
和 isJavaIdentifierPart
方法来检查哪些 Unicode 字符属于Java中的“字母”
10、变量初始化:声明变量后,必须用赋值语句对变量进行显式初始化。
也可以将变量声明和初始化放在同一行,如:int i = 12;
声明可以放在使用之前的任何地方。
11、常量定义及赋值:使用关键字 final
,常量只能被赋值一次。习惯上,常量名使用全大写,如:
final double PI = 3.14;
12、类常量:关键字 static final
,可在一个类中的多个方法中使用。定义于方法的外部。示例:
public static final double PI = 3.14;
如果一个常量被声明为 public
,那么其他类的方法也可以使用这个常量
13、整数被0除,将产生一个异常;浮点数被0除,将会得到无穷大或NaN结果。
注释:strictfp关键字:标记的方法或类必须使用严格的浮点计算来生成可再生的结果,如:
public static strictfp void main(String[] args)
14、n%2
n对2取模,当n为负数时,表达式的值为-1
15、Math类的方法:
<1>三角函数:
Math.sin 正弦
Math.cos 余弦
Math.tan 正切
Math.asin 反正弦
Math.acos 反余弦
Math.atan 反正切
Math.atan2(y,x) 向量(x,y)与x轴的夹角
<2>指数函数以及它的反函数——自然对数以及以10为底的对数
Math.exp
Math.log(a) a的自然对数(底数是e)
Math.log10(a) a的底数为10的对数
Math.log1p(a) a+1的自然对数
<3>p常量的近似值:Math.PI
<4>e常量的近似值:Math.E
<5>绝对值函数:Math.abs
<6>开根号:
Math.cbrt(x) 开立方
Math.sqrt(x) 开平方
Math.hypot(x,y)
<7>最值:
Math.max(a,b) 最大值
Math.min(a,b) 最小值
<8>幂:
Math.exp(x) e^x的值
Math.expm1(x) e^x-1的值
Math.pow(x,y) x^y的值
注释:不必在数学方法名和常量名前添加前缀“Math”,只需在源文件顶部添加代码:
import static java.lang.Math.*; //静态导入,第4章
System.out.println(“The square root of \u03C0 is ”+sqrt(PI));
<待补充,P40相关>
16、<数据类型转换>P40
17、<强制类型转换>P41
18、二元运算符:(右结合运算符)
+=,-=,*=,%= 例:x+=4; //x=x+4;
19、自增自减运算符:
- 前缀(如:++n):先加1,再取用
- 后缀(如:n++):先取用,再加1
20、关系运算符:
==(双等,检测相等性);
!=(检测不相等);
>;<;>=;<=
逻辑与(&&);
逻辑或(||);//&&比||优先级高
21、三元运算符:
condition ? expression1 : expression2
如果condition的值为true,执行expression1,否则执行expression2,如:
x<y ? x : y; //返回x和y中较小的一个
22、位运算符:P43
&(and);|(or);^(xor);~(not)
位模式左移或右移(>>或<<)(>>用符号位填充高位)
>>>运算符用0填充高位,(不存在<<<运算符)
运算符的优先级:
运算符优先级.png
23、枚举类型(第5章)
24、字符串
没有内置的字符串类型,标准库中提供了一个预定义类,String,例如:
String greeting = "Hello";
每个用双引号括起来的字符串都是 String
类的一个实例
<1>子串(substring方法)
String greeting = "Hello";
String s = greeting.substring(0,3); //Hel,不包含3,从0开始计数
<2>拼接(+)
System.out.println("The answer is"+answer);
使用定界分隔符(join):
String all = String.join("/","S","M","L","XL"); //"S/M/L/XL"
<3>不可变字符串(例:将Hello改为Help!)
String greeting = "Hello";
greeting = greeting.substring(0,3)+"p!";
- 将来自文件或键盘的单个字符或短的字符串汇集成字符串(见3.6.9)
<4>检测字符串是否相等:(equals
方法)
s.equals(t) //比较字符串s和t,返回true或false
检测字符串是否相等,不区分大小写(equalsIgnoreCase
方法)
"Hello".equals("hello") //返回false
"Hello".equalsIgnoreCase("hello") //返回true
双等号(==)只能确定两个字符串是否放置在同一个位置上
<5>空串与null串
检测空串(""):
if (str.length() == 0) 或 if (str.equals(""))
null表示目前没有任何对象与该变量关联。检测方法:
if (str == null)
检测一个字符串既不是null,也不为空:
if (str != null && str.length() != 0)
- 先检测str不为null,如果在一个null值上调用方法,会出现错误