黑马程序员--Java基础--05内部类及异常

----------- 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学习型技术博客、期待与您交流! ------------

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值