Java高级特性:泛型、集合框架和异常处理

Java高级特性:泛型、集合框架和异常处理

引言

在前两篇文章中,我们探讨了Java的基本语法和面向对象编程(OOP)特性。在本篇文章中,我们将深入研究Java的一些高级特性,包括泛型、集合框架和异常处理。这些特性可以帮助你编写更加灵活和健壮的代码。

泛型(Generics)

泛型允许类、接口和方法操作任意类型(类型参数),从而提高代码的重用性和类型安全性。

泛型类

定义一个泛型类时,可以使用类型参数,例如 T

java 复制代码
public class Box<T> {
    private T content;

    public void setContent(T content) {
        this.content = content;
    }

    public T getContent() {
        return content;
    }

    public static void main(String[] args) {
        Box<String> stringBox = new Box<>();
        stringBox.setContent("Hello");
        System.out.println("String Box: " + stringBox.getContent());

        Box<Integer> intBox = new Box<>();
        intBox.setContent(123);
        System.out.println("Integer Box: " + intBox.getContent());
    }
}

泛型方法

泛型方法允许方法在被调用时指定类型参数:

java 复制代码
public class GenericMethodExample {
    public static <T> void printArray(T[] array) {
        for (T element : array) {
            System.out.println(element);
        }
    }

    public static void main(String[] args) {
        Integer[] intArray = {1, 2, 3, 4, 5};
        String[] strArray = {"A", "B", "C"};

        System.out.println("Integer Array:");
        printArray(intArray);

        System.out.println("String Array:");
        printArray(strArray);
    }
}

有界类型参数

你可以限制泛型类型参数的范围:

java 复制代码
public class BoundedTypeParameterExample {
    public static <T extends Number> void printNumber(T number) {
        System.out.println("Number: " + number);
    }

    public static void main(String[] args) {
        printNumber(123);  // Integer
        printNumber(45.67);  // Double
        // printNumber("Hello");  // 编译错误
    }
}

集合框架(Collections Framework)

Java集合框架提供了一组类和接口来存储和操作数据元素。常用的集合包括ListSetMap

List

List是一个有序的集合,允许重复元素。常用的实现类有ArrayListLinkedList

java 复制代码
import java.util.ArrayList;
import java.util.List;

public class ListExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Orange");

        System.out.println("List: " + list);

        for (String fruit : list) {
            System.out.println("Fruit: " + fruit);
        }

        list.remove("Banana");
        System.out.println("List after removal: " + list);
    }
}

Set

Set是一个不允许重复元素的集合。常用的实现类有HashSetTreeSet

java 复制代码
import java.util.HashSet;
import java.util.Set;

public class SetExample {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        set.add("Apple");
        set.add("Banana");
        set.add("Orange");
        set.add("Apple");  // 重复元素

        System.out.println("Set: " + set);

        for (String fruit : set) {
            System.out.println("Fruit: " + fruit);
        }

        set.remove("Banana");
        System.out.println("Set after removal: " + set);
    }
}

Map

Map是一个键值对集合。常用的实现类有HashMapTreeMap

java 复制代码
import java.util.HashMap;
import java.util.Map;

public class MapExample {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("Apple", 1);
        map.put("Banana", 2);
        map.put("Orange", 3);

        System.out.println("Map: " + map);

        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
        }

        map.remove("Banana");
        System.out.println("Map after removal: " + map);
    }
}

异常处理(Exception Handling)

异常处理是Java中的一个重要机制,用于处理程序执行过程中发生的异常情况。Java提供了多种异常类以及try-catch语句来处理异常。

try-catch 语句

使用try-catch语句可以捕获并处理异常:

java 复制代码
public class ExceptionHandlingExample {
    public static void main(String[] args) {
        try {
            int result = divide(10, 0);
            System.out.println("Result: " + result);
        } catch (ArithmeticException e) {
            System.out.println("Exception caught: " + e.getMessage());
        }
    }

    public static int divide(int a, int b) {
        return a / b;
    }
}

多个catch块

你可以使用多个catch块来捕获不同类型的异常:

java 复制代码
public class MultipleCatchExample {
    public static void main(String[] args) {
        try {
            int[] numbers = {1, 2, 3};
            System.out.println(numbers[5]);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Array index out of bounds: " + e.getMessage());
        } catch (Exception e) {
            System.out.println("Exception caught: " + e.getMessage());
        }
    }
}

finally块

finally块中的代码总是会执行,无论是否发生异常:

java 复制代码
public class FinallyBlockExample {
    public static void main(String[] args) {
        try {
            int result = divide(10, 0);
            System.out.println("Result: " + result);
        } catch (ArithmeticException e) {
            System.out.println("Exception caught: " + e.getMessage());
        } finally {
            System.out.println("This is the finally block.");
        }
    }

    public static int divide(int a, int b) {
        return a / b;
    }
}

自定义异常

你可以创建自己的异常类:

java 复制代码
class CustomException extends Exception {
    public CustomException(String message) {
        super(message);
    }
}

public class CustomExceptionExample {
    public static void main(String[] args) {
        try {
            checkAge(15);
        } catch (CustomException e) {
            System.out.println("Exception caught: " + e.getMessage());
        }
    }

    public static void checkAge(int age) throws CustomException {
        if (age < 18) {
            throw new CustomException("Age must be at least 18");
        }
    }
}

总结

在本篇文章中,我们深入探讨了Java的高级特性,包括泛型、集合框架和异常处理。泛型使得代码更加灵活和类型安全,集合框架提供了丰富的数据结构,而异常处理则帮助我们编写健壮的代码。掌握这些特性将极大地提升你的Java编程技能。

在接下来的文章中,我们将继续探索Java的更多高级特性和实际应用,包括并发编程、文件I/O和网络编程等。希望你能继续关注并享受学习的过程!

如果你有任何问题或需要进一步的解释,请在评论区留言。我们将尽快回复。感谢阅读!

相关推荐
愚润求学2 分钟前
【C++】模板进阶
c语言·开发语言·c++·笔记·模板
天若有情6736 分钟前
【Python】什么是列表推导式?
开发语言·python
xyd陈宇阳17 分钟前
C++ 入门三:函数与模板
开发语言·c++
星之卡比*17 分钟前
前端知识点---闭包(javascript)
开发语言·前端·javascript
东方芷兰26 分钟前
JavaWeb 课堂笔记 —— 03 Vue
java·前端·javascript·vue.js·笔记
oioihoii39 分钟前
C++23新特性详解:迈向更现代化的C++
开发语言·c++·c++23
TT哇1 小时前
【前缀和】矩阵区域和(medium)
java·线性代数·算法·矩阵
JoshuaGraham1 小时前
Java 并发-newFixedThreadPool
java·开发语言
darkchink1 小时前
[LevelDB]Block系统内幕解析-元数据块(Meta Block)&元数据索引块(MetaIndex Block)&索引块(Index Block)
android·java·服务器·c语言·数据库·c++·分布式