《java核心技术一 第10版》
链接:https://pan.baidu.com/s/15ECUqcjwDJq_537HPfhX9w 密码:w8oa
基础知识
注释
数据类型
变量
运算符
字符串
输入输出
控制流
大数值
数组
1.注释
需要长篇注释,使用// 或者 /** xxx */
2.数据类型
java是强类型语言,一共8个种基本类型
整型:int short long byte
浮点型: float double
字符类型: char
布尔型: boolean
2.1 整型
注意每个类型的取值范围,防止溢出!!!
int a = 214783645;
double price = a*20 绝对溢出!!!
long +后缀l 40000l
类型 | 存储需求 | 取值范围 |
---|---|---|
int | 4字节 | -214783648~214783648 |
short | 2字节 | -32768~32767 |
long | 8字节 | -9223372036864775808~9223372036864775807 |
byte | 1字节 | -128~127 |
2.2 浮点类型
类型 | 存储需求 | 取值范围 |
---|---|---|
float | 4字节 | 大约 ± 3.402 823 47E+38F (有效位数为 6 ~ 7 位) |
double | 8字节 | 大约 ± 1.797 693 134 862 315 70E+308 (有效位数为 15 位) |
计算误区:
float a=2.0f;
float b=1.9f;
float c=2.0f;
float d=1.1f;
double a1=2.0;
double b1=1.9;
double c1=2.0;
double d1=1.1;
System.out.println("float:"+(a-b));
System.out.println("double:"+(a1-b1));
System.out.println("float:"+(c-d));
System.out.println("double:"+(c1-d1));
System.out.println(2.0-1.9);
System.out.println(2.0-1.1);
一般我们都会认为这个结果很简单就是:0.1, 0.9
然而实际跑出来的结果是:
float:0.100000024
double:0.10000000000000009
float:0.9
double:0.8999999999999999
0.10000000000000009
0.8999999999999999
这种舍入误差的主要 原因是浮点数值采用二进制系统表示, 而在二进制系统中无法精确地表示分数 1/10。 这
就好像十进制无法精确地表示分数 1/3 —样。 如果在数值计算中不允许有任何舍入误差,就应该使用 BigDecimal类
2.3 char类型
char 类型原本用于表示单个字符,
目前一些unicode字符需要两个chat值
‘A’ ---> 编码为65对应的字符常量
“A” ---> 含有一个字符A的字符串
十六进制表示范围:
\u0000 --- \uffff
警告:
Unicode 转义序列会在解析代码之前得到处理
1."\u0022+\u0022” 并不是包含+的字符串 而是 “”+“” 空串
2.// \u000a is a newline 会抛语法错误 因为 \u000a 是换行符
3.// Look inside c:\users 产生一个语法错误, 因为 \u 后面并未跟着 4 个十六进制数
2.4 boolean类型
true false
整型值和布尔值不能互换
2.5 数值之间的转换:
int --> float 精度会丢失
long -- > float 精度会丢失
long --> double 精度会丢失
int a = 123456789;
float b =a;
System.out.println(b);
1.23456792E8
两数相加,先转成同一类型,以最大的类型靠拢。
警告:
如果试图将一个数值从一种类型强制转换为另一种类型, 而又超出了目标类型的 表示范围, 结果就会截断成一个完全不同的值。例如,(byte) 300 的实际值为 44。
int a =214718140;
double b = 240*a;
System.out.println(b);
int a1 =214718140;
double b1 = a1;
double b2 = 240*b1;
System.out.println(b2);
-7253952.0
5.15323536E10
2.6 字符串
substring 提取子字符串 ,substring(a,b) 从a下标开始,b是不想截取的下标
获取的字符串长度:b-a
String str = "Hello";
String s = str.substring(0,3);
s="Hel"
2.6.1 检测字符串是否相等
1. " Hello".equals (greeting);
2.不区分大小写 "Hello".equalsIgnoreCase("hel1o");
2.6.2 String Api
if (str != null && str.lengthO != 0)
• int compareTo(String other)
按照字典顺序, 如果字符串位于 other 之前, 返回一个负数; 如果字符串位于 other 之
后, 返回一个正数; 如果两个字符串相等, 返回 0。
• new String(int[] codePoints, int offset, int count)
用数组中从 offset 开始的 count 个码点构造一个字符串。
• boolean equals(0bject other)
• boolean equalsIgnoreCase(String other) 如果字符串与 other 相等 (忽略大小写,) 返回 tme。
• boolean startsWith(String prefix)
• boolean endsWith(String suffix)
如果字符串以 suffix 开头或结尾, 则返回 true。
• int indexOf(String str)
• int indexOf(String str, int fromlndex)
• int indexOf(int cp)
• int indexOf(int cp, int fromlndex)
返回与字符串 str 或代码点 cp 匹配的第一个子串的开始位置。这个位置从索引 0 或 fromlndex 开始计算。 如果在原始串中不存在 st,r 返回 - 1。
• int 1astIndexOf(String str)
• int 1astIndexOf(String str, int fromlndex)
• int lastindexOf(int cp)
• int 1astindexOf(int cp, int fromlndex)
返回与字符串 str 或代码点 cp 匹配的最后一个子串的开始位置。 这个位置从原始串尾
端或 fromlndex 开始计算。
• int 1ength( )
返回字符串的长度。
• String substring(int beginlndex)
• String substring(int beginlndex, int endlndex)
返回一个新字符串。这个字符串包含原始字符串中从 beginlndex 到串尾或 endlndex-l 的所有代码单元。
• String toLowerCase( )
• String toUpperCase( )
这个字符串将原始字符串中的大写字母改为小写, 或者将原始字 符串中的所有小写字母改成了大写字母。
•String trim( )
返回一个新字符串。 这个字符串将删除了原始字符串头部和尾部的空格。
2.6.3 构建字符串
字符构建器:StringBuilder
StringBuilder builder = new StringBuilder();
builder.append("aaa");
builder.append("bbb");
String comleteString = builder.toString();
"aaabbb"
• StringBuilder()
构造一个空的字符串构建器。
• int length()
返回构建器或缓冲器中的代码单元数量。
• StringBui1der append(String str)
追加一个字符串并返回 this
• StringBui 1der append(char c)
追加一个代码单元并返回 this。
• void setCharAt(int i,char c)
将第 i 个代码单元设置为 c。
• StringBui1der insert(int offset,String str)
在 offset 位置插入一个字符串并返回 this。
• StringBuilder insert(int offset,Char c)
在 offset 位置插入一个代码单元并返回 thi。s
• StringBui1der delete(1nt startindex,int endlndex)
删除偏移量从 startindex 到 endlndex-1 的代码单元并返回 this。
• String toString()
返回一个与构建器或缓冲器内容相同的字符串
2.7 输入输出
2.7.1 读取输入
Scanner in = new Scanner(System.in);
nextLine() : 输入行,可能含有空格
next(): 以空格符隔开
nextInt(): 读取整数
nextDouble(): 读取浮点数
2.7.2 格式化输出
System.out.printf("%,.2f", 10000.0 / 3.0);
3,333.33