Java 基础 异常 常用类库 对象克隆

为什么要抛出异常:

在编写程序的时候,很多情况不是程序本身出现了问题,而是外界环境造成的系统异常

用户输入的内容:int 来接收数字  期待用户输入数字

进行文件读取的时候,期待想要读取的文件永远存在  但是实际上没有保证文件永远存在

写入文件的时候 期待 磁盘永远有空间

异常 运行时异常  普通的异常

区别:

RunTimeException  与 Exception的区别

RunTimeException 在编译阶段可以用不强制处理

Exception 在编译阶段必须强制处理

Throw   throws   try  catch finally

Throw 手动抛出一个异常

Throws 用在方法声明处,声明在方法上抛出一个异常,由该方法的调用处 处理异常

Try{} 存放可能出现异常的代码

Catch 匹配异常的类型,如果匹配成功,则进行异常的处理

Finally 永远执行的代码 主要用于资源关闭

今天知识点:

常用类库

StringBuilder

Stirng这个类 字符串的内容不可改变

  public static void main(String[] args) {

  

//   String str="hello";

//   

//   changeStr(str);

//   

//   System.out.println(str);

  

  StringBuilder sbd=new StringBuilder("hello");

  

  changeStr(sbd);

  

  System.out.println(sbd);

}

public static void changeStr(StringBuilder str) {

str.append("world");  //hello world

}

可以频繁修改字符串,在实际使用中,一般来说首选使用String来完成,只有在需要频繁小修改字符串的时候才使用StringBuilder 后者StringBuffer

以上两个类除了线程的安全性之外,其他的功能全部一样

RunTime类

RunTime属于运行时的操作类,也是JVM运行时需要加载的类

RunTime类的方法

public native long totalMemory(); 取得总共的可用内存

 public native long maxMemory(); 取得最大可用内存

public native long freeMemory(); 取得空闲内存

public native void gc(); 调用垃圾收集器,释放内存空间

范例:通过RunTime类取得JVM内存信息

System类

在程序以开始输出的时候就已经在使用这个类,属于系统类

System.out 输出

System.err 错误的输出

System.in 输入

System类常用的方法

public static native void arraycopy(Object src,  int  srcPos,

                                        Object dest, int destPos,

                                        int length);

数组拷贝

Object src  源数组  int srcPos 原数组开始拷贝的位置

Object desc 目标数组  int destPos目标数组的开始位置  int length长度

范例:数组拷贝

package org.wubo.test;

 

public class SystemDemo {

 

public static void main(String[] args) {

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

 

int arr2[]=new int[10];

 

 

System.arraycopy(arr1, 0, arr2, 0, arr1.length);

 

 

for(int i=0;i<arr2.length;i++) {

 

System.out.println(arr2[i]);

}

}

}

 

方法2

public static native long currentTimeMillis(); 取得当前的系统时间

范例:取得当前的系统时间

long currentTime=System.currentTimeMillis(); //取得当前的时间

 

System.out.println(currentTime);

 

Date date=new Date(currentTime);

 

System.out.println(date);

练习: 通过 currentTimeMillis()方法可以取得当前时间,计算一个操作过程所花费的时间是多少

例如 字符串拼接的操作 拼接10000次之后 得出总共用了多少时间?

package org.wubo.test;

 

import java.util.Date;

 

public class SystemDemo {

 

public static void main(String[] args) {

 

long start=System.currentTimeMillis(); //取得当前的时间

 

String str="";

 

for(int i=0;i<10000;i++) {

 

str+="hello world";

}

 

long end=System.currentTimeMillis(); //获得结束时间

 

System.out.println("时间:"+(end-start)+"ms");

}

}

 

Finlize 作用

对象在创建的时候,存在构造方法表示对象属性的初始化

package org.wubo.test;

 

import java.util.Date;

 

public class SystemDemo {

 

public static void main(String[] args) {

 

Person  per=new Person();

 

per=null;

 

System.gc();

 

}

}

 

