# Java从入门到精通

# 数据类型

# 基本数据类型

  • byte: 8位有符号整数
  • short: 16位有符号整数
  • int: 32位有符号整数
  • long: 64位有符号整数
  • float: 单精度32位浮点数
  • double: 双精度64位浮点数
  • char: 单一的16位Unicode字符
  • boolean: 1位

包装类型:java为每个内置语言提供了包装类

OOP_WrapperClass

自动装箱与拆箱: 当内置数据类型被当做对象使用时,编译器会把内置类型装箱(添加一些方法),当需要计算数值时,编译器会把对象拆箱为内置类型;

Integer x = 5;
x = x + 10;

# 引用类型

# String

创建字符串

简单方式

String str = "Runoob";

构造函数

String str2=new String("Runoob");

直接创建的字符串在公共池,而new创建的字符串在堆内存中

java-string

测试

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

当需要对字符串进行修改时,需要使用StringBufferStringBuilder

java-string-buffer

两者对比:

  • 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() 是最常用的转换方法,它适用于所有的基本数据类型(如 intdoublefloat 等)。
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.parseIntDouble.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:表示格式化的目标是浮点数(floatdouble)。
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

# 泛型

# 反射

# 注解

# 异常(补充)

java-exception

# 函数式编程

# 文件IO和Stream(补充)

java-io-stream

# FileInputStream

用于从文件读取数据

// 直接使用文件路径
FileInputStream inputStream = new FileInputStream("D:/hello.txt");

// 先创建一个文件对象
File f = new File("D:/hello.txt");
FileInputStream inputStream1 = new FileInputStream(f);

# FileOutputStream

# 序列化

# 多线程

Last Updated: 11/18/2024, 4:01:47 PM