# Java从入门到精通
# 数据类型
# 基本数据类型
- byte: 8位有符号整数
- short: 16位有符号整数
- int: 32位有符号整数
- long: 64位有符号整数
- float: 单精度32位浮点数
- double: 双精度64位浮点数
- char: 单一的16位Unicode字符
- boolean: 1位
包装类型:java为每个内置语言提供了包装类
自动装箱与拆箱: 当内置数据类型被当做对象使用时,编译器会把内置类型装箱
(添加一些方法),当需要计算数值时,编译器会把对象拆箱
为内置类型;
Integer x = 5;
x = x + 10;
# 引用类型
# String
创建字符串
简单方式
String str = "Runoob";
构造函数
String str2=new String("Runoob");
直接创建的字符串在公共池,而new创建的字符串在堆内存中
测试
String s1 = "Runoob"; // String 直接创建
String s2 = "Runoob"; // String 直接创建
String s3 = s1; // 相同引用
String s4 = new String("Runoob"); // String 对象创建
String s5 = new String("Runoob"); // String 对象创建
System.out.println(s1 == s2); // true
System.out.println(s1 == s3); // true
System.out.println(s1 == s4); // false
System.out.println(s4 == s5); // false
注意:
- String类是不可修改的
# StringBuilder
当需要对字符串进行修改时,需要使用StringBuffer
和StringBuilder
两者对比:
StringBuffer
: 线程安全,性能慢,适用于多线程环境StringBuilder
: 非线程安全,性能快,适用于单线程环境
# List
java中的数组用于存储固定大小的同类型元素。
- 声明数组
double[] list;
- 数组初始化两种方式
// 先初始化,后赋值
double[] myList = new double[10];
myList[0] = 5.6;
myList[1] = 4.5;
myList[2] = 3.3;
myList[3] = 13.2;
myList[4] = 4.0;
// 初始化的时候直接赋值
double[] myList2 = {1.9,2.1,2.3,4.5};
- 使用泛型类
List<Double> list = Arrays.asList(1.1, 2.2, 3.3, 4.4);
- 多维数组的初始化
int[][] a = new int[2][3];
# Map
# 类型转换
# 自动转换
低级到高级
低 ------------------------------------> 高
byte,short,char—> int —> long—> float —> double
例如:
byte b = 127;
short s = b;
int i = s;
long l = i;
float f = l;
double d = f;
System.out.println(d);
# 强制转换
高级到低级
int i =128;
byte b = (byte)i;
注意:
- 低级与高级的区别并不是位数,而是能表示的范围,例如long为64位,表示范围
-2^63 到 2^63 - 1
,而float为32位,表示范围-3.4e38 到 3.4e38
- long转float可以自动转换,但是可能会丢失精度
# 数字与字符串互转
# 数字转字符串
String.valueOf()
是最常用的转换方法,它适用于所有的基本数据类型(如int
、double
、float
等)。
int number = 123;
String str = String.valueOf(number);
System.out.println(str); // 输出:123
- 每种基本类型都有相应的
toString()
方法。
int number = 123;
String str = Integer.toString(number);
System.out.println(str); // 输出:123
double pi = 3.14159;
String piStr = Double.toString(pi);
System.out.println(piStr); // 输出:3.14159
String.format()
方法可以将数字格式化为字符串,特别适合需要特定格式的场景。
double number = 123.456;
String str = String.format("%.2f", number);
System.out.println(str); // 输出:123.46
# 字符串转数字
- 基本类型的
Integer.parseInt
,Double.parseDouble
方法
String str = "123";
int number = Integer.parseInt(str);
System.out.println(number); // 输出:123
String piStr = "3.14159";
double pi = Double.parseDouble(piStr);
System.out.println(pi); // 输出:3.14159
- 每种基本类型都有相应的
valueOf()
方法
String str = "123";
Integer number = Integer.valueOf(str);
System.out.println(number); // 输出:123
String piStr = "3.14159";
Double pi = Double.valueOf(piStr);
System.out.println(pi); // 输出:3.14159
# 保留有效数字
# String.format()
String.format()
的格式化参数通过格式说明符(format specifier)来控制输出格式。对于保留两位小数的浮点数,可以使用 %.2f
解释:
%
:标识这是一个格式说明符的开始。.2
:表示保留两位小数。f
:表示格式化的目标是浮点数(float
或double
)。
double value = 123.456789;
String formattedValue = String.format("%.2f", value);
System.out.println(formattedValue); // 输出:123.46
# DecimalFormat
DecimalFormat
的格式化模式使用模式字符串来指定格式。对于保留两位小数,常用的模式是 "#.00"
或 "0.00"
。
#.00
解释:#
:表示可选的数字,有数字就显示,没数字就不显示。.
:表示小数点。00
:表示小数部分至少保留两位数字(不够两位时补0
)。
import java.text.DecimalFormat;
double[] a = {123.456,0.456,0.004,0.0,.45};
DecimalFormat df = new DecimalFormat("#.00");
for (double value: a){
System.out.println(df.format(value));
}
// 输出
123.46
.46
.00
.00
.45
0.00
解释:0
:表示必须有一个数字(如果没有,输出0
)。.00
:表示小数部分必须保留两位数字(不够两位时补0
)。
double[] a = {123.456,0.456,0.004,0.0,.45};
DecimalFormat df = new DecimalFormat("0.00");
for (double value: a){
System.out.println(df.format(value));
}
// 输出
123.46
0.46
0.00
0.00
0.45
# JSON处理
# FastJson
引入依赖, fastjson2比fastjson性能更高
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.52</version>
</dependency>
- JSONObject
String text = "{\"id\": 2,\"name\": \"fastjson2\"}";
JSONObject obj = JSON.parseObject(text);
int id = obj.getIntValue("id");
String name = obj.getString("name");
- JSONArray
String text = "[2, \"fastjson2\"]";
JSONArray array = JSON.parseArray(text);
int id = array.getIntValue(0);
String name = array.getString(1);
# 数据结构
Java的java.util包提供了许多数据结构的实现
# 集合框架(补充)
# Arrays
# Lists
# ArrayList
# LinkedList
# Sets
# HashSet
# TreeSet
# Maps
# HashMap
# TreeMap
# Stack
# Queue
# Heap
# Trees
# 泛型
# 反射
# 注解
# 异常(补充)
# 函数式编程
# 文件IO和Stream(补充)
# FileInputStream
用于从文件读取数据
// 直接使用文件路径
FileInputStream inputStream = new FileInputStream("D:/hello.txt");
// 先创建一个文件对象
File f = new File("D:/hello.txt");
FileInputStream inputStream1 = new FileInputStream(f);