Java学习路线-17:Java基础类库StringBuffer、AutoCloseable、Runtime、System

简介: Java学习路线-17:Java基础类库StringBuffer、AutoCloseable、Runtime、System

第7 章 : Java基础类库

26 StringBuffer类

String有两个常量池:

静态常量池,运行时常量池


String对象实例化直接赋值形式,可以保存到常量池中以便重用


// 构造方法
public StringBuffer(String str)
// 追加
public synchronized StringBuffer append(String str)
// 插入
public synchronized StringBuffer insert(int offset, String str)
// 删除指定范围数据
public synchronized StringBuffer delete(int start, int end)
// 字符串内容反转
public synchronized StringBuffer reverse()

代码示例



class Demo{
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("hello");
        sb.append(" world");
        System.out.println(sb.toString());
        // hello world
    }
}

String 转换为 StringBuffer 使用构造方法

StringBuffer 转换为 String 使用toString


操作示例



         

类似功能类 StringBuilder

JDK >= 1.5


区别

String 字符串,内容不可修改

StringBuffer JDK>=1.0 线程安全, 使用了synchronized

StringBuilder JDK>=1.5 非线程安全


27 CharSequence接口

CharSequence描述字符串结构的接口



public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence
public final class StringBuffer
    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence
public final class StringBuilder
    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence

CharSequence接口方法


public interface CharSequence{
    int length();
    char charAt(int index);
    CharSequence subSequence(int start, int end);
    public String toString();
}

28 AutoCloseable接口

AutoCloseable接口 用于资源的自动关闭

JDK >= 1.7


public interface AutoCloseable {
    void close() throws Exception;
}

不使用自动关闭代码示例



interface IMessage{
    public void send();
}
class MessageImpl implements IMessage{
    private String message;
    public MessageImpl(String message) {
        this.message = message;
    }
    @Override
    public void send() {
        System.out.println("发送消息: " + this.message);
    }
    public boolean open(){
        System.out.println("打开资源");
        return true;
    }
    public void close(){
        System.out.println("关闭资源");
    }
}
class Demo{
    public static void main(String[] args) {
        MessageImpl message = new MessageImpl("消息内容");
        if(message.open()){
            message.send();
            message.close();
        }
        /**
         * 打开资源
         * 发送消息: 消息内容
         * 关闭资源
         */
    }
}

结合异常处理语句实现资源自动关闭


interface IMessage extends AutoCloseable{
    public void send();
}
class MessageImpl implements IMessage{
    private String message;
    public MessageImpl(String message) {
        this.message = message;
    }
    @Override
    public void send() {
        System.out.println("发送消息: " + this.message);
    }
    public boolean open(){
        System.out.println("打开资源");
        return true;
    }
    public void close(){
        System.out.println("关闭资源");
    }
}
class Demo{
    public static void main(String[] args) {
        try(MessageImpl message = new MessageImpl("消息内容")){
            if(message.open()){
                message.send();
            }
        }catch(Exception e){
        }
        /**
         * 打开资源
         * 发送消息: 消息内容
         * 关闭资源
         */
    }
}

29 Runtime类

Runtime描述运行时状态

一个JVM进程只允许提供一个Runtime,使用了单例设计模式

可以使用静态方法获取实例化对象


public static Runtime getRuntime()


class Demo {
    public static void main(String[] args) {
        Runtime run = Runtime.getRuntime();
        // 读取CPU内核数量
        System.out.println(run.availableProcessors());
        //  8
        // 获取最大可用内存空间 1/4
        System.out.println(run.maxMemory());
        // 获取可用内存空间 1/64
        System.out.println(run.totalMemory());
        // 获取空闲内存空间
        System.out.println(run.freeMemory());
        // 手工进行GC处理
        run.gc();
    }
}

GC (Garbage Collector) 垃圾收集器

由系统自动调用

或者使用Runtime类中的gc()方法,手工清除


30 System类

常用方法


// 数组拷贝
public static native void arraycopy(Object src,  int  srcPos,
                                    Object dest, int destPos,
                                    int length);
// 获取时间数值
System.out.println(System.currentTimeMillis());
// 1573918888172
// 垃圾回收
public static void gc() {
    Runtime.getRuntime().gc();
}

31 Cleaner类

JDK>=1.9

Cleaner类提供对象清理操作

替代finialize()方法

C++提供了构造函数,析构函数

Java垃圾使用GC回收



class Demo {
    public Demo() {
        System.out.println("构造函数");
    }
    @Override
    protected void finalize() throws Throwable {
        System.out.println("垃圾回收");
        super.finalize();
    }
    public static void main(String[] args) {
        Demo demo = new Demo();
        demo = null;
        System.gc();
        /**
         * 构造函数
         * 垃圾回收
         */
    }
}

不建议使用 finalize()方法, 使用AutoCloseable接口

使用Cleaner类,使用单独的线程去回收资源,能提高整体性能


32 对象克隆

protected native Object clone() throws CloneNotSupportedException;
// 只有接口名,没有任何方法,只是能力标识接口
public interface Cloneable {
}

接口作用:

标准

能力


