Java核心技术 卷一 读书笔记

1. Java基础概念

1.1 白皮书关键术语

1)简单性

一个是指相对于c++来说,更加简单。另一个方面是小。

2)面向对象

一种程序设计技术。重点放在数据(即对象)和对象的接口上。万物皆对象。

3)网络技能(Networki-Savvy

封装了网络接口,如socket等,使得socket连接等网络任务变得简单。

4)健壮性

问题检测、后期动态的(运行时)检测,并消除了有出错倾向的状态。Java不需要使用指针构造诸如字符串、数组这样的结构。如果必要的话,它也能够具有指针的能力,如链表。Java是绝对安全的,其原因是永远不会存取一个“坏的”指针,造成内存分配的错误,也不必防范内存泄漏。

5)安全性

6)体系机构中立

编译器生成一个体系结构中立的目标文件格式,一种编译过的代码,只要有Java运行时系统,就可以在许多处理器上运行。为了解决解释字节码比全速运行机器指令慢的问题,Java采用虚拟机,将使用最频繁的字节码序列翻译成机器码,这一个过程被称为即时编译。

虚拟机还有一些其他的优点。虚拟机可以检测指令序列的行为,以增强其安全性。有些程序还可以快速生成字节码,并动态增强所运行程序的处理能力。

7)可移植性

  Java语言之中最大的特点在于其可移植性的支持,所谓的可移植性指的是同一个程序可以在不同的操作系统之间任意的进行部署,这样就减少了开发的难度,在Java里面如果要想实现可移植性的控制,那么主要依靠的是JVM(Java 虚拟机)。Java虚拟机是一个由软件和硬件模拟出来的计算机,所有的程序只要有Java虚拟机的支持,那么就可以实现程序的执行,并且不同的操作系统上会有不同版本的JVM存在,这样就可以实现移植性。

作者:c88bc9f9d088
链接:https://www.jianshu.com/p/82349289479c
来源:简书

 

8)解释性

Java解释器可以在任何移植了解释器的机器上执行Java字节码。

9)高性能

Java编译后的字节码是在解释器中运行的,所以它的速度较多数交互式运用程序提高了很多。

10)多线程

 

11)动态性

将某些代码添加到正在运行的程序中。

 

2 Java程序设计环境

2.1 java术语

 

3 Java的基本程序设计结构

3.1 注释

//单行注释

 

/*

* 多行注释

*/

 

/**

*  文档注释

*/

可以生成代码文档

3.2数据类型

Java是一种强类型语言。每一个变量必须声明一种类型。在Java中一共有8种基本数据类型(primitive type),其中有4种整型、2种浮点型、1种用于表示Unicode编码的字符单元的字符类型char和一种用于表示真值的boolean类型。

3.2.1整型

整型用于表示没有小数部分的数值,它允许是负数。Java提供了4种整型。

 

【注意】:长整型数值后有一个后缀L(如400000000L)。十六进制数值有一个前缀0x(如0xCAEF)。八进制有一个前缀0,例如,010对应八进制中的8。很显然,八进制表示法比较容易混淆,所以建议不要使用八进制常数。

 

Java7开始,加上前缀0b就表示为二进制数。例如,0b1001就是9.另外,同样是从Java7开始,可以为数字字面量加下划线,如1_000_000表示一百万。Java编译器会去除这些下划线。

3.2.2浮点型

浮点型用于表示有小数部分的数值。在Java中有两种浮点类型。

 

 

 

double 表示这种类型的数值精度是 float类型的两倍(有人称之为双精度数值)。绝大部分应用程序都采用double 类型。在很多情况下,float类型的精度很难满足需求。例如,用7 位有效数字足以精确地表示普通雇员的年薪,但表示公司总裁的年薪可能就不够用了。实际上,只有很少的情况适合使用 float类型,例如,需要快速地处理单精度数据,或者需要存储大量数据。

float类型的数值有一个后缀F(例如,3.14F)。没有后缀F的浮点数值(如3.14)默认为double类型。当然,也可以在浮点数值后面添加后缀 D(例如,3.14D)。

所有的浮点数值计算都遵循IEEE 754规范。下面是用于表示溢出和出错情况的三个特殊的浮点数值

正无穷大

负无穷大

