Java核心技术卷1 第10版 笔记
3.3 数据类型
Java是一种强类型语言。必须为每一个变量声明一种类型。在java中,一共有8终基本类型。
3.3.1 整形
类型 | 存储需求 | 取值范围 |
---|---|---|
int | 4字节 | -2 147 483 648 ~ -2 147 483 647 |
short | 2字节 | -32768 ~ -32767 |
long | 8字节 | 很小 ~ 很大 |
byte | 1字节 | -128 ~ 127 |
byte 和 short类型主要用于特定的应用场合,例如:底层的文件处理或者需要控制占用存储空间量的大数组。
- 长整形数值有一个后缀L或者l(如 400000000L)。
- 十六进制数值有一个前缀0x或0X
- 八进制有一个前缀 0
- 从Java7开始,加上前缀0b或者0B就可以写二进制数
3.3.2 浮点类型
类型 | 存储需求 | 取值范围 |
---|---|---|
float | 4字节 | 有效位数6-7位 |
double | 8字节 | 有效位数15位 |
double表示这种类型的数值精度是float类型的两倍。
- float:有一个后缀F或f
- double:后缀为D或d,和不加后缀
下面是用于表示溢出和出错的情况的三个特殊的浮点数值:
- 正无穷大
- 负无穷大
- NaN(不是一个数字)
例如,一个正整数除以0的结果为正无穷大。计算0/0或者负数的平方根结果为NaN。
常量Double.POSITIVE_INFINITY
、Double.NEGATIVE_INFINITY
和Double.NaN
分别表示上面三个特殊的值。
不能使用if(x == Double.NaN)
检测一个特定值是否等于Double.NaN
可以使用if(Double.isNaN(x))
检测
3.3.3 char类型
char类型的字面量值要用单引号括起来。例如:'A'
char类型原本用于表示单个字符,但是有些Unicode字符可以用一个char值描述,另一些则需要两个char值。
转义序列 | 名称 | Unicode值 |
---|---|---|
\b | 退格 | \u0008 |
\t | 制表 | \u0009 |
\n | 换行 | \u000a |
\r | 回车 | \u000d |
\"(一个撇) | 双引号 | \u0022 |
\'(一个撇) | 单引号 | \u0027 |
\\(两个撇) | 反斜杠 | \u005c |
警告:
// \u00A0 is a newline
:会产生一个语法错误,因为读程序时\u00A0会替换为一个换行符。
// Look inside c:\users
:产生一个语法错误,因为\u后面未跟着4个十六进制数。
3.3.4 Unicode和char类型
建议不要再程序中使用char类型,除非确实需要处理UTF-16代码单元。
3.3.5 boolean类型
boolean类型有 true 和 false 两个值。整型值和布尔值之间不能进行相互转换。
3.4 变量
变量名由字母开头并由字母或者数字组成的序列。变量名长度基本没有限制。
提示: 尽管$是一个合法的Java字符,但不要在程序中使用这个字符。它只用在Java编译器或其他工具生成的名字中。
可以在一行中声明多个变量:int i, j;
3.4.1 变量初始化
声明一个变量后,必须用赋值语句对变量进行显示初始化。
int vacationDays;
System.out.println(vacationDays); //错误,没有进行初始化
3.4.2 常量
利用关键字 final 指示常量。关键字 final 表示这个变量只能被赋值一次。一旦被赋值之后,就不能够再更改了。常量名全大写。
public class Test {
public static void main(String[] args) {
final double CM_PER_INCH = 2.54; // 常量
System.out.println(CM_PER_INCH);
}
}
如果希望常量可以在一个类中的多个方法中使用,通常将这个常量称为类常量。使用关键字static final
。
public class Test {
static final double CM_PER_INCH = 2.54; // 类常量
public static void main(String[] args) {
System.out.println(CM_PER_INCH);
demo();
}
public static void demo(){
System.out.println(CM_PER_INCH);
}
}
类常量的定义位于方法的外部。如果一个常量被声明为public,那么其他类的方法也可以使用这个常量。
3.5 运算符
当参加 / 运算的两个操作数都是整数时,表示整数除法;否则,表示浮点除法。
整数被0除会产生一个异常,而浮点数被0除将会得到无穷大或NaN结果。
3.5.1 数学函数与常量
Java中没有幂运算,要用Math类的pow方法。
double y = Math.pow(x,a);
将x的a次幂赋值给y,pow方法有两个double类型的参数,其返回结果也为double。
3.5.3 强制类型转换
double x = 9.886;
int nx = (int) x;
强制类型转换通过截断小数部分将浮点值转换为整形。
3.5.4 结合赋值和运算符
如果运算符得到一个值,其类型与左侧操作数的类型不同,就会发生强制类型转换。如果x是一个int,则x += 3.5;
,将把x设置为(int)(x + 3.5)
.
3.5.5 自增与自减运算符
public class Test {
public static void main(String[] args) {
int m = 7;
int n = 7;
int a = 2 * ++m; // a = 16, n = 8
int b = 2 * n++; // b = 14, n = 8
}
}
3.5.8 括号与运算符级别
运算符 | 结合性 |
---|---|
[].()(方法调用) | 从左向右 |
! ~ ++ -- +(一元运算) -(一元运算)()(强制类型转换) new | 从右向左 |
* / % | 从左向右 |
+ - | 从左向右 |
<< >> >>> | 从左向右 |
< <= > >= instanceof | 从左向右 |
= = != | 从左向右 |
& | 从左向右 |
^ | 从左向右 |
| | 从左向右 |
&& | 从左向右 |
|| | 从左向右 |
?: | 从右向左 |
= += -= *= /= %= &= |= ^= <<= >>= >>>= | 从右向左 |
3.5.9 枚举类型
enum Size{SMALL, MEDIUM, LARGE, EXTRA_LARGE};
3.6 字符串
Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类,叫String。
3.6.1 字串
String类的substring方法可以从一个较大的字符串中提取出一个字串。
String greeting = "hello";
String s = greeting.substring(0, 3); // hel
3.6.3 不可变字符串
String类没有提供用于修改字符串的方法,所有在Java文档中将String类对象称为不可变字符串。
3.6.4 检验字符串是否相等
使用equals方法检验两个字符串是否相等。
使用equalsIgnoreCase方法,不区分大小写
== 运算符检测两个字符串是否指向同一个对象,但是出现相同内容的多个字符串在不同的位置上,结果为false.
3.6.5 空串与Null串
空串 "" 是长度为0的字符串。
3.6.7 String API
char charAt(int index)
返回给定位置的字符
String str = "hello"; char ch = str.charAt(1); System.out.println(ch); // e
int codePointAt(int index)
返回给定位置字符的ASCII码值
String str = "abc"; int s = str.codePointAt(2); System.out.println(s); // 99
int compareTo(String other)
字符串比较函数
String str = "bcd"; String str2 = "cc"; int i = str.compareTo(str2); System.out.println(i);
如果字符串 str 小于 str2,返回一个负数
如果字符串 str 等于 str2,返回0
如果字符串 str 大于 str2,返回一个正数
boolean equals(Object other)
判断字符串是否与other 相等,返回true.
boolean equalsIgnoreCase(String other)
判断字符串是否与other相等(忽略大小写),返回true
boolean startsWith(String prefix)
判断字符串是否以 prefix 字符串 开头
String str = "abcd"; boolean is = str.startsWith("ab"); System.out.println(is); // true
boolean endsWith(String suffix)
判断字符串是否以 suffix 字符串结尾
String str = "abcd"; boolean is = str.endsWith("cd"); System.out.println(is); // true
int indexOf(String str)
String str = "abcdabcd"; int n = str.indexOf('d'); System.out.println(n); // 3 int k = str.indexOf('e'); System.out.println(k); // -1
int indexOf(int cp)
String str = "abcdabcd"; int i = str.indexOf("abc", 3); System.out.println(i); // 4 i = str.indexOf("abc", 0); System.out.println(i); // 0 i = str.indexOf("ddd", 0); System.out.println(i); // -1
int indexOf(int cp)
String str = "abcdabcdA"; int i = str.indexOf(97); System.out.println(i); // 0 i = str.indexOf(65); System.out.println(i); // 8 i = str.indexOf(70); System.out.println(i); // -1
int index (int cp, int fromIndex)
String str = "abcdabcdA"; int i = str.indexOf(97, 1); System.out.println(i); // 4 i = str.indexOf(65, 6); System.out.println(i); // 8 i = str.indexOf(70, 0); System.out.println(i); // -1
返回与字符串 str 或 ASCII匹配的最后的最后一个字串的开始位置。这个位置从原始串尾端或fromIndex开始计算。
int length()
返回字符串的长度
int codePointCount(int startIndex, int endIndex)
返回 开始到结束-1 之间字符个数
String str = "abcdabcdA"; int i = str.codePointCount(0, 5); System.out.println(i); // 5
String replace(CharSequence oldString, CharSequence newString)
返回一个新字符串。这个字符串用newString 代替原始字符串中的所有 oldString。可以用 String 或 StringBuilder 对象作为CharSequence 参数。
String str = "abcdabcd"; String str2 = str.replace("abc", "123"); System.out.println(str2); // 123d123d
String substring(int beginIndex)
String str = "abcd123"; String str2 = str.substring(3); System.out.println(str2); // d123
String substring(int beginIndex, int endIndex)
String str = "abcd123"; String str2 = str.substring(3, 5); System.out.println(str2); // d1
返回一个新的字符串。这个字符串包含原始字符串中从 beginIndex 到串尾或 endIndex-1 的所有字符。
String toLowerCase()
String str = "abcd123ABC"; String str2 = str.toLowerCase(); System.out.println(str2); //abcd123abc
String toUpperCase()
String str = "abcd123ABC"; String str2 = str.toUpperCase(); System.out.println(str2); //ABCD123ABC
返回一个新的字符串。这个字符串将原始字符串中的大写字母改为小写,或者将原始字符串中的所有小写字母改成大写字母。
String trim()
返回一个新的字符串。这个字符串将删除了原始字符串头部和尾部的空格。
String str = " abcd123ABC "; String str2 = str.trim(); System.out.println(str2); //abcd123ABC
String join(CharSequence delimiter, CharSequence... elements)
返回一个新字符串,用给定的定界符连接所有元素
String[] arrStr = new String[]{"a", "b", "c"}; System.out.println(String.join("-",arrStr)); // a-b-c
3.6.9 构建字符串
按键或者来自文件中的单词。采用字符串连接的方式达到此目的的效率比较低。每次连接字符串,都会构建一个新的String 对象,既耗时,又浪费时间。使用 StringBuilder 类就可以避免这个问题的发生。
char ch = 'a';
String str = "bcd";
StringBuilder builder = new StringBuilder();
builder.append(ch);
builder.append(str);
String completedString = builder.toString();
System.out.println(completedString); // abcd
在JDK5.0中引入StringBuilder 类。这个类的前身是StringBuffer,其效率稍有些低,但允许多线程的方式执行添加或删除字符的操作。如果所有字符串在一个单线程中编辑,则应该用StringBuilder替代它。
StringBuilder API
StringBuilder()
构造一个空的字符串构建器
StringBuilder builder = new StringBuilder();
int length()
返回构建器或缓冲器中的字符个数
StringBuilder append(String str)
追加一个字符串(追加到末尾)并返回this
StringBuilder append(char c)
追加一个代码单元(字符)并返回this
StringBuilder appendCodePoint(int cp)
追加一个代码单元,并将其转为一个或两个代码单元并返回this
char ch = 'a'; String str = "bcd"; StringBuilder builder = new StringBuilder(); builder.append(ch); builder.append(str); builder.append(65); builder.appendCodePoint(66); System.out.println(builder); // abcd65B
void setCharAt(int i, char c)
将第 i 个代码单元设置为c
char ch = 'a'; String str = "bcd"; StringBuilder builder = new StringBuilder(); builder.append(ch); builder.append(str); builder.setCharAt(1, 'e'); System.out.println(builder); // aecd
StringBuilder insert(int offset, String str)
在offset位置插入一个字符串并返回this
char ch = 'a'; String str = "bcd"; StringBuilder builder = new StringBuilder(); builder.append(ch); builder.append(str); System.out.println(builder); // abcd builder.insert(2, "123"); System.out.println(builder); // ab123cd
StringBuilder insert(int offset, Char c)
在offset位置插入一个代码单元并返回this
char ch = 'a'; String str = "bcd"; StringBuilder builder = new StringBuilder(); builder.append(ch); builder.append(str); System.out.println(builder); // abcd builder.insert(2, '1'); System.out.println(builder); // ab1cd
String toString()
返回一个与构建器或缓冲器内容相同的字符串
char ch = 'a'; String str = "bcd"; StringBuilder builder = new StringBuilder(); builder.append(ch); builder.append(str); System.out.println(builder.toString()); // abcd
StringBuilder delete(int startIndex, int endIndex)
删除偏移量从startIndex到 endIndex-1 的代码单元并返回this
char ch = 'a'; String str = "bcd"; StringBuilder builder = new StringBuilder(); builder.append(ch); builder.append(str); System.out.println(builder.toString()); // abcd builder.delete(1, 2); System.out.println(builder); // acd
3.7 输入输出
3.7.1 读取输入
想要通过控制台进行输入,首先需要构建一个Scanner 对象,并与 “标准输入流” System.in 关联。
Scanner in = new Scanner(System.in);
nextLine 方法将输入一行。
nextInt 读取一个整数
Scanner API
Scanner(InputStream in)
用给定的输入流创建一个 Scanner 对象
Scanner scan = new Scanner(System.in);
String nextLine()
读取输入的下一行内容
Scanner scan = new Scanner(System.in); System.out.println(scan.nextLine()); // 控制台输入 aaa bbb ccc // 控制台输出 aaa bbb ccc
String next()
读取输入的下一个单词(以空格作为分隔符)
Scanner scan = new Scanner(System.in); System.out.println(scan.next()); // 控制台输入 aaa bbb ccc // 控制台输出 aaa
int nextInt()
Scanner scan = new Scanner(System.in); System.out.println(scan.nextInt()); // 控制台输入 123 23 // 控制台输出 123
double nextDouble()
Scanner scan = new Scanner(System.in); System.out.println(scan.nextDouble()); // 控制台输入 123 // 控制台输出 123.0 // 控制台输入 123.0 // 控制台输出 123.0
读取并转换下一个表示整数或浮点数的字符序列
boolean hasNext()
检测输入中是否还有其他单词(是否有输入),如果有为true
boolean hasNextInt()
boolean hasNextDouble()
检测是否还有表示整数或浮点数的下一个字符序列。
Java核心技术卷1 第10版 笔记的更多相关文章
- Java核心技术·卷 II(原书第10版)分享下载
Java核心技术·卷 II 内容介绍 Java领域最有影响力和价值的著作之一,由拥有20多年教学与研究经验的资深Java技术专家撰写(获Jolt大奖),与<Java编程思想>齐名,10余年 ...
- 《Java核心技术·卷Ⅰ:基础知识(原版10》学习笔记 第5章 继承
<Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 目录 <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 5.1 类.超类和子类 5.1 ...
- 《Java核心技术 卷II 高级特性(原书第9版)》
<Java核心技术 卷II 高级特性(原书第9版)> 基本信息 原书名:Core Java Volume II—Advanced Features(Ninth Edition) 作者: ( ...
- 《Java核心技术卷I》观赏指南
Tomxin7 如果你有想看书的计划,但是还在纠结哪些书值得看,可以简单看看"观赏指南"系列,本文会简单列出书中内容,给还没有买书的朋友提供一个参考. 前言 秋招过去很久了,虽然在 ...
- 《Java核心技术卷1》拾遗
之前对Java的基础知识有过学习,现在开始学习<Java核心技术卷1>,将一些新学的知识点,做简要记录,以备后续回顾: 1.double (1)所有的“非数值”都认为是不相同的 if(x= ...
- java的优点和误解 《java核心技术卷i》第一章
<java核心技术卷i>第一章主要内容包括三点: 1:Java白皮书的关键术语:描述Java的十一个关键字: 2:Java applet 3 :关于Java的常见误解 1:第一章:Ja ...
- java中的数据类型,运算符,字符串,输入输出,控制流,大数值,数组; 《java核心技术卷i》 第三章:java基本程序结构;
<java核心技术卷i> 第三章:java基本程序结构: 每次看书,去总结的时候,总会发现一些新的东西,这次对于java的数组有了更深的了解: java中的数据类型,运算符,字符串,输入输 ...
- Java核心技术卷阅读随笔--第3章【Java 的基本程序设计结构】
Java 的基本程序设计结构 现在, 假定已经成功地安装了 JDK,并且能够运行第 2 章中给出的示例程序.我们从现在开始将介绍 Java 应用程序设计.本章主要介绍程序设计的基本概念(如数据类型.分 ...
- java系列:《java核心技术 卷1》学习笔记,chapter 11 调试技巧
11. 6 调试技巧 1)一个不太为人所知却非常有效的技巧是在每个类中放一个main方法,这样就可以对每个类进行单元测试.这个方法可以保留,因为在java虚拟机只调用启动类的main方法. 2) ...
随机推荐
- 利用face_recognition,dlib与OpenCV调用摄像头进行人脸识别
用已经搭建好 face_recognition,dlib 环境来进行人脸识别 未搭建好环境请参考:https://www.cnblogs.com/guihua-pingting/p/12201077. ...
- day09-正侧表达式
while True: phone_num = input('please input your phone_num:') if len(phone_num) == 11 \ and phone_nu ...
- scala编程(六)——函数式对象
Rational 的式样书 分数:rational number 是一种可以表达为比率 d n 的数字,这里的 n 和 d 是数字,其中 d 不能为零.n 被称作是分子:numerator,d 被称作 ...
- 关于用struts2框架中iframe对应的jsp页面的不到action的值的问题
我们做web项目经常会用到frameset.frame以及iframe,这大大方便了我们页面的构建以及模块功能的划分.但是,再使用这些技术的同时也会遇到各种各样的问题,其中一个就是子页面中得不到str ...
- java 的ConcurrentHashMap底层数据结构
集合是编程中最常用的数据结构.而谈到并发,几乎总是离不开集合这类高级数据结构的支持.比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap).这篇文章主 ...
- SQL热备原理
- Java IO: Buffered和Data
作者:Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中Buffered和data的输入输出流,主要涉及以下4个类型的流:Bu ...
- linux centos的安装及一些相关知识的整理
相关知识点 ***网桥:主机和虚拟机之间使用"桥接"网络组网 VMware 0 ***Net适配器:把本地网中虚拟机的ip地址转换为主机的外部网络地址 ***仅主机适 ...
- CPU时间分片、多线程、并发和并行
1.CPU时间分片.多线程? 如果线程数不多于CPU核心数,会把各个线程都分配一个核心,不需分片,而当线程数多于CPU核心数时才会分片. 2.并发和并行的区别 并发:当有多个线程在操作时,如果系统只有 ...
- python可变类型和不可变类型,深拷贝vs浅拷贝
转载:https://www.cnblogs.com/huamingao/p/5809936.html 核心提示: 可变类型 Vs 不可变类型 可变类型(mutable):列表,字典 不可变类型(un ...