一,包装类
什么是包装类:
包装类是对于八种基本数据类型而言的,八种数据类型都有其对应的包装类。
以前定义变量,经常使用基本数据类型,对于基本数据类型来说,它就是一个数,加点属性,加点方法,加点构造器。
将基本数据类型对应进行了一个封装,产生了一个新的类,--->包装类。注:包装类是引用数据类型。
包装类后可以对包装后的数据进行.+方法的操作,可对该数据进行原本基本数据不能进行的操作。
int,byte.....--->基本数据类型
包装类--->引用数据类型
基本数据类型和包装类的对应关系:
基本数据类型 对应的包装类 继承关系
byte Byte ---》Number---》Object
short Short ---》Number---》Object
int Integer ---》Number---》Object
long Long ---》Number---》Object
float Float ---》Number---》Object
double Double ---》Number---》Object
char Character Object
boolean Boolean Object
为什么需要包装类:
1.基本数据类型不具备面向对象思想(不能对象.调用方法())。
2.Java中集合需要将数据类型转换为引用数据类型才可以使用集合。
包装类特有的机制:自动装箱 自动拆箱:
//自动装箱:int--->Integer
Integer i = 12;
System.out.println(i);
//自动拆箱:Integer--->int
Integer i2 = new Integer(12);
int num = i2;
System.out.println(num);
二,字符串处理类
Java中字符串处理类种类:
Java中准备的字符串处理类一共有3种:
String: 不可变的字符串 (对内容进行修改,会新增地址,不变的是地址对于的值不变)
StringBuffer: 可变字符串 ,线程安全的, 效率低
StringBuilder:可变字符串 ,线程不安全, 效率高
补:字符串处理类拥有的方法基本相同。
补: 可变和不可变、
不可变: 一个内存地址只对应一个值; 赋一个值,一个地址就会绑定该数,再赋值会有新地址。(可变不可变原理:存储String时是final类型数组,地址不变,其它可变是因为没有final类型修饰)
可变:一个内存地址可以对应多个值。是指地址不变,改值。对StringBuffer 和 StringBuilder 类型的值进行修改,地址不变。
字符串处理类相关的方法大部分类似,以String为例介绍字符串常用方法
三,字符串处理类常用方法:
获取字符串长度
使用 length() 方法可以获取字符串的长度(字符的个数)。
String str = "Hello, World!";
int length = str.length();
System.out.println("字符串的长度为: " + length); // 输出:字符串的长度为: 13
获取指定位置的字符
使用 charAt() 方法可以获取字符串中指定索引位置的字符。
String str = "Hello";
char ch = str.charAt(1); // 获取索引为1的字符,即 'e'
System.out.println("索引1处的字符为: " + ch); // 输出:索引1处的字符为: e
拼接字符串
使用 concat() 方法或者 + 运算符可以拼接多个字符串。
String str1 = "Hello";
String str2 = "World";
String result = str1.concat(" ").concat(str2);
System.out.println("拼接后的字符串为: " + result); // 输出:拼接后的字符串为: Hello World
字符串比较
使用 equals() 方法或者 compareTo() 方法可以比较字符串是否相等或者大小关系。
String str1 = "hello";
String str2 = "Hello";
if (str1.equals(str2)) {
System.out.println("字符串相等");
} else {
System.out.println("字符串不相等");
}
// 使用 compareTo() 比较大小关系
int comparison = str1.compareTo(str2);
if (comparison == 0) {
System.out.println("字符串相等");
} else if (comparison < 0) {
System.out.println("str1 小于 str2");
} else {
System.out.println("str1 大于 str2");
}
查找子字符串
使用 indexOf() 方法可以查找子字符串在原字符串中第一次出现的位置。
String str = "Hello, World!";
int index = str.indexOf("World");
System.out.println("子字符串在原字符串中的位置为: " + index); // 输出:子字符串在原字符串中的位置为: 7
切割字符串
使用 split() 方法可以根据指定的分隔符将字符串分割成子字符串数组。
String str = "apple,orange,banana";
String[] fruits = str.split(",");
for (String fruit : fruits) {
System.out.println("水果: " + fruit);
}
// 输出:
// 水果: apple
// 水果: orange
// 水果: banana
字符串替换
使用 replace() 方法可以替换字符串中的指定字符或字符串。
String str = "Hello, World!";
String replaced = str.replace("Hello", "Hi");
System.out.println("替换后的字符串为: " + replaced); // 输出:替换后的字符串为: Hi, World!
字符串转换大小写
使用 toUpperCase() 和 toLowerCase() 方法可以将字符串转换为大写或小写。
String str = "Hello, World!";
String upperCase = str.toUpperCase();
String lowerCase = str.toLowerCase();
System.out.println("大写字符串: " + upperCase);
System.out.println("小写字符串: " + lowerCase);
// 输出:
// 大写字符串: HELLO, WORLD!
// 小写字符串: hello, world!
四,异常处理机制:
作用/目的: 保证程序不是因为一些小问题就终止,而是可以正常运行
异常的分类:
异常处理机制可以根据处理方式和异常类型进行分类。在Java中,异常主要分为两类:已检查异常(Checked Exceptions)和未检查异常(Unchecked Exceptions)。
1. 已检查异常 (Checked Exceptions)
已检查异常是指编译器在编译时强制检查的异常,必须在代码中显式处理或声明抛出。通常情况下,这些异常是由外部因素(如文件不存在、网络连接中断等)导致的,程序本身无法避免或预料到的情况。
例:IOException:处理文件操作中的输入输出异常,如文件不存在、读写权限问题等。
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class CheckedExceptionExample {
public static void main(String[] args) {
try {
BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
String line = reader.readLine();
System.out.println("读取的内容: " + line);
reader.close();
} catch (IOException e) {
System.out.println("文件操作出错: " + e.getMessage());
}
}
}
2. 未检查异常 (Unchecked Exceptions也称运行异常:Runtime Exceptions)
未检查异常是指编译器在编译时不强制检查的异常,也称为运行时异常。这类异常通常是由程序错误引起的若未处理会导致程序终止,如空指针引用、数组下标越界等,通常应通过编码规范和测试来避免。
例:
NullPointerException:当程序试图访问一个空对象的成员变量或方法时抛出。
public class UncheckedExceptionExample {
public static void main(String[] args) {
String str = null;
try {
System.out.println("字符串长度: " + str.length()); // 这里会抛出 NullPointerException
} catch (NullPointerException e) {
System.out.println("发生空指针异常: " + e.getMessage());
}
}
}
异常处理的两种应对方案:
第一种:try catch方法:
主要用于“出现的问题,我能解决”(即我可以发现明确知道那些代码可能会出哪些对应错误)用于捕获和处理异常,允许在发生异常时执行特定的代码块。
使用方法
try{//try复制监控异常,在try的大括号中写入可能出现异常的代码
}catch(){//catch捕获异常
}finally{//善后异常(一般来讲都是对一些占有资源的关闭)finally中的代码一定执行,不管有没有报错。
}
注:try里代码没有问题:不执行任何catch,执行finally,
有问题:执行类型匹配的catch块内容,执行finally
没有找到匹配的catch,扔执行finally,报错
第二种:throws方法
用于:“出现的问题,解决不了”即不清楚会出什么错误,用于方法声明中,表示方法可能抛出的异常类型,让调用者处理异常。。
直接在方法或类声明时在后方加 throws +异常类型
五,常见Runtime异常:
NullPointerException(空指针异常):
当试图访问一个空对象的成员变量或者调用空对象的方法时抛出。
常见原因包括未初始化对象引用、调用返回空值的方法并试图使用其结果、显式设置为null的对象等。
ArrayIndexOutOfBoundsException(数组越界异常):
当尝试访问数组中不存在的索引位置时抛出。
常见原因包括使用超出数组长度的索引、使用负数索引、在尝试访问数组之前未对其进行初始化等。
ClassCastException(类转换异常):
当试图将一个对象强制转换为不是其子类的类类型时抛出。
常见原因包括将对象转换为其实际类型不兼容的类型、在继承结构中转换类型时出现问题等。
NumberFormatException(数字格式异常):
当试图将一个字符串转换为数值类型(如int、float、double等)但字符串的格式不正确时抛出。
常见原因包括字符串包含无法转换为数字的字符、字符串为空或不包含有效的数字字符等。
FileNotFoundException(文件未找到异常):
当试图打开一个不存在的文件时抛出。
常见原因包括文件路径错误、文件不存在或者无法被当前程序访问等。
ArithmeticException(算术异常):
当发生数学运算错误时抛出,例如除数为零。
常见原因包括试图将一个数除以零、在数学计算中出现溢出等。
IOException(输入输出异常):
当发生输入输出操作失败或被中断时抛出,是许多其他I/O异常的父类。
常见原因包括文件操作期间发生错误、网络操作失败、设备断开连接等。
RuntimeException(运行时异常):
是所有运行时异常的父类,通常不需要显式捕获或声明。
包括诸如NullPointerException、ArrayIndexOutOfBoundsException等在内的许多常见异常都属于RuntimeException的子类。