------- android培训、java培训、期待与您交流! ----------
内部类:
1,内部类可以直接访问外部类中的成员,包括私有。
2,外部类要访问内部类要创建内部类的对象。
怎么直接访问内部类中的成员?
内部类所在类名.内部类 引用变量名(自定)=new 内部类所在类名().new 内部类();
例:
Tips:内部类定义在局部时,
1,不可以被成员修饰符修饰,静态,私有
2,可以直接访问外部类中的成员,因为还持有外部类中的引用。
但是不可以访问它所在的局部中的变量,只能访问被final修饰的局部变量。
Tips:当内部类成员是静态的时候,此内部类也须是静态。
当外部静态类要访问内部类时,内部类也须是静态。
内部类的应用:
描述事物时,事物的内部还有事物,改事物用内部类来描述。因为内部事物在使用外部事物的内容。(内部事物要直接访问外部事物)
匿名内部类:
1,匿名内部类是内部类的简写格式。
2,定义匿名内部类的前提:
内部类必须继承一个类或者实现接口。
用以前的方法写:
Class Inner extends AbsDemo
{
Void show()
{
S.o.p();
}
}
Public void function()
{
New Inner ().show();
}
异常:
就是程序在运行时出现的不正常情况。(把问题封装成对象就是异常)
异常的由来:问题也是现实生活中的一个具体的事物,也可以通过java的类的形式进 行描述,并封装成对象。
问题划分:
严重的问题:通过Error类进行描述。
对于Error一般不编写针对性代码进行处理。
非严重问题:通过Exception类进行描述。
对于Exception可以使用针对的处理方式进行处理。
无论Error或Exception都有些共性内容。
就可以抽取,他们的父类是Throwable
异常的处理:
Java提供了特有语句进行处理。
Class Demo
{
Int div(int a ,int b)
{
Return a/b;//出现异常,抛给catch
}
}
Class ExceptionDemo
{
Public static void main(String[] args)
{
Demo d=new Demo();
try
{
需要被检测的代码;
}
Catch (异常类(Exception) 变量)//捕获异常
{
处理异常的代码;处理方式
}
Finally
{
一定会执行的语句
}
}
}
对多异常的处理:throws 异常名,(逗号分隔)另一个异常;
1,;生命异常时,建议声明更为具体的异常,便于处理的更具体。
下边定义两个catch来分别捕捉。
2,对方声明几个异常,就对应有几个catch块,不要定义多余的catch块。
若多个catch块异常出现继承关系,那么将父类catch块放在最下边。
建议:在进行catch处理时,catch中一定要定义具体处理方式。
自定义异常:
项目中会出现特有问题,
这些问题并未被java描述封装对象。对于这些特有问题可以按照问题封装思想对其进行自定义异常封装。
函数内出现异常函数需要声明:throws
因为父类中把异常信息操作完成了。
所以子类只要在构造时,将异常信息传递给父类通过super语句
就可以直接通过getMesssage方法获取自定义的异常信息了。
为什么继承Exception
异常体系有个特点:异常类和异常对象都会被抛出(可抛性)
可抛性是throwable体系中的独有特点,只有这个体系中的类和对象才可以被throws和throw操作
定义异常类
Class mingziException extends Exception(继承Exception)
{
mingziException(String msg)
{
super (msg);
}
}
Class Demo
{
Int div(int a ,int b)throws mingziException
{
If(b<0)
throw new mingziException();//手动通过throw关键字抛出一个自定义异常对象
Return a/b;
}
}
Throw使用在函数内,后面跟异常对象。
Throws使用在函数上,后面跟异常类,可以多个,逗号隔开。
Exception中的RuntimeException特殊
函数内抛出异常,函数上不用声明
函数上声明了异常,调用者可以不用进行处理。
异常分两种:
1,编译时被检测的异常
2,编译时不被检测的异常(运行时异常。就是RuntimeException以及其子类)
}