class Person{

 

public Person() {

 

 

System.out.println("出生了 地动山摇 满天乌云 代表妖孽出生了");

}

 

@Override

public void finalize() throws Throwable {

// TODO Auto-generated method stub

System.out.println("我真的还想在活500年");

}

 

}

范例:对象的创建与销毁

日期类

Date

主要掌握Date类与long类型相互转换的操作

Public Date();  获取的当前时间

Pubic Date(long time) 把long类型的时间转换为Date类型

Public long getTime() 把Date类型的时间转换为long类型

范例:

public static void main(String[] args) {

 

Date date=new Date();

//把当前时间转换为long类型

long time=date.getTime();

System.out.println(time);

//把long类型的time转换为Date类型输出

System.out.println(new Date(time));

}

日期格式化类

SimpleDateFormat  java.text

对于SimpleDateFormat 只有两种操作 第一种

把Date类型格式化为字符串类型 ,格式化的格式由用户给定

package org.wubo.test;

import java.text.SimpleDateFormat;

import java.util.Date;

public class SystemDemo {

public static void main(String[] args) {

Date date=new Date();

//把当前时间转换为long类型

long time=date.getTime();

//System.out.println(time);

//把long类型的time转换为Date类型输出

//System.out.println(new Date(time));

SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd:HH:mm:ss");

 

String d=sd.format(date);

 

System.out.println(d);

}

}

第二种

把字符串日期格式 转换为Date类型格式

package org.wubo.test;

 

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

 

public class SystemDemo {

 

public static void main(String[] args) throws ParseException {

 

 

Date date=new Date();

 

//把当前时间转换为long类型

long time=date.getTime();

 

//System.out.println(time);

 

//把long类型的time转换为Date类型输出

//System.out.println(new Date(time));

 

SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd:HH:mm:ss");

 

String d=sd.format(date);

 

// 转换的内容由可能为用户输入的内容 输入的内容  

 Date mydate=sd.parse(d);  //通过parse方法 转换

 

 System.out.println(mydate);

 

 

}

}

 

 

随机数类

Random  主要目的产生随机数

 AtomicLong 原子数据

public static void main(String[] args) {

 

Random ran=new Random();

 

for(int i=0;i<10;i++) {

 

System.out.println(ran.nextInt(100));  //输出0~10范围内的随机数 输出10次

}

}

public static void main(String[] args) {

 

    UUID uid=UUID.randomUUID();

    

    System.out.println(uid);

}

Math类

java为用户提供的一些数学操作类,其中四舍五入的操作 以及PI的定义

public static void main(String[] args) {

   System.out.println(Math.round(15.5)); //16

   System.out.println(Math.round(-15.6)); //-16

   System.out.println(Math.PI);

}

大数字操作类

package org.wubo.test;

 

import java.math.BigInteger;

import java.util.Random;

import java.util.UUID;

 

public class RandomTest {

 

public static void main(String[] args) {

 

    int max=Integer.MAX_VALUE;

    

    System.out.println(max);

    

    BigInteger bigA=new BigInteger(max+"");

    

    BigInteger bigb=new BigInteger(max+"");

    

    System.out.println( bigA.add(bigb)); //两个大整数相加

    

    System.out.println(bigA.subtract(bigb));  //两个大整数相减的方法

    

    

    System.out.println(bigA.multiply(bigb)); //两个大整数相乘

    

    System.out.println(bigA.divide(bigb));  //相除

}

}

 

Arrays类

数组的工具类,提供了一系列的数组相关的操作方法

Arrays类中提供的方法

BinarySearch()二分查找

int[]arr=new int[]{1,2,3,4,5,6,7,8,9};

 

 int key=Arrays.binarySearch(arr, 3);

 

 System.out.println(key);

toSting() 理解该方法

Fill(); 给定数组 为其填充内容

