异常 垃圾对象等

有两个多月没写了吧,没坚持下来,趁着今天生日还没过,更紧更新一下^=^

 

1.关于Java的拷贝

Java中没有引用传递的说法,只有值传递,而且传递的只是一份拷贝。因为传递的是拷贝,所以修改的往往只是拷贝的值,而原来的值没有变化,但是对于对象引用的拷贝,拷贝的是内存中指向的对象的首地址,因此,通过拷贝修改了对象的内容之后,对象的内容是已经改变了的。三种情况如下:

(1)md.change3(date);  //假如让date+1date修改的是拷贝的值,原来的值不变

System.out.println(date);

 

    (2)public void change1(Dog dog1){

      

       dog1.setDogAge(6);

    } //因为都指向同一个对象,因此,通过拷贝修改对象,对象其实已经改变。

 

(3)public void change5(Dog dog){

      

       dog = new Dog("小黑",5);

    } //因为新new了一个对象,所以这个时候是两个对象,原来的对象不改变

   

 

2.没有被引用的对象被称为垃圾对象。垃圾对象的三种情形:

(1) void go(){

Life  z = new Life();

}方法结束后满足垃圾回收

(2) Life  z = new Life();

    z = new Life();原来指向的对象满足垃圾回收

(3) Life  z = new Life();

z = null; 原来指向的对象满足垃圾回收

 

 

 

3.异常.

(1)总述:

异常(Exception)是一种特殊的运行错误,是在程序运行过程中发生、会打断程序正常执行的错误。Error类对象由Java虚拟机生成并抛出;

A 无法恢复

B OutOfMerroyError

Exception类对象由应用程序处理或抛出

(2)异常Throwable类:

分两类:a.错误Error    OutOfMerroyError超出内存b.违例Exception

错误是没有办法的,只能重新启动机器

‚违例又分为:

A 编译时的错误compile error有时也叫checkedException 

B 运行时的异常runtimeException有时也叫uncheckedException

编译异常:SQLException

运行异常:ArithmeticException,NullPointerException,NumberFormatException

程序员只能处理违例,对错误无能为力。

(3) 对于异常的处理:

捕获异常通过try-catch-finally语句实现。getMessage()一般不用,一般用printStackTrace(),用来打印出异常。

A.如果try{ }块中有多个异常,当执行到第一个异常时,系统会处理这个异常,其他的异常不会再处理,会被忽略。

B.catch语句块中是对违例对象进行处理的代码,每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的违例对象。与其它对象一样,可以访问一个违例对象的成员变量或调用它的方法。

C. 使用多重 catch 语句时,异常子类一定要位于异常父类之前。也就是说,异常的处理是按金字塔的形状排列,最后的Exception父类放在最后。如果不按这个顺序排列,将会出错。

D.finally语句是任选的   捕获例外的最后一步是通过finally语句为例外处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。不论在try代码块中是否发生了异常事件,finally块中的语句都会被执行。

如果try或者catch块有return 指令,finally还是会被执行,流程先跳到finally然后再回到return指令

E.格式:

try{

       ...... //可能产生违例的代码

}catch( ExceptionName1 e ){

       ...... //当产生ExceptionName1型违例时的处置措施

}catch( ExceptionName2 e ){

......       //当产生ExceptionName2型违例时的处置措施

}  [ finally{

...... //无条件执行的语句

 

 

4.抛出异常

(1)声明:throws,说明下面的代码块可能存在异常,但也可能没有异常,当声明了throws      的时候,可以不抛出throw,说明没有异常。有throws就一定要执行try--catch--finally

(2)抛出:throw ,当抛出异常thorw后,一定要先在函数名里声明throws。然后用try--catch-       -finally来处理。但如果抛出的是运行时的异常如RuntimeException则不用在函数名里声明throws

(3)例子

public static void f1() throws Exception{

       throw new NullPointerException();

    }

 

 

5.自定义异常

自定义异常时,如果继承的是Exception,则需要抛出异常,并且执行try--catch;如果继承RuntimeException,则不能抛出异常,try--catch可执行也可以不执行。

例子:

public class ItIsAllMyFaultException extends RuntimeException{

 

    private String reason;

   

    public  ItIsAllMyFaultException(String reason){

      

       super(reason);

    }

==================================================================

public class ExceptionDemo {

 

   

    public static void main(String[] args) {

       /*try{

       withDrow();

       System.out.println("in the try method");

       }

       catch(ItIsAllMyFaultException e){

           System.out.println("This is my Exception!");

           e.printStackTrace();

       }

       finally{

           System.out.println("in the finally method");

       }*/

    withDrow();

   

   

    }

   

    public static void withDrow()throws ItIsAllMyFaultException{

      

       int i = 2000;

       int j = 4000;

       if(i<j){

          

//         throw new ItIsAllMyFaultException();

           System.out.println("=============");

       }

    }

 

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值