听闻少年二字,当与平庸相斥。这篇文章主要讲述Java常用类库相关的知识,希望能为你提供帮助。
一、StringBuffer类【Java常用类库】String类很强大,但是其内容不允许修改,而StringBuffer类的出现可以实现字符串内容的修改处理。
StringBuffer包含以下主要的方法:
- 构造方法:StringBuffer()
- 构造方法:StringBuffer(String s)
- 追加:append(类型 变量)
- 插入数据:insert(int offset, 类型 变量)
- 删除指定范围数据:delete(int start, int end)
- 字符串内容反转:reverse()
public class StringBufferDemo
public static void main(String[] args)
StringBuffer buffer = new StringBuffer("hsafrg");
System.out.println("origin -> " + buffer);
buffer.append(" 6789");
System.out.println("append -> " + buffer);
buffer.insert(0, "insert");
System.out.println("insert -> " + buffer);
buffer.delete(0,1);
System.out.println("delete -> " + buffer);
buffer.reverse();
System.out.println("reverse -> " + buffer);
origin -> hsafrg
append -> hsafrg 6789
insert -> inserthsafrg 6789
delete -> nserthsafrg 6789
reverse -> 9876 grfashtresn
实际上,
- String里的“+”字符串连接符就等价于append()方法,所有的“+”在编译后都变成了append()方法;
- String类对象转换成StringBuffer类对象可以通过StringBuffer的构造方法或者append()方法实现
- 所有类的对象都可通过toString()方法转换成String类型。
因此可以概括一下String、StringBuilder及StringBuffer的区别:
- String类是字符串的首选类型,其内容不允许修改;
- StringBuilder和StringBuffer内容允许修改;
- StringBuffer线程安全,StringBuilder非线程安全。
- 获取指定索引字符:charAt(int index)
- 获取字符串长度:int length()
- 截取部分字符串:subSequence(int start, int end)
public class CharSequenceDemo
public static void main(String[] args)
CharSequence str = "6464646";
System.out.println("length() -> "+ str.length());
System.out.println("charAt() -> "+ str.charAt(2));
System.out.println("subSequence() -> "+ str.subSequence(1,3));
length() -> 7
charAt() -> 6
subSequence() -> 46
四、Runtime类Runtime类描述的是运行时状态,且是单例设计,要想获取实例化对象要依靠getRuntime()方法完成。它的实例化对象包含下面几个重要方法:
- availableProcessors():获取本机CPU内核数
- maxMemory():最大可用内存空间
- freeMemory():空闲内存空间
- totalMemory():可用内存空间
- gc():手动释放内存
public class RunTimeDemo
public static void main(String[] args)
Runtime run = Runtime.getRuntime();
System.out.println("availableProcessors -> " + run.availableProcessors());
System.out.println("maxMemory -> " + run.maxMemory());
System.out.println("freeMemory -> " + run.freeMemory());
System.out.println("totalMemory -> " + run.totalMemory());
availableProcessors -> 4
maxMemory -> 3808428032
freeMemory -> 252053712
totalMemory -> 257425408
以上方法代码不常见,但在jvm调优时很重要。
五、对象克隆 Cloneable对象克隆指的是对象复制,即:使用已有的对象创建一个新的对象,属于全新的复制。需要用到Object类的clone()方法,且被克隆类必须实现Cloneable接口:
/**
* Cloneable接口使得对象具有拷贝功能
* 拷贝后改变原对象的值,看拷贝生成的新对象是否改变,若不改变就是深拷贝
* 这里是深拷贝
* Feng, Ge,2021年4月15日14:57:12
*/
public class CloneDemo
public static void main(String[] args) throws CloneNotSupportedException
A a = new A("A", 1);
A b = (A) a.clone();
System.out.println(a);
System.out.println(a.getName());
System.out.println(a.getNum());
System.out.println(b);
System.out.println(b.getName());
System.out.println(b.getNum());
System.out.println("===================================");
// 修改A的值,看B的值是否改变
a.setName("OK");
System.out.println(a);
System.out.println(a.getName());
System.out.println(a.getNum());
System.out.println(b);
System.out.println(b.getName());
System.out.println(b.getNum());
class A implements Cloneable
private String name;
private int num;
public A(String name, int num)
this.name = name;
this.num = num;
public String getName()
return name;
public int getNum()
return num;
public void setName(String name)
this.name = name;
@Override
protected Object clone() throws CloneNotSupportedException
return super.clone();
jdk.A@28d25987
A
1
jdk.A@4501b7af
A
1
=============推荐阅读
- Elasticsearch 在地理信息空间索引的探索和演进
- 并发 JVM-JMM和底层实现原理
- MySQL中的读锁和写锁(InnoDb行锁表锁 MyISAM共享读锁 MyISAM独占写锁)
- d生成模板
- 并发-显示锁Lock和独占锁AQS(AbstractQueuedSynchronizer)
- d改进翻译
- 并发-原子操作和CAS(CompareAndSwep)
- Lambda表达式及双冒号操作符
- d的破坏与安全