JAVA复习(CharSequence接口、RunTime类、System类、object类中的finalize())

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;

 

public class RunTimeTest {

     public static void 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 目标数组的长度

 

范例:实现一个数组拷贝

 

     public static void main(String[] args) {

          // 定义两个数组

         

          int[] A=new int[]{1,2,3,4,5};

         

          int[]B=new int[10];

         

         

          System.arraycopy(A, 0, B, 0, A.length);

         

          System.out.println(Arrays.toString(B));

     }

通过以上方法可以实现数组之间的拷贝功能,主要作用就是解决数组长度不可改变的缺陷,为数组扩容

 

 

2 public static long currentTimeMillis(): 获得当前的日期时间,以long类型返回

 

     public static void 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);

     }

 

练习: 统计一次操作花费的时间,并最终把时间格式化输出:

public static void 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;

 

public class Person {

     @Override

     protected void finalize() throws Throwable {

          // TODO Auto-generated method stub

          System.out.println("小林道:如果还有下辈子,在也不抢小孩棒棒糖了");

     }

 

 

     public Person() {

         

          System.out.println("小林: 出生的时候 地动山摇 ,满天乌云, 空气都是臭的 妖孽出生了");

     }

    

     public static void main(String[] args) {

         

          Person per=new Person(); //在对象创建的时候可以执行构造方法

         

          per=null;

         

          System.gc();

     }

}

 

 

 面试题: final  finally  finlize  三个关键字的区别?

 

1 final 终结器 定义的类不能被继承,定义的属性不可被修改 为常量, 定义的方法不能被覆写

 

2 finally 永远都会执行的代码块 资源处理 关闭资源

 

3 finlize 在垃圾回收机制中, 对象回收之前的操作

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值