class Demo implements Cloneable{
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
    public static void main(String[] args) {
        Demo demo = new Demo();
        Demo demo2 = null;
        try {
            demo2 = (Demo)demo.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        System.out.println(demo);
        System.out.println(demo2);
        /**
         * Demo@2503dbd3
         * Demo@4b67cf4d
         */
    }
}
相关文章
|
9月前
|
Java 开发者
重学Java基础篇—Java类加载顺序深度解析
本文全面解析Java类的生命周期与加载顺序,涵盖从加载到卸载的七个阶段,并深入探讨初始化阶段的执行规则。通过单类、继承体系的实例分析,明确静态与实例初始化的顺序。同时,列举六种触发初始化的场景及特殊场景处理(如接口初始化)。提供类加载完整流程图与记忆口诀,助于理解复杂初始化逻辑。此外,针对空指针异常等问题提出排查方案,并给出最佳实践建议,帮助开发者优化程序设计、定位BUG及理解框架机制。最后扩展讲解类加载器层次与双亲委派机制,为深入研究奠定基础。
351 0
|
5月前
|
存储 Java 程序员
Java 基础知识点全面梳理包含核心要点及难点解析 Java 基础知识点
本文档系统梳理了Java基础知识点,涵盖核心特性、语法基础、面向对象编程、数组字符串、集合框架、异常处理及应用实例,帮助初学者全面掌握Java入门知识,提升编程实践能力。附示例代码下载链接。
229 1
|
7月前
|
IDE Java 开发工具
【Java基础-环境搭建-创建项目】IntelliJ IDEA创建Java项目的详细步骤
IntelliJ IDEA创建Java项目的图文详细步骤,手把手带你创建Java项目
1306 10
【Java基础-环境搭建-创建项目】IntelliJ IDEA创建Java项目的详细步骤
|
6月前
|
存储 安全 Java
2025 年最新 40 个 Java 基础核心知识点全面梳理一文掌握 Java 基础关键概念
本文系统梳理了Java编程的40个核心知识点,涵盖基础语法、面向对象、集合框架、异常处理、多线程、IO流、反射机制等关键领域。重点包括:JVM运行原理、基本数据类型、封装/继承/多态三大特性、集合类对比(ArrayList vs LinkedList、HashMap vs TreeMap)、异常分类及处理方式、线程创建与同步机制、IO流体系结构以及反射的应用场景。这些基础知识是Java开发的根基,掌握后能为后续框架学习和项目开发奠定坚实基础。文中还提供了代码资源获取方式,方便读者进一步实践学习。
1833 2
|
6月前
|
存储 安全 Java
Java 基础知识面试题汇总 最全面的 Java 基础面试题整理
本文全面解析Java基础知识面试题,涵盖Java基础概念、面向对象编程、异常处理、集合框架等核心内容。通过实际应用场景,提供技术方案与应用实例,如JDK与JRE区别、==与equals()差异、String类特性、final与static关键字用法、多继承替代方案及接口与抽象类对比。帮助开发者夯实基础,高效备考,提升实战能力。附带完整代码示例,可供下载学习。
790 3
|
Java Linux
java基础(3)安装好JDK后使用javac.exe编译java文件、java.exe运行编译好的类
本文介绍了如何在安装JDK后使用`javac.exe`编译Java文件,以及使用`java.exe`运行编译好的类文件。涵盖了JDK的安装、环境变量配置、编写Java程序、使用命令行编译和运行程序的步骤,并提供了解决中文乱码的方法。
628 2
|
Java 索引
java基础(13)String类
本文介绍了Java中String类的多种操作方法,包括字符串拼接、获取长度、去除空格、替换、截取、分割、比较和查找字符等。
180 0
java基础(13)String类
|
9月前
|
缓存 安全 Java
《从头开始学java,一天一个知识点》之:输入与输出:Scanner与System类
你是否也经历过这些崩溃瞬间?三天教程连`i++`和`++i`都说不清,面试时`a==b`与`equals()`区别大脑空白,代码总是莫名报NPE。这个系列就是为你打造的Java「速效救心丸」!每天1分钟,地铁通勤、午休间隙即可学习。直击高频考点和实际开发中的“坑位”,拒绝冗长概念,每篇都有可运行代码示例。涵盖输入输出基础、猜数字游戏、企业编码规范、性能优化技巧、隐藏技能等。助你快速掌握Java核心知识,提升编程能力。点赞、收藏、转发,助力更多小伙伴一起成长!
189 19
|
9月前
|
设计模式 缓存 Java
重学Java基础篇—Java对象创建的7种核心方式详解
本文全面解析了Java中对象的创建方式,涵盖基础到高级技术。包括`new关键字`直接实例化、反射机制动态创建、克隆与反序列化复用对象,以及工厂方法和建造者模式等设计模式的应用。同时探讨了Spring IOC容器等框架级创建方式,并对比各类方法的适用场景与优缺点。此外,还深入分析了动态代理、Unsafe类等扩展知识及注意事项。最后总结最佳实践,建议根据业务需求选择合适方式,在灵活性与性能间取得平衡。
593 3
|
9月前
|
安全 IDE Java
重学Java基础篇—Java泛型深度使用指南
本内容系统介绍了Java泛型的核心价值、用法及高级技巧。首先阐述了泛型在**类型安全**与**代码复用**中的平衡作用,解决强制类型转换错误等问题。接着详细讲解了泛型类定义、方法实现、类型参数约束(如边界限定和多重边界)、通配符应用(PECS原则)以及类型擦除的应对策略。此外,还展示了泛型在通用DAO接口、事件总线等实际场景的应用,并总结了命名规范、边界控制等最佳实践。最后探讨了扩展知识,如通过反射获取泛型参数类型。合理运用泛型可大幅提升代码健壮性和可维护性,建议结合IDE工具和单元测试优化使用。
355 1