1.基本类型包装类的概述:
将基本数据类型封装成对象的好处在于:可以在对象中定义更多功能方法操作该数据。
常用操作之一:用于基本数据类型与字符串之间的转换。“123”->123
| 基本数据类型 | 包装类 |
|---|---|
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
| boolean | Boolean |
2.Integer类的概述和使用:
public class JavaAdvanced03_Integer {
public static void main(String[] args) {
Integer integer = Integer.valueOf(100);
System.out.println(integer);
Integer integer1 = Integer.valueOf("100");
System.out.println(integer1);
}
}
3.自动装箱和自动拆箱:
装箱:把基本数据类型转换成对应的包装类;
拆箱:把包装类类型转换成对应的基本数据类型。
public class JavaAdvanced03_Integer2 {
public static void main(String[] args) {
//自动装箱:
//自动:Java底层会帮我们自动调用valueof方法
//装箱:把一个基本数据类型变成对应的包装类
Integer integer = 100;
System.out.println(integer);
//自动拆箱:
//拆箱:把一个包装类变成基本数据类型
int integer1 = integer;
System.out.println(integer1);
Integer integer3 = 100; //自动装箱
integer3 += 100; //integer3 = integer3 + 100; 先自动拆箱再自动装箱
System.out.println(integer3);
}
}
4.Integer成员方法:
public class JavaAdvanced03_Integer3 {
public static void main(String[] args) {
String s1 = "100";
int i1 = 200;
int i2 = Integer.parseInt(s1);//可以将字符串类型的整数变成int类型的整数
System.out.println(i1 + i2);
int i3 = 100;
String s2 = i3 + "";//方式一:把int类型变成字符串类型
System.out.println(s2);
int i4 = 100;
String s3 = String.valueOf(i4);//方式二:把int类型变成字符串类型
System.out.println(s3);
}
}
5.Integer案例:
public class JavaAdvanced03_IntegerCase {
public static void main(String[] args) {
String s = "91 27 46 38 50";
String[] split = s.split(" ");
int[] array = new int[5];
for (int i = 0; i < split.length; i++) {
int integer = Integer.parseInt(split[i]);
array[i] = integer;
}
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
}
十六.Java进阶知识之数组的高级操作
1.二分查找:
步骤:
(1)定义两个变量,表述要查找的范围,默认min=0,max=最大索引;
(2)循环查找,但是min<=max;
(3)计算出mid的值;
(4)判断mid位置的元素是否为要查找的元素,如果是直接返回对应索引;
(5)如果要查找的值在mid的左半边,那么min值不变,max=mid-1,继续下次循环查找;
(6)如果要查找的值在mid的右半边,那么max的值不变,min=mid+1,继续下次循环查找;
(7)当min>max,表示要查找的元素不存在。
public class JavaAdvanced03_BinarySearch {
public static void main(String[] args) {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int number = 3;
int index = binarySearchForIndex(arr, number);
System.out.println(index);
}
private static int binarySearchForIndex(int[] arr, int number) {
int min = 0;
int max = arr.length - 1;
while (min <= max) {
int mid = (min + max) / 2;
if (arr[mid] > number) {
max = mid - 1;
} else if (arr[mid] < number) {
min = mid + 1;
}else{
return mid;
}
}
return -1;
}
}
2.冒泡排序:
public class JavaAdvanced03_BubbleSort {
public static void main(String[] args) {
int[] arr = {3, 5, 2, 1, 4};
sort(arr);
}
private static void sort(int[] arr) {
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length-1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
printArr(arr);
}
private static void printArr(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i] + " ");
}
}
}
十七.Java进阶知识之递归
1.递归的概念:
以编程的角度来看,递归指的是方法定义中调用方法本身的现象。
2.递归的案例:
public class JavaAdvanced03_Factorial {
public static void main(String[] args) {
int result = getJc(5);
System.out.println(result);
}
private static int getJc(int i){
//1.一定要找到出口
if(i == 1){
return 1;
}else{
//2.递归的规则
return i*getJc(i-1);
}
}
}
十八.Java进阶知识之Arrays
| 方法名 | 说明 |
|---|---|
| public static String toString(int[] a) | 返回指定数组的内容的字符串表示形式 |
| public static void sort(int[] a) | 按照数字顺序排列指定的数组 |
| public static int binarySearch(int[] a,int key) | 利用二分查找返回指定元素的索引 |
import java.util.Arrays;
public class JavaAdvanced03_Arrays {
public static void main(String[] args) {
int[] arr1 = {3,2,4,1,5};
String s = Arrays.toString(arr1);
System.out.println(s);//[3, 2, 4, 1, 5]
int[] arr2 = {3,2,4,1,5};
Arrays.sort(arr2);
System.out.println(Arrays.toString(arr2));//[1, 2, 3, 4, 5]
int[] arr3 = {1,2,3,4,5};
int index = Arrays.binarySearch(arr3, 4);
System.out.println(index);//3
}
}
十九.Java进阶知识之异常
1.异常的概述:
程序出现了不正常的情况,程序在执行过程中,出现了非正常的情况,最终会导致JVM非正常终止。
2.异常的体系:
Throwable:
Error
Exception:RuntimeException,除RuntimeException外的异常
3.JVM默认处理异常方案:
把异常的名称,异常的原因及异常出现的位置等信息输出在控制台;
程序停止执行。
4.异常处理方式:
(1)throws:
throws 异常类名;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class JavaAdvanced03_throws {
public static void main(String[] args) throws ParseException {
method();
method2();
}
//告诉调用者,我可能出现这样的异常哦!如果方法中没有出现异常,正常执行;如果出现了异常,把这个异常交给了调用者处理
//如果声明的异常是一个运行时异常,那么声明的代码可以省略
private static void method() throws NullPointerException{
int[] a = null;
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
//如果声明的异常是一个编译时异常,那么声明的代码不可以省略
private static void method2() throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
sdf.parse("2022-7-28");
}
}
throw:
throw new 异常()
public class JavaAdvanced03_throw {
public static void main(String[] args) {
System.out.println(1);
System.out.println(1);
System.out.println(1);
System.out.println(1);
throw new RuntimeException();//下面的代码不会执行
//System.out.println(1);
}
}
(2)try...catch:
try{
可能出现异常的代码;
}catch(异常类名 变量名){
异常处理的代码;
}
public class JavaAdvanced03_tryCatch {
public static void main(String[] args) {
int[] arr = null;
//好处:为了能让代码继续往下运行
try{
printArr(arr);
}catch (NullPointerException e){
System.out.println("参数不能为空");
}
System.out.println("我最帅");
}
private static void printArr(int[] arr) {
if(arr == null){
throw new NullPointerException();
}else{
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
}
注意点:
(1)如果try中没有遇到问题:不会执行catch里面的代码;
import java.util.Scanner;
public class JavaAdvanced03_tryCatch2 {
public static void main(String[] args) {
try {
Scanner sc = new Scanner(System.in);
System.out.println("年龄:");
String line = sc.nextLine();
int age = Integer.parseInt(line);
System.out.println(age);//执行
System.out.println("测试1");//执行
} catch (NumberFormatException e) {
System.out.println("执行了吗?");//不执行
}
System.out.println("测试2");//执行
}
}
(2)如果try中遇到了问题:直接跳转到catch语句中,try中的代码不再执行;
import java.util.Scanner;
public class JavaAdvanced03_tryCatch2 {
public static void main(String[] args) {
try {
Scanner sc = new Scanner(System.in);
System.out.println("年龄:");
String line = sc.nextLine();
int age = Integer.parseInt(line);
System.out.println(age);//不执行
System.out.println("测试1");//不执行
} catch (NumberFormatException e) {
System.out.println("执行了吗?");//执行
}
System.out.println("测试2");//执行
}
}
(3)如果出现的问题没有捕获到:try...catch相当于没有写,默认交给虚拟机;
import java.util.Scanner;
public class JavaAdvanced03_tryCatch2 {
public static void main(String[] args) {
try {
Scanner sc = new Scanner(System.in);
System.out.println("年龄:");
String line = sc.nextLine();
int age = Integer.parseInt(line);
System.out.println(age);//不执行
System.out.println("测试1");//不执行
} catch (NullPointerException e) {
System.out.println("执行了吗?");//不执行
}
System.out.println("测试2");//不执行
}
}
(4)同时有可能多个异常:写多个catch;
import java.util.Scanner;
public class JavaAdvanced03_tryCatch2 {
public static void main(String[] args) {
try {
Scanner sc = new Scanner(System.in);
System.out.println("年龄:");
String line = sc.nextLine();
int age = Integer.parseInt(line);
System.out.println(age);
System.out.println(2 / 0);
} catch (NumberFormatException e) {
System.out.println("格式化异常");
} catch (ArithmeticException e) {
System.out.println("数学运算异常");
}
System.out.println("测试");
}
}
5.throws和throw的区别:
| throws | throw |
|---|---|
| 用在方法声明后面,跟的是异常类名 | 用在方法体内,跟的是异常对象名 |
| 表示声明异常,调用该方法有可能会出现这样的异常 | 表示手动抛出异常对象,由方法体内的语句处理 |
6.抛出异常的意义:
(1)在方法中,当传递的参数有误,没有继续运行下去的意义,则采取抛出处理,表示让方法结束运行。
(2)告诉调用者方法中出现了问题。
7.Throwable的成员方法:
| 方法名 | 说明 |
|---|---|
| public String getMessage() | 返回此异常的详细信息字符串 |
| public String toString() | 返回此可抛出的简短信息 |
| public void printStackTrace() | 把异常的错误信息输出在控制台上 |
public class JavaAdvanced03_throwable {
public static void main(String[] args) {
try {
int[] arr = {1,2,3};
System.out.println(arr[10]);
} catch (ArrayIndexOutOfBoundsException e) {
String message = e.getMessage();
System.out.println(message);
String message1 = e.toString();
System.out.println(message1);
e.printStackTrace();
}
System.out.println("我最帅");
}
}
8.自定义异常:
public class AgeOutOfBoundsException extends RuntimeException{
public AgeOutOfBoundsException() {
}
public AgeOutOfBoundsException(String message) {
super(message);
}
}


