黑马程序员_java之内部类和异常

来源:互联网 发布:好玩的手游推荐 知乎 编辑:程序博客网 时间:2024/06/05 11:25

------- android培训、java培训、期待与您交流! ----------

*内部类:(成员内部类、局部内部类、匿名内部类、嵌套类)

1、将类A定义在另一个类B中。则类A就是内部类。

2、什么时候使用内部类:

有Outer和Inner两个类,当Inner想要直接访问 Outer中的成员,而 Outer需要建立Inner对象来访问Inner中的成员。这 个时候,我们就可 以把Inner定义为Outer的内部类。

class Body

{

private class Heart()

{

//调用身体的其他部分

}

}

3、访问方式:

A:内部类可以直接访问外部类中的成员,包括私有成员。

B:而外部类要访问内部类中的成员必须要建立内部类的对象。

4、内部的存放位置

A:成员位置

**可以被private,static成员修饰符修饰。

**被static修饰的内部类只能访问外部类中的静态成员。

B:局部位置

**也可以直接访问外部类中的成员。

**同时可以访问所在局部中的局部变量,但必须是被final修饰的。

Outer$Inner.class:$表示成员内部类。

Outer$1Inner.class:$1表示它是一个局部内部类。

5、为什么会出现编号呢?

因为局部内部类可以不写名字,所以带编号。

6、匿名内部类(很重要,常用):没有名字的内部类。它是内部类的简化写法。

(1)前提:内部类可以继承或实现一个外部类或者接口。

(2)格式为:new 外部类名或者接口名(){覆盖类或者接口中的代码,(也可以   自定义内容。)}

(3)简单理解:就是建立一个带内容的外部类或者接口的子类匿名对象。

(4)匿名内部类出现的位置:

A a = new(){};

fun (new A(){});(常用)

return new(){};

(5)注意:使用匿名内部类一定要在new语句中使用,new后面跟随的是父类或   者接口名称,而且两者不可兼得。

(6)代码体现:

//局部的匿名内部类(重点)

class Outer

{

public void method()

{

/*new Inter()

{

public void show1()

{

System.out.println("show1");

}

public void show2()

{

System.out.println("show1");

}

}.show1();

new Inter()

{

public void show1()

{

System.out.println("show1");

}

public void show2()

{

System.out.println("show1");

}

}.show2();*/

Inter i = new Inter()

{

public void show1()

{

System.out.println("show1");

}

public void show2()

{

System.out.println("show1");

}

};

i.show1();

i.show2();

}

}

*异常:

定义:就是程序运行过程中,遇到了问题。

异常关键字:

A:throw:抛出异常,语法:throw 异常对象();

B:throws:给方法声明异常,

语法:public static void fun()throws 异常类型{}

C:try:监控区,不能单独出现,只能与catch或finally一起出现,当然,两  者一起出现也可以。在try块中抛出异常不会导致方法返回,而是终止  当前try块的运行。

D:catch:捕获及处理异常。不能单独出现,只能与try一起出现,后面有一个   ();其中必须仅能指定一个异常类型,类型后跟随对象名。

E:finally:总是执行(仅有),执行过程:默认情况下,从上到下执行,到了 finally再执行它,在finally执行之前,方法要返回(异常返回                      和return返回),这时会在返回之前先执行finally,这种执行方式我们称之为“插入执行finally”。

1、异常的体系:

Throwable

---Error:通常出现重大问题如:运行的类不存在或者内存溢出等。

不编写针对代码对其处理。

---Exception:在运行时运行出现的一些情况,可以通过try catch  finally

2、Throwable

A:getMessage() :返回此 throwable 的详细消息字符串。

class Throwable

{

String detailMessage;

Throwable(){}

Throwable(String message)

{

this.detailMessage = message;

}

public String getMessage()

{

return detailMessage;

}

}

B:toString():获取异常类名和异常信息,返回字符串。

C:printStackTrace():获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。

3、处理异常处理方式:

A:try...catch...finally

格式:

try

{

需要检测的代码;

}

catch(异常类  变量)

{

异常处理代码;

}

...

finally

{

一定会执行的代码;//释放资源

try/catch处理过程:

在try中抛出异常,有对应的catch捕获,把抛出异常的语句放到try中,try是监控区,用来监控这些语句,在监控区中出现异常,不会使方法返回。这时会在catch中查找哪一个catch能够处理这个异常,找到这个catch,然后交给它,让它处理,catch捕获处理异常的块,catch块结束后,程序向下正常运行。

}

变形:

try...catch(...)

try...finally

try...catch(...)...finally

B:抛出 throws----throw

声明异常:

Public static String fun()throws Exception{}

throw手动抛出异常:

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

Exception e = new Exception();

throw e;

}

throws:用于标识函数暴露出的异常。thorws用在函数上,后面跟异常 类名(可以由多个,用,隔开)。

throw:用于抛出异常对象。throw用在函数内,后面跟异常对象。

C:如何选择用哪种方式?

(1)能处理,建议处理。try...catch...finally

(2)处理不了,抛出。

D:自定义异常

自定义类继承Exception或者其子类(RuntimeException)

class MyException extends Exception

{

MyException(){}

MyException(Stirng message)

{

super(message); //super是Exception里面的

}

}

class Student

{

public void giveAge(int age) throws MyException

{

if(age>40 || age<0)

{

//throw new MyExcetpion("建议不学了");

MyExcepiont my = new MyExcetpion("建议不学了");

throw my;

}

else

{

System.out.println("符号要求,可以学习Java");

}

}

}

E:RuntimeException和Exception

区别:RuntimeException就是要你改代码的。你可以不处理。

常见异常总结:

*索引越界——ArrayIndexOutOfBoundsException

*类型转换——ClassCastExceptio

*找不到类——ClassNotFoundExceptiion

*空指针异常——NullPointException

*找不到文件——FileNotFoundException

*数据格式化异常——NumberFormatException

*找不到元素异常——NoSuchElementException

*字符串索引越界——StringIndexOutOfBoundsException

*没有被序列化异常——NotSerializableException

*需要的数据和输入的类型不匹配——InputMismatchException

*线程异常:

InterruptedException

IllegalArgumentException

原创粉丝点击