有两个多月没写了吧,没坚持下来,趁着今天生日还没过,更紧更新一下^=^
1.关于Java的拷贝
Java中没有引用传递的说法,只有值传递,而且传递的只是一份拷贝。因为传递的是拷贝,所以修改的往往只是拷贝的值,而原来的值没有变化,但是对于对象引用的拷贝,拷贝的是内存中指向的对象的首地址,因此,通过拷贝修改了对象的内容之后,对象的内容是已经改变了的。三种情况如下:
(1)md.change3(date); //假如让date+1,date修改的是拷贝的值,原来的值不变
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("=============");
}
}
}