《Java核心技术 卷I 第10版》笔记

基于《Java核心技术 卷I 第10版》,边看边写,持续更新


  • Java严格区分大小写

  • 编译时需要提供文件名(如:Welcome.java);运行时只需要提供类名(如:Welcome),不要带扩展名 .java.class

  • 主类名必须与.java文件名一致,并区分大小写

  • 语句以分号(;)结束

  • 强类型语言,必须为每一个变量声明一种类型

  • 整型值和布尔值之间不能相互转换(不可用1和0代替true和false)


第2章 Java程序设计环境

1. Windows下相关方法:

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 下载源代码并解压到任意位置


2. 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程序

java ClassName    //等同于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的方法中可以没有参数,也可以有一个或多个参数。即使没有参数也要有括号,例如:

System.out.println();    //打印一个空行

println 输出后换行;print 输出后不换行

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)数值以 Ff 作后缀
  • 无后缀的浮点数默认为 double 型(或以 Dd 作后缀)
  • 长整型(long)数值以 L 或l作后缀
  • 十六进制数以 0x0X 作前缀
  • 八进制数以 0 为前缀
  • 二进制数以 0b0B 作前缀
  • 可以为数字字面加下划线,以方便阅读,编译器会自动忽略(1_000_000

※ Java没有任何无符号形式的 intlongshortbyte 类型

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 类的 isJavaIdentifierStartisJavaIdentifierPart 方法来检查哪些 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填充高位,(不存在<<<运算符)

运算符的优先级:

运算符 结合性
[] . ()(方法调用) 从左向右
! ~ ++ -- +(一元运算) -(一元运算) ()(强制类型转换) new 从右向左
* / % 从左向右
+ - 从左向右
<< >> >>> 从左向右
< <=> >= instanceof 从左向右
== != 从左向右
& 从左向右
^ 从左向右
| 从左向右
&& 从左向右
|| 从左向右
?: 从右向左
= += -= *= /= %= &= |= ^= <<=>>= >>>= 从右向左

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值上调用方法,会出现错误

<6>码点与代码单元(P49)

<7>String API

参见 https://docs.oracle.com/javase/10/docs/api/java/lang/String.html 及书籍P50

<8>联机文档

<9>构建字符串

StringBuilder类(java.lang.StringBuilder)P55

25、读取输入

import java.util.*;    //Scanner类定义在java.util包中
Scanner in = new Scanner(System.in);    //构造一个Scanner对象并与System.in关联
System.out.print("What is your name?");
String name = in.nextLine();    //等待输入一行
String firstName = in.next();    //读取一个单词,空格作为分隔符
int age = in.nextInt();    //读取一个整数
double age = in.nextDouble();    //读取一个浮点数

密码处理

Console cons = System.console();
String username = cons.readLine("User name:");
char[] passwd = cons.readPassword("Password:");
  • Console对象每次只能读取一行输入,没有读取一个单词或一个数值的方法

26、格式化输出 System.out.print()

double x = 10000.0/3.0;
System.out.print(x);
打印
3333.3333333333335

沿用C语言中printf方法:

System.out.printf("%8.2f", x);  //打印3333.33
System.out.printf("Hello, %s. Next year, you'll be %d", name, age); //使用多个参数

results matching ""

    No results matching ""