第4篇:深入学习Java标准库

 

第4篇:深入学习Java标准库

46f60f5dd8734765a15e9462e9a13d61.jpeg

Java标准库(也称为Java类库)是Java开发中不可或缺的一部分,它提供了一系列的类和接口,帮助我们完成各种编程任务。在本篇文章中,我们将深入学习Java标准库的核心包,包括java.langjava.utiljava.io,以及它们中的一些常用类和接口。


1. Java标准库概述

1.1 什么是Java标准库

Java标准库是Java平台的一部分,它包含了一组预先编写好的类和接口。这些类和接口涵盖了从基本数据类型的处理到文件操作、网络通信、图形用户界面等多个方面。标准库的使用可以大大简化编程工作,提高开发效率。

1.2 标准库的常用包

Java标准库分为多个包,每个包提供了不同功能的类和接口。以下是一些常用的包:

  • java.lang:提供Java语言的基本类,如StringMathObject等。
  • java.util:提供集合框架、日期和时间类等。
  • java.io:处理输入和输出流、文件操作等。

  • 2. java.lang

    java.lang包是Java标准库中的核心包,它包含了Java语言的基本类。这个包中的类在所有Java程序中都可以直接使用,不需要额外导入。

    2.1 String

    String类用于表示和操作字符串。它是不可变的,即一旦创建后,字符串的内容不能更改。String类提供了丰富的方法来处理字符串,如连接、查找、替换等。

    常用方法

  • length():返回字符串的长度。
  • charAt(int index):返回指定索引处的字符。
  • substring(int beginIndex, int endIndex):返回指定子串。
  • toUpperCase():将字符串转换为大写。
  • replace(CharSequence target, CharSequence replacement):替换字符串中的字符。
  • 示例

     

    java

    public class StringExample {
        public static void main(String[] args) {
            String str = "Hello, World!";
            
            System.out.println("字符串长度: " + str.length()); // 输出: 字符串长度: 13
            System.out.println("字符在索引5的位置: " + str.charAt(5)); // 输出: 字符在索引5的位置: ,
            System.out.println("子串: " + str.substring(7, 12)); // 输出: 子串: World
            System.out.println("大写: " + str.toUpperCase()); // 输出: 大写: HELLO, WORLD!
            System.out.println("替换: " + str.replace("World", "Java")); // 输出: 替换: Hello, Java!
        }
    }
    

    java

    2.2 Math

    Math类提供了常用的数学函数,如三角函数、对数函数、平方根等。Math类的方法是静态的,可以直接通过类名调用。

    常用方法

  • abs(double a):返回绝对值。
  • sqrt(double a):返回平方根。
  • pow(double a, double b):返回a的b次方。
  • max(int a, int b):返回两个数中的最大值。
  • 示例

     

    java

    public class MathExample {
        public static void main(String[] args) {
            System.out.println("绝对值: " + Math.abs(-5.5)); // 输出: 绝对值: 5.5
            System.out.println("平方根: " + Math.sqrt(16)); // 输出: 平方根: 4.0
            System.out.println("幂: " + Math.pow(2, 3)); // 输出: 幂: 8.0
            System.out.println("最大值: " + Math.max(10, 20)); // 输出: 最大值: 20
        }
    }
    

    2.3 Object

    Object类是Java类层次结构的根类,所有Java类都直接或间接继承自ObjectObject类提供了一些基本的方法,如equals()hashCode()toString()等。

    常用方法

  • equals(Object obj):比较两个对象是否相等。
  • hashCode():返回对象的哈希码。
  • toString():返回对象的字符串表示。
  • 示例

     

    java

    public class ObjectExample {
        public static void main(String[] args) {
            Object obj1 = new Object();
            Object obj2 = new Object();
            
            System.out.println("对象1的哈希码: " + obj1.hashCode()); // 输出: 对象1的哈希码: (具体值)
            System.out.println("对象1和对象2相等: " + obj1.equals(obj2)); // 输出: 对象1和对象2相等: false
            System.out.println("对象1的字符串表示: " + obj1.toString()); // 输出: 对象1的字符串表示: java.lang.Object@...
        }
    }
    

    java


    3. java.util

    java.util包提供了各种有用的工具类,包括集合框架、日期和时间类等。

    3.1 Collection接口和实现类

    Collection接口是Java集合框架的根接口,所有集合类都实现了这个接口。集合框架包括多个接口和类,如ListSetMap等。

    常用接口

  • List:有序集合,可以包含重复的元素。
  • Set:不允许重复的元素。
  • Map:键值对集合,每个键唯一。
  • 示例

     

    java

    import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.HashMap;
    
    public class CollectionExample {
        public static void main(String[] args) {
            // List的使用
            ArrayList<String> list = new ArrayList<>();
            list.add("Java");
            list.add("Python");
            list.add("C++");
            System.out.println("List内容: " + list);
    
            // Set的使用
            HashSet<String> set = new HashSet<>();
            set.add("Java");
            set.add("Python");
            set.add("Java"); // 不会添加重复元素
            System.out.println("Set内容: " + set);
    
            // Map的使用
            HashMap<String, String> map = new HashMap<>();
            map.put("1", "Java");
            map.put("2", "Python");
            System.out.println("Map内容: " + map);
        }
    }
    

    java

    3.2 ListSetMap的使用

     

    示例

     

    java

    import java.util.Date;
    
    public class DateExample {
        public static void main(String[] args) {
            Date date = new Date();
            System.out.println("当前日期和时间: " + date);
            System.out.println("时间戳: " + date.getTime());
        }
    }
    

    Calendar

    Calendar类提供了对日期和时间的更多控制,包括设置日期、计算日期之间的差异等。

    常用方法

     

     

    示例

     

    java

    import java.util.Calendar;
    
    public class CalendarExample {
        public static void main(String[] args) {
            Calendar calendar = Calendar.getInstance();
            System.out.println("当前日期和时间: " + calendar.getTime());
    
            // 设置日期
            calendar.set(Calendar.YEAR, 2024);
            calendar.set(Calendar.MONTH, Calendar.SEPTEMBER);
            calendar.set(Calendar.DAY_OF_MONTH, 15);
            System.out.println("设置后的日期: " + calendar.getTime());
    
            // 添加一个月
            calendar.add(Calendar.MONTH, 1);
            System.out.println("添加一个月后的日期: " + calendar.getTime());
        }
    }
    

    java

    4.java.io包

    java.io包提供了输入和输出功能,包括文件操作、数据流等。

    4.1 输入和输出流

    java.io包中的流用于读写数据。流分为字节流和字符流两大类。

     

     

    示例:字节流

     

    java

    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class ByteStreamExample {
        public static void main(String[] args) {
            try (FileOutputStream fos = new FileOutputStream("example.txt");
                 FileInputStream fis = new FileInputStream("example.txt")) {
                // 写入数据
                fos.write("Hello, Byte Stream!".getBytes());
    
                // 读取数据
                int data;
                while ((data = fis.read()) != -1) {
                    System.out.print((char) data);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    java

    示例:字符流

     

    java

    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class CharStreamExample {
        public static void main(String[] args) {
            try (FileWriter writer = new FileWriter("example.txt");
                 FileReader reader = new FileReader("example.txt")) {
                // 写入数据
                writer.write("Hello, Character Stream!");
    
                // 读取数据
                int data;
                while ((data = reader.read()) != -1) {
                    System.out.print((char) data);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    java

    4.2 文件操作

    java.io包还提供了用于文件操作的类,如File类。File类允许我们创建、删除、检查文件或目录的存在性等。

    常用方法

     

     

    示例

     

    java

    import java.io.File;
    import java.io.IOException;
    
    public class FileExample {
        public static void main(String[] args) {
            File file = new File("example.txt");
    
            try {
                // 创建新文件
                if (file.createNewFile()) {
                    System.out.println("文件创建成功");
                } else {
                    System.out.println("文件已存在");
                }
    
                // 检查文件是否存在
                if (file.exists()) {
                    System.out.println("文件存在");
                }
    
                // 删除文件
                if (file.delete()) {
                    System.out.println("文件删除成功");
                } else {
                    System.out.println("文件删除失败");
                }
    
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    java

    4.3 序列化和反序列化

    序列化是将对象转换为字节流的过程,而反序列化是将字节流转换回对象的过程。这在对象的持久化和网络传输中非常有用。

    序列化:需要实现Serializable接口,并使用ObjectOutputStream类进行对象的序列化。

    反序列化:使用ObjectInputStream类进行对象的反序列化。

    示例

     

    java

    import java.io.*;
    
    class Person implements Serializable {
        private String name;
        private int age;
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Person{name='" + name + "', age=" + age + "}";
        }
    }
    
    public class SerializationExample {
        public static void main(String[] args) {
            Person person = new Person("John Doe", 30);
    
            // 序列化
            try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
                oos.writeObject(person);
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            // 反序列化
            try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) {
                Person deserializedPerson = (Person) ois.readObject();
                System.out.println("反序列化对象: " + deserializedPerson);
            } catch (IOException | ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
    

    java
     

  • List:常用实现类有ArrayListLinkedListArrayList是基于动态数组实现的,适合随机访问;LinkedList是基于双向链表实现的,适合频繁插入和删除操作。

     

    示例

     

    java

    import java.util.ArrayList;
    import java.util.LinkedList;
    
    public class ListExample {
        public static void main(String[] args) {
            ArrayList<String> arrayList = new ArrayList<>();
            arrayList.add("Java");
            arrayList.add("Python");
            System.out.println("ArrayList: " + arrayList);
            
            LinkedList<String> linkedList = new LinkedList<>();
            linkedList.add("Java");
            linkedList.add("Python");
            System.out.println("LinkedList: " + linkedList);
        }
    }
    

    java

  • Set:常用实现类有HashSetTreeSetHashSet基于哈希表实现,TreeSet基于红黑树实现,TreeSet会自动对元素进行排序。

     

    示例

     

    java

    import java.util.HashSet;
    import java.util.TreeSet;
    
    public class SetExample {
        public static void main(String[] args) {
            HashSet<String> hashSet = new HashSet<>();
            hashSet.add("Java");
            hashSet.add("Python");
            System.out.println("HashSet: " + hashSet);
            
            TreeSet<String> treeSet = new TreeSet<>();
            treeSet.add("Java");
            treeSet.add("Python");
            System.out.println("TreeSet: " + treeSet);
        }
    }
    

    java

  • Map:常用实现类有HashMapTreeMapHashMap基于哈希表实现,TreeMap基于红黑树实现,会自动对键进行排序。

     

    示例

    java

    import java.util.HashMap;
    import java.util.TreeMap;
    
    public class MapExample {
        public static void main(String[] args) {
            // 使用 HashMap
            HashMap<String, String> hashMap = new HashMap<>();
            hashMap.put("1", "Java");
            hashMap.put("2", "Python");
            System.out.println("HashMap: " + hashMap);
    
            // 使用 TreeMap
            TreeMap<String, String> treeMap = new TreeMap<>();
            treeMap.put("1", "Java");
            treeMap.put("2", "Python");
            System.out.println("TreeMap: " + treeMap);
        }
    }
  • 3.3 DateCalendar

    Date类用于表示特定的时刻(日期和时间)。然而,由于Date类设计上的一些缺陷,Java 1.1引入了Calendar类来提供更灵活的日期和时间操作。

    Date

    Date类表示特定的时间点,精度为毫秒。虽然在Java 8之后推荐使用java.time包中的新类,但在旧代码中你仍然会遇到Date类。

    常用方法

  • getTime():返回自1970年1月1日以来的毫秒数。
  • toString():返回Date对象的字符串表示。
  • get(int field):获取指定字段的值,例如Calendar.YEAR
  • set(int field, int value):设置指定字段的值。
  • add(int field, int amount):对指定字段的值进行加减操作。
  • 字节流:用于处理原始的字节数据。主要类包括FileInputStreamFileOutputStream
  • 字符流:用于处理字符数据,基于字符编码。主要类包括FileReaderFileWriter
  • createNewFile():创建新文件。
  • delete():删除文件或目录。
  • exists():检查文件或目录是否存在。
  • listFiles():列出目录中的所有文件和子目录。
  • 总结

    在本篇文章中,我们深入探讨了Java标准库的核心包,包括java.langjava.utiljava.io。我们学习了这些包中一些最常用的类和接口,如StringMathObjectListSetMapDateCalendarFile以及序列化机制等。这些工具和类将帮助你高效地处理各种编程任务,提升你的开发能力。

    掌握Java标准库不仅能帮助你编写更加高效的代码,还能为你提供解决各种实际问题的工具。希望通过本篇文章,你对Java标准库有了更深入的理解,并能够在日常编程中灵活运用。

    如有任何问题或需要进一步探讨的内容,请随时提出。祝你编程学习愉快!

     

     

    作者:HYP_Coder

    物联沃分享整理
    物联沃-IOTWORD物联网 » 第4篇:深入学习Java标准库

    发表回复