Java 常用类库(一)
来源:互联网 发布:手机淘宝运费怎么设置 编辑:程序博客网 时间:2024/06/06 13:09
为了熟悉java常用类库,可以多查阅JKD文档英文版,这里总结一下java.lang包下面的Runtime、System、StringBuffer类常用方法。
Runtime类
在每一个JVM进程中都会存在以Runtime类的实例话对象,此对象将由JVM为用户提供好。但是为了保持只有一个Runtime类的实例化对象,Runtime类采用的为单例设计模式,构造方法被私有化了(文档中查找不到该类构造函数)。
既然是单例设计模式,必然有一个static方法取得本类的实例化对象:public static Runtime getRuntime()
当取得了Runtime类对象之后,就可以通过如下三个方法取得一些内存信息:
- 最大可用内存量: public long maxMemory();
- 可用内存量: public long totalMemory();
- 空闲内存量: public long freeMemory();
Runtime类还有一个重要方法:清理垃圾空间: public void gc() ;
// Runtimel类方法的使用public class test { public static void main(String[] args) throws CloneNotSupportedException { Runtime run = Runtime.getRuntime() ; run.gc(); System.out.println("1、MAX = " + run.maxMemory()); System.out.println("1、TOTAL = " + run.totalMemory()); System.out.println("1、FREE = " + run.freeMemory()); String string = "" ; for (int i = 0; i < 30000; i++) { string += i ; // 产生垃圾 } System.out.println("2、MAX = " + run.maxMemory()); System.out.println("2、TOTAL = " + run.totalMemory()); System.out.println("2、FREE = " + run.freeMemory()); run.gc(); System.out.println("2、MAX = " + run.maxMemory()); System.out.println("2、TOTAL = " + run.totalMemory()); System.out.println("2、FREE = " + run.freeMemory()); }}
运行结果:
1、MAX = 6899630081、TOTAL = 482344961、FREE = 477217122、MAX = 6899630082、TOTAL = 2909798402、FREE = 624361283、MAX = 6899630083、TOTAL = 2909798403、FREE = 285322792
面试题:请问什么是GC?如何操作?
- GC是垃圾收集器(Garbage Collector),是负责垃圾空间清理的线程。
- 在Java之中可由JVM自动调用GC,或用户调用Runtime类中的gc()方法手工清理。
System类
在System类中有一个方法是取得当前日期时间:public static long currentTimeMillis()。此时取得的是一个long数值,并不是传统意义的年月日。
计算程序运行的时间
// 计算程序运行时间public class test { public static void main(String[] args) throws CloneNotSupportedException { long start = System.currentTimeMillis(); String string = "" ; for (int i = 0; i < 30000; i++) { string += i ; // 产生垃圾 } long end = System.currentTimeMillis() ; System.out.println("本操作所用时间:" + (end - start)); }}
运行结果:
本操作所用时间:2213
fianlize方法
在System类中存在一个方法:public static void gc() 。等价于Runtime类中的gc() 方法,这两个gc没有任何区别。
如果希望对象在被回收之前进行一些处理操作,则可以覆写Object类中的finalize()方法:protected void finalize() throws Throwable;
面试题:请解释final、finally、finalize的区别?
- final关键字:可以定义不能被继承的父类,不能被覆写的方法,常量。
- finally关键字:异常处理的统一出口,不管是否有异常都执行。
- finalize方法:Object类中的方法,当对象被清理前执行的收尾操作(相当于C++中的析构函数)。
StingBuffer类
string和StringBuffer的比较
首先列出String类的特点:
- 字符串内容一旦声明则不可改变;
- 一个字符串常量就是String类的匿名对象;
- String类对象有两种实例化方式:
- 方式一:直接赋值,可以自动入池,只开辟一块内存空间
- 方式二:构造方法实例化,会开辟两块空间,其中一块成为垃圾,不会自动入池,可以使用intern()方法手工入池。
所有在频繁修改字符串内容时,不可使用Sring,此时Java中又提供有一个StringBuffer类。StringBuffer类中的字符串连接使用:public StringBuffer append(数据类型 d)。
String和StringBuffer类的声明:
发现这两个类都是CharSequence接口的子类,如果见到某参数类型是CharSequence,就应该想到是字符串。StringBuffer和String类之间不可之间转型,但是可以通过间接方法转型。
StringBuffer和String类的间接转型
1、将String变为StringBuffer:
- 利用StringBuffer类的构造方法:public StringBuffer(String str);
- 利用StringBuffer类的append()方法:public StringBuffer append(String str)。
2、将StringBuffer变为String
- 所有对象都支持转换为String类对象的方法:public String toString()。
StringBuffer类比较有用的方法
1、插入数据:public StringBuffer insert(int offset,数据类型 data);
2、删除部分数据:public StringBuffer delete(int start,int end);
3、字符串反转:public StringBuffer reverse()。
String、StringBuffer、StringBuilder拼接字符串的性能比较
// String、StringBuffer、StringBuilder拼接字符串的性能比较public class test { public static void main(String[] args) { testString() ; testStringBuffer() ; testStringBuilder() ; } public static void testString(){ long start = System.currentTimeMillis() ; String str = "" ; for (int x = 0; x < 30000; x++){ str += x; } long end = System.currentTimeMillis() ; System.out.println("String处理花费:" + (end - start)); } public static void testStringBuffer(){ long start = System.currentTimeMillis() ; StringBuffer str = new StringBuffer() ; for (int x = 0; x < 30000; x++){ str.append(x) ; } long end = System.currentTimeMillis() ; System.out.println("StringBuffer处理花费:" + (end - start)); } public static void testStringBuilder(){ long start = System.currentTimeMillis() ; StringBuilder str = new StringBuilder() ; for (int x = 0; x < 30000; x++){ str.append(x) ; } long end = System.currentTimeMillis() ; System.out.println("StringBuilder处理花费:" + (end - start)); }}
运行结果:
String处理花费:2190StringBuffer处理花费:8StringBuilder处理花费:9
面试题:请解释String、StringBuffer、StringBuilder类的区别?
- String不适合字符串频繁修改,而StringBuffer、StringBuilder适合,且速度远远高于String;
- StringBuffer是在JDK1.0引入的,StringBuilder是JDK1.5之后引入,二者继承方法相同,方法组成也相同;
- StringBuffer中所有方法都使用synchronized进行标记,都是同步方法,性能相对较低,但是多线程的数据安全性好。StringBuilder采用异步处理,性能相对较高,但是多线程时数据安全性差一点。
上面程序StringBuffer处理花费和StringBuilder处理花费时间差不多,是因为此程序为单线程的运行环境,所以同步异步操作差异不大。
- Java常用类库(一)
- Java常用类库(一)
- JAVA常用类库(一)
- Java 常用类库(一)
- Java 常用类库(一)
- Java常用类一
- 第八章:java常用类(一)
- java常用类解析一
- JAVA常用代码(一)
- Java常用数据结构(一)
- JAVA常用加密(一)
- [JAVA] 常用技巧(一)
- Java常用API(一)
- 一大波Java来袭(三)Java常用类
- java学习 java常用函数(一)
- Java常用类源码探究(一):Object类
- JAVA 并发类(一) 常用的并发类
- Java String类的常用用法(一)
- elasticsearch之Document APIs【Scroll】
- Servlet中forward、sendRedirect、include的区别
- Tools_Procexp找文件被哪个进程占用
- Python3 爬虫快速入门攻略
- HDU 4609 3-idiots(FFT)
- Java 常用类库(一)
- Android应用资源总结五:res下的anim和animator文件夹
- Python中模块和包的概念
- 一种排序-OJ
- 每日MySQL之022:使用SHOW PROCESSLIST查看应用与使用KILL杀掉应用
- Python 循环语句
- C++设计模式——组合模式
- winedt + miktex + SumatraPDF 搭建latex环境
- [ICLR2017]A Structured Self-attentive Sentence Embedding