●NaN(不是一个数字)

例如,一个正整数除以0的结果为正无穷大。计算0/0或者负数的平方根结果为 NaN

3.2.3 char

char类型表示单个字符。通常表示字符常量。

Unicode编码:

A’ = 65

a’ = 97

0’ = 48

3.2.4 boolean

boolean(布尔)类型有两个值:falsetrue,用来判断逻辑条件。整型和布尔之间不能进行转换。

 

 

3.3 变量

 

Java中,每一个变量都属于一种类型(type)。在声明变量所属的类型位于变量名之前。如下示例:

double salary;

int number;

3.3.1 变量初始化

声明一个变量之后,必须使用赋值语句进行显示初始化,不要使用未初始化的变量。

错例:

int number;

System.out.println(number); //ERROR--number not initialized

正确示例:

int number;

number=0;

int number = 0;

Java中,变量的声明尽可能地靠近第一次使用的地方,这是一种良好的程序编写风格。

 

3.3.2 常量

Java中,利用关键字final指示常量。例如:

final double PI = 3.14;

 

关键字 final表示这个变量只能被赋值一次。一旦被赋值之后,就不能够再更改了。习惯上,常量名使用全大写。

Java中,经常希望某个常量可以在一个类中的多个方法中使用、通常将这些常量称为类常量。可以使用关键字static final设置一个类常量。下面是使用类常量的示例:

public static final double PI = 3.14;

 

3.4 运算符

Java中,使用算术运算符+、一、*/表示加、减、乘、除运算。当参与/运算的两个操作数都是整数时,表示整数除法;否则.表示浮点除法。整数的求余操作(有时称为取模)用%表示。例如,15/2等于715%2等于115.0/2等于7.5

需要注意,整数被0除将会产生一个异常,而浮点数被0除将会得到无穷大或NaN结果。

可以在赋值语句中采用一种简化的格式书写二元算术运算符。

例如,

X+=4;

等价于

X=X+4;


(通常,将运算符放在赋值号的左侧,如*=%=。)

 

Java 关键字strictfpstrict float point):精确浮点

标注在main方法,使用严格的浮点精确计算。

由于处理器的差异,运算可能存在差异。例如很多Intel处理器计算x*y,将结果存储在80位的寄存器中,再除以z并将结果截断为64位。这样可以得到更加精确的结果,还能避免产生指数溢出。但是这个结果可能与始终在64位机器计算的结果不一样。

因此,Java虚拟机默认情况下,允许将中间结果采用扩展的精度。但是对于用strictfp关键字标记的方法必须使用严格的浮点计算产生理想的结果。

默认情况下不会产生溢出,严格计算可能产生溢出

 

3.4.1 自增运算符与自减运算符

int n =1;

System.out.print(++n); //print 2

System.out.print(n++); //print 2

System.out.print(n); //print 3

 

3.4.2 关系运算符与boolean运算符

>   <   //大于小于

=>   <=  //大于等于  小于等于

==    ===//等于   

X<y? x:y;   //三目运算符  true xfalsey

 

3.4.3 位运算符

3.4.4 数学函数与常量

3.4.5 数值之间的转换

3.4.6 强制类型转换

3.4.7 括号与运算符级别

 

 

 

3.4.8 枚举类型

枚举类型表示改变量只在一个有限的集合内。

例如,销售的服装或披萨饼只有小、中、大和超大这四种尺寸。当然可以将这些尺寸分别编码为1234SMLXL。但是这样存在可能保存是一个错的值,如0m

针对这种情况可以自定枚举类型,如

Enum Size {SMALL,MEDIUM,LARGE,EXTRA_LARGE}

 

 

3.5 字符串

从概念上讲,Java字符串就是Unicode字符串序列。

String不是Java内置数据类型。知识在标准Java类库中提供了一个预定义类。

3.5.1 子串

3.5.2 拼接

3.5.3 不可变字符串

3.5.4 检测字符串是否相等

3.5.5 空串与Null

3.5.6 代码点与代码单元

3.5.7 字符串API

3.5.8 阅读联机API文档

3.5.9 构建字符串

3.6 输入输出

posted @ 2021-12-30 14:28  猪小qin  阅读(147)  评论(0)    收藏  举报