1 CharSequence
描述字符串结构的接口,通过发现它的继承结构,其下面有多个子类:
1String
2 StringBuilder
3 StringBuffer
只要是字符串都可以为 CharSequence实例化
范例:代码实现
// hello 是String类的匿名对象 String类型 是charSequence子类
// 通过 对象自动向上转型 为charSequence 进行实例化
CharSequence str="hello";
System.out.println(str);
|
该接口也定义了一些方法:
1public int length() 取得字符串长度
2 char charAt(int index);给定索引返回指定索引的字符
3 CharSequence subSequence(int start, int end); 截取部分字符串
范例: 实现截取字符串
CharSequence str="hello";
System.out.println(str.subSequence(0, 2));
|
该接口藐视的就是一个字符串 (了解)
RunTime类
RunTime类主要描述的是运行时的状态,也就是说在java中RunTime类是唯一一个与JVM有关的类,并且该类使用的是单例设计模式,提供了一个默认实例获得方法
public static Runtime getRuntime();
在每一个JVM进程里面都只能存在一个Runtime
范例: 取得RumTime类的实例
Runtime runtime=Runtime.getRuntime();// 取得对象实例
|
该类与JVM相关,所以JVM的一些基本信息都可以通过该类取得
1 public int availableProcessors(); JVM CPU的内核数
System.out.println(runtime.availableProcessors());
|
除了可以获得CPU的内核数量之外还可以获得JVM的内存空间
1 最大的可用内存空间 public long maxMemory();
2 可用内存空间 public long totalMemory()
3 空闲内存空间 public long freeMemory()
4 手工GC的内存处理 public void gc()
package org.runtime;
publicclass RunTimeTest {
publicstaticvoid main(String[] args) {
Runtime runtime=Runtime.getRuntime();// 取得对象实例
System.out.println("CPU:"+runtime.availableProcessors());
System.out.println("最大可用内存"+runtime.maxMemory());
System.out.println("可用内存空间"+runtime.totalMemory());
System.out.println("空闲内存"+runtime.freeMemory());
String str="";
for(int i=0;i<50000;i++) {
str+="hello"; //产量大量的垃圾
}
System.out.println("**********************************");
System.out.println("CPU:"+runtime.availableProcessors());
System.out.println("最大可用内存"+runtime.maxMemory());
System.out.println("可用内存空间"+runtime.totalMemory());
System.out.println("空闲内存"+runtime.freeMemory());
System.gc();
System.out.println("***************************");
System.out.println("CPU:"+runtime.availableProcessors());
System.out.println("最大可用内存"+runtime.maxMemory());
System.out.println("可用内存空间"+runtime.totalMemory());
System.out.println("空闲内存"+runtime.freeMemory());
}
}
|
System类
System类一直在接触,而这个类本身提供了一些系统支持操作
观察该类的定义:
public final class System extends Object
|
对于该类存在三个常量:
1 public static final PrintStream err; 错误的输出
2 public static final InputStream in :系统输入 例如键盘中输入内容到程序中
3 public static final PrintStream out :控制台打印
普通方法:
1 public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 数组拷贝
该方法的参数如下:
1 src 源数组
2 srcPos 源数组的起始位置
3 dest 目标数组
4 destPos 目标数字起始位置
5 length 目标数组的长度
范例:实现一个数组拷贝
publicstaticvoid main(String[] args) {
// 定义两个数组
int[] A=newint[]{1,2,3,4,5};
int[]B=newint[10];
System.arraycopy(A, 0, B, 0, A.length);
System.out.println(Arrays.toString(B));
}
|
通过以上方法可以实现数组之间的拷贝功能,主要作用就是解决数组长度不可改变的缺陷,为数组扩容
2 public static long currentTimeMillis(): 获得当前的日期时间,以long类型返回
publicstaticvoid main(String[] args) {
long time=System.currentTimeMillis(); //获得当前的时间
Date date=new Date(time);
SimpleDateFormat smd=new SimpleDateFormat("yyyy-MM-dd:HH:mm:ss");
String mytime=smd.format(date);
System.out.println(mytime);
}
|
练习: 统计一次操作花费的时间,并最终把时间格式化输出:
publicstaticvoid main(String[] args) {
long start=System.currentTimeMillis(); //开始时间
String str="";
for(int i=0;i<30000;i++) {
str+="hello";
}
long end=System.currentTimeMillis();//结束时间
long total=end-start;
String time=new SimpleDateFormat("mm:ss").format(new Date(total));
System.out.println(time);
}
|
System类中同样也存在一个方法:
public static void gc() 在这个该类中也存在GC方法, 在C++存在析构函数,在java不存在析构函数 finlize实现和析构函数同样的功能:
在对象创建的时候有初始化操作, 构造方法 在构造方法中赋值内容
小林: 出生的时候 地动山摇 ,满天乌云, 空气都是臭的 妖孽出生了
protected void finalize() throws Throwable; 该方法定义在Object类中说明所有的类都可以覆写该方法
package org.system;
publicclass Person {
@Override
protectedvoid finalize() throws Throwable {
// TODO Auto-generated method stub
System.out.println("小林道:如果还有下辈子,在也不抢小孩棒棒糖了");
}
public Person() {
System.out.println("小林: 出生的时候 地动山摇 ,满天乌云, 空气都是臭的 妖孽出生了");
}
publicstaticvoid main(String[] args) {
Person per=new Person(); //在对象创建的时候可以执行构造方法
per=null;
System.gc();
}
}
|
1 final : 终结器 定义的类不能被继承,定义的属性不可被修改 为常量, 定义的方法不能被覆写
2 finally: 永远都会执行的代码块 资源处理 关闭资源
3 finlize : 在垃圾回收机制中, 对象回收之前的操作