Java程序设计 CharSequence接口、AutoCloseable接口、Runtime类

396 阅读2分钟

这是我参与2022首次更文挑战的第13天,活动详情查看:2022首次更文挑战

Java程序设计 CharSequence接口、AutoCloseable接口、Runtime类

CharSequence接口

描述字符串标准的接口

常见的子类有3个:String、StringBuffer、StringBuilder

CharSequence接口方法

方法作用
public char charAt(int index)获取指定索引字符
public int length()获取字符串长度
public CharSequence subSequence(int start,int end)截取部分字符串
public class Hello {
    public static void main(String[] args) {
        CharSequence str = "ABCDEFG";
        CharSequence a = str.subSequence(0,3);
        System.out.println(a);
    }
}

image-20220128105443166

大部分情况下都先考虑String,只有在频繁修改这一操作中才会考虑使用StringBuffer或StringBuilder

AutoCloseable接口

结合异常处理结构在资源操作完成后实现自动释放功能

接口定义:

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

演示:

public class Hello {
    public static void main(String[] args) {
        try(Mess n = new NetMess("ABCD")){
            n.send();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
interface Mess extends AutoCloseable {
    public void send();
}
class NetMess implements Mess{
    private String msg;
    public NetMess(String msg){
        this.msg=msg;
    }
    public boolean open(){
        System.out.println("发送消息");
        return true;
    }

    @Override
    public void send() {
        this.open();
        System.out.println(this.msg);
    }

    @Override
    public void close() throws Exception {
        System.out.println("关闭通道");
    }
}

image-20220128112733160

实现了自动关闭处理,并且通过执行结果可以发现,不管是否产生了异常都会调用close()方法进行资源释放

Runtime类

Runtime描述的是运行时状态,在每一个JVM进程中都会提供唯一的一个Runtime类实例化对象,开发者可以通过Runtime类对象获取与JVM有关的运行时状态

常用方法

方法作用
public static Runtime getRuntime()获取Runtime类的实例化对象
public int availableProcessors()获取可用的CPU处理器数量
public long maxMemory()获取最大可用内存量
public long totalMemory()获取总共可用内存量
public long freeMemory()获取空闲内存量
public void gc()运行垃圾收集器,释放垃圾空间

获取CPU处理器数量

public class Hello {
    public static void main(String[] args) throws Exception{
        Runtime runtime = Runtime.getRuntime();
        System.out.println(runtime.availableProcessors());
    }
}

image-20220128115029687

获取内存信息

public class Hello {
    public static void main(String[] args) throws Exception{
        Runtime runtime = Runtime.getRuntime();
        System.out.println(runtime.maxMemory());
        System.out.println(runtime.totalMemory());
        System.out.println(runtime.freeMemory());
    }
}

image-20220128115222507

GC操作

public class Hello {
    public static void main(String[] args) throws Exception{
        Runtime runtime = Runtime.getRuntime();
        System.out.println("可用内存:"+runtime.totalMemory());
        System.out.println("空闲内存:"+runtime.freeMemory());
        System.out.println("产生垃圾空间");
        String a ="";
        for(int i=0;i<4000;i++){
            a+=i;
        }
        System.out.println("可用内存:"+runtime.totalMemory());
        System.out.println("空闲内存:"+runtime.freeMemory());
        runtime.gc();
        System.out.println("内存释放");
        System.out.println("可用内存:"+runtime.totalMemory());
        System.out.println("空闲内存:"+runtime.freeMemory());
    }
}

image-20220128154335277