----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
内部类
内部类是定义在另一个类中的类,为什么使用内部类:
内部类方法可以访问该类定义所在作用于中的数据,包含私有数据。
内部类可以对同一包中的其他类隐藏。
想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。
public class Outer{ //定义外部类
public class Inter{ //定义内部类
public void getStr(){
//输出外部类中的私有属性
System.out.println("Outer.str="+str);
}
}
private String str;
}
内部类的访问规则:
内部类可以直接访问外部类中的成员,包括私有。之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式 外部类名.this
外部类要访问内部类,必须建立内部类对象。
外部类名.内部类名 变量名 = 外部类对象.内部类对象;
Outer.Innerin = new Outer().new Inner();
当内部类被static关键字修饰时,规则如下:
当内部类被static修饰后,只能直接访问外部类中的static成员。出现了访问局限。
在外部其他类中,如何直接访问static内部类的非静态成员呢?
newOuter.Inner().function();
在外部其他类中,如何直接访问static内部类的静态成员呢?
Outer.Inner.function();
注意:当内部类中定义了静态成员,该内部类必须是static的。
当外部类中的静态方法访问内部类时,内部类也必须是static的。
匿名内部类
将局部内部类的使用再深入一步,假如只创建这个类的一个对象,就不必命名了,这种类称为匿名内部类。
定义匿名内部类的前提为内部类必须是继承一个类或者实现接口。
匿名内部类的格式:new 父类或者接口(){定义子类的内容}
ActionListener listener = mew ActionListener(){
public void actionPer(){
}
};//创建了一个实现ActionListener 接口的类的对象
注:匿名内部类中定义的方法最好不要超过3个。
异常
在java中异常对象都是派生于Throwable类的一个实例。
Throwable包含
Error:通常出现重大问题如:运行的类不存在或者内存溢出等。
不编写针对代码对其处理
Exception :在运行时运行出现的一起情况,可以通过try catch finally
Exceptoin中有一个特殊的子类异常RuntimeException运行时异常,其包含下面几种情况:
错误的类型转换
数组访问越界
访问空指针
如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过。
如果在函数上声明了该异常。调用者可以不用进行处理。编译一样通过;
之所以不用在函数声明,是因为不需要让调用者处理。
当该异常发生,希望程序停止。因为在运行时,出现了无法继续运算的情况,希望停止程序后,对代码进行修正。
Throws及throw
throws用于标识函数暴露出的异常。
throw用于抛出异常对象。
throws与throw的区别:
thorws用在函数上,后面跟异常类名。
throw用在函数内,后面跟异常对象。
class MyException
{
//throws用于标识异常。
public Image loadImage()throws EOFException{
if(n<len)
//throw抛出异常对象
throw new EOFException();
}
}
异常处理
try
{
需要检测的代码;
}
catch(异常类 变量)
{
异常处理代码;
}
finally
{
一定会执行的代码;
}
Finally代码块只有一种情况不会被执行。就是在之前执行了System.exit(0)。
class Demo
{
//在功能上通过throws的关键字声明了该功能有可能会出现问题。
int math(int a,int b)throws Exception
{
if(b==0)
throw new Exception;//当b为0时抛出异常
return a/b;
}
}
class ExceptionDemo
{
public static void main(String[] args)
{
Demo m = new Demo();
try //定义会产生异常的语句块
{
int x = m.math(4,0);
System.out.println("x="+x);
}
catch (Exception e) //接收异常处理
{
e.printStackTrace();
}
finally //捕捉异常后也肯定会执行的语句
{
System.out.println("我肯定是行");
}
自定义异常
如果该异常的发生,无法在继续进行运算,就让自定义异常继承RuntimeException。//自定义异常继承Exception
class WoException extends Exception
{
//重写父类的构造函数
WoException(String message){
super(message);
}
}
class Demo
{
//在功能上通过throws的关键字声明了该功能有可能会出现问题。
int math(int a,int b)throws Exception
{
if(b==0)
throw new WoException;//当b为0时抛出自定义异常
return a/b;
}
}
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------