Java基础类库

it2025-04-30  11

**

1.String StringBuffer StringBuilder的区别

** String是无法被改变的,StringBuffer是可以改变的

public static void main(String[] args) { StringBuffer buf = new StringBuffer(); buf.append("Hello").append(" World") change(buf); System.out.println(buf); //buf的值经方法调用后改变了 } public static void change(StringBuffer temp) { temp.append(" !!!") }

String 类是不可变类,即一旦一个 String 对象被创建后,对象中的字符序列是不可改变的,直至对象被销毁。 StringBuffer 对象则代表一个字符序列可变的字符串,可通过添加StringBuffer.append() 删除方法StringBuffer.delete替换StringBuffer.insert()对其操作。生成了最终想要的字符串之后,可以调用toString() 方法将其转为String 对象。

JDK 1.5 新增了一个StringBuilder 类,也代表字符串对象,与StringBuffer 类似,

StringBuilder 和 StringBuffer 区别: 不同的是,StringBuffer 是线程安全的,而StringBuilder没有实现线程的安全功能,所以性能略高,通常情况下,优先考虑使用。 StringBuffer类转String类

public static void main(String[] args) { StringBuffer buf = new StringBuffer(); buf.append("hello"); String str = buf.toString(); }

可以用contentEquals方法来比较StringBuffer类和String类 reverse方法实现字符串反转 insert(int index, String buf) / delete(int start, int end)

buf.insert(0,"nihao");

StringBuilder和StringBuffer类基本相似,StringBuffer是同步方法,具有多线程安全性,StringBuilder是异步方法,不具有多线程安全性。 二、CharSequence接口

1.String: public final class String implements java.io.Serializable, Comparable, CharSequence; 2.StringBuffer: public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharSequence; 3.StringBuilder: public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence ; 以后只要看到CharSequence描述的就是一个字符串。 三、AutoCloseable接口 AutoCloseable主要是用于日后进行资源开发的处理上,以实现资源的自动关闭(释放资源)例如:在进行文件、网络、数据库开发的过程中,由于服务器的资源有限,所以使用之后才会关闭资源,这样才能被更多的使用者所使用。

interface IMssage extends AutoCloseable { public void send(); } class Message1 implements IMssage{ public boolean open() { System.out.println("获取消息链接资源"); return true; } @Override public void send() { if(this.open()) { System.out.println("发送消息"); } } public void close(){ System.out.println("资源关闭"); } } public class Demo1 { public static void main(String[] args) { try(Message1 message1 = new Message1();){ message1.send(); }catch(Exception e){ } } }

四、RunTime类 Runtime类是唯一一个与JVM运行状态有关的类,并且都会默认提供一个该类的实例化对象。

Runtime类的构造方法被私有化,所以一定会用到单例模式。 范例:获取cup的的内核数

public class RunTimeDemo { public static void main(String[] args) { Runtime run = Runtime.getRuntime(); System.out.println(run.availableProcessors()); } } 除了以上方法之外,在Runtime里面还提供了以下四种方法:

1.获取最大可用内存空间:public long maxMemory();默认为本机内存的4分之一; 2.获取可用内存空间:public long totalMemory();默认为本机内存的64分之一; 3.获取空闲内存空间:public long freeMemory(); 4.手工GC处理:public void gc();

范例:四种方法的应用

public class RunTimeDemo { public static void main(String[] args) throws Exception { Runtime run = Runtime.getRuntime();

System.out.println(run.maxMemory()); System.out.println(run.totalMemory()); System.out.println(run.freeMemory()); for(int i = 0; i < 30000; i++){ } System.out.println(run.maxMemory()); System.out.println(run.totalMemory()); System.out.println(run.freeMemory()); Thread.sleep(1000); run.gc(); System.out.println(run.maxMemory()); System.out.println(run.totalMemory()); System.out.println(run.freeMemory()); }

} 面试题:什么是GC?如何处理?

GC(Carbage Collector) 垃圾收集器,是可以由系统调用的垃圾释放功能,或者使用Runtime里面的gc()手工调用。 五、System类 System类中定义了许多常用的方法: 1.数组的拷贝:public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 2.获取当前日期时间数值:public static long currentTimeMillis(); 3.进行垃圾回收:public static void gc();这里的gc()相当于Runtime.getRuntime().gc(),系统中只有一个gc()方法那就是 Runtime.getRuntime().gc() 六、Cleaner类

这是在jdk1.9提供的,主要是提供的是一个对象清理操作,其主要功能是进行finialize()方法的替代,在C++里面有两种特殊的函数:构造函数、析构函数(对象手工回收),在java里面垃圾空间都是通过gc()完成的,所以很多情况下是不需要使用这类析构函数的,也正是因为如此,java没有提供这方面的支持。

但是java本身也提供了给用户收尾的操作,每一个实例化对象在回收之前,给他一个喘息的机会,最初实现对象收尾的方法是Object中的finialize()方法,但是此方法在JDK1.9后不建议使用。建议开发者使用AutoCloseable或者使用java.lang.ref.Cleaner类进行回收处理。

七、对象克隆

克隆就是指对象的复制,需要使用Object中的clone()方法,protected native Object clone() throws CloneNotSupportedException;这里抛出了CloneNotSupportedException异常,虽然所有的类都会继承Object方法,但是不是所有的类都希望被克隆,所以要想实现对象克隆,要实现一个Cloneable接口,此接口没有任何方法,是因为此接口表现的是一种能力。

范例:clone实现对象克隆

class Member implements Cloneable{ private String name; private int age;

public Member(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Member{" + "name='" + name + '\'' + ", age=" + age + '}'; } @Override protected Object clone() throws CloneNotSupportedException{ return super.clone(); }

}

public class ClearDemo { public static void main(String[] args) throws Exception{ Member memberA = new Member(“chenzhou”,23); Member memberB = (Member)memberA.clone(); System.out.println(memberA); System.out.println(memberB); } }

最新回复(0)