int[]arr=new int[10];

 

Arrays.fill(arr, 20);

 

for(int i=0;i<arr.length;i++) {

 

System.out.println(arr[i]);

}

数组的比较

数组是 引用数据类型

 public static boolean equals(long[] a, long[] a2) {

        if (a==a2) 两个地址相同

            return true;

        if (a==null || a2==null)

            return false;

 

        int length = a.length;

        if (a2.length != length)

            return false;

 

        for (int i=0; i<length; i++)

            if (a[i] != a2[i])

                return false;

 

        return true;

    }

使用Arrays.equals进行数组的排序

int[]arr=new int[] {1,2,3};

int[]arr2=new int[] {1,2,3};

boolean flag=Arrays.equals(arr, arr2);

以上排序代码必须保持两个数组顺序必须一致的情况下才能进行正确比较

任务

实现二分查找

给定一个有序的数组

1 递归

2 非递归

3 二分加强版

任务2 实现改版的数组比较 equals

比较器:

Comparable 接口

接口代表一种标准 或者约定 Comparable接口进行对象的排序,如果一个类想要进行排序就必须实现这个接口

package org.wubo.test;

 

import java.util.Arrays;

 

class Person implements Comparable{

 

private int age;

 

private String name;

 

public Person(String name,int age) {

 

this.name=name;

 

this.age=age;

}

@Override

public String toString() {

return "Person [age=" + age + ", name=" + name + "]";

}

@Override

public int compareTo(Object o) {  //该方法只需要反回3个值 0 -1  1

// TODO Auto-generated method stub

Person p=null;

if(o instanceof Person) {

p=(Person)o;

}

if(this.age>p.age) {

 

return 1;

}else if(this.age<p.age) {

 

return -1;

}

 

return 0;

}

 

}

public class CompareTest {

 

public static void main(String[] args) {

 

Person per[]=new Person[] {new Person("张三",60),new Person("李四",70),new Person("隔壁薛哲",18)};

Arrays.sort(per);

 

String

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

}

}

 

另一个比较器:

Comparator

如果一个类已经编写完成,但是在设计之初没有考虑到排序的情况,但是这个类已经编写好了,不太方便进行再次修改,又想完成排序的功能

package org.wubo.test;

 

import java.util.Arrays;

import java.util.Comparator;

class Person{

private int age;

private String name;

public Person(String name,int age) {

this.name=name;

this.age=age;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Override

public String toString() {

return "Person [age=" + age + ", name=" + name + "]";

}

}

class PersonCompare implements Comparator{

@Override

public int compare(Object o1, Object o2) {

// TODO Auto-generated method stub

Person p1=null,p2=null;

if(o1 instanceof Person && o2 instanceof Person) {

 

p1=(Person)o1;

 

p2=(Person)o2;

}

 

if(p1.getAge()>p2.getAge()) {

 

return 1;

}else if(p1.getAge()<p2.getAge()) {

 

return -1;

}

return 0;

}

}

public class CompareTest {

public static void main(String[] args) {

Person per[]=new Person[] {new Person("张三",60),new Person("李四",70),new Person("隔壁薛哲",18)};

Arrays.sort(per,new PersonCompare());

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

}

}

对象克隆

其实就是对象复制 Object类中存在clone方法,在使用克隆之前必须实现相应的接口

Clonealbe 接口

范例:

 

Person per1=new Person("张三",20);

 

Person per2=(Person)per1.clone();

 

System.out.println(per1==per2);

总结:

StirngBuilder 和 StringBuffer 两个的区别?

StringBuilder异步处理 线程不安全

StringBuffer 同步处理  线程安全

Date

与long类型相互的转换

SimpleDateFormat(格式要求 yyyy-MM-dd)

对String进行格式化成date  把Date 格式化成String

System  Runtime 类

获得当前的系统时间  gc方法  finlize方法的使用

排序比较

Compareable  comparator  

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值