A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 jing3133920 于 2015-5-4 15:01 编辑

一、内部类(内置类,嵌套类)
将一个类定义在另一个类的里面,对里面那个类就成为内部类。
访问特点:
1.内部类可以直接访问外部类中的成员,包括私有成员。
2.而外部类要访问内部类中的成员必须要建立内部类的对象。
示例:
class Outer
{
     int x = 3;
     class Inner//内部类,因为它在成员位置上时可以用private和static修饰。(只限于在成员位置上)
     {
           void function()
           {
               system.out.println("inner :");
           }
     }
    void method()
    {
         System.out.println(x);
     }
]
在主函数中直接调用内部类成员格式:Outer.Inner in = new Outer().new Inner();
内部类能直接访问外部类是因为:内部类中持有一个外部类引用。写法是:外部类名.this
被static修饰的内部类:只能直接访问外部类中的静态成员。
在主函数中直接访问静态内部类中的非静态成员: new Outer.Inner().function();
在主函数中直接访问静态内部类中的静态成员:Outer.Inner.function();
内部类定义在局部时:不可以访问它所在的局部中的变量。只能访问被final修饰的局部变量。
注:
当内部类中定义了静态成员,该内部类必须是static的。
当外部类中的静态方法访问内部类时,内部类也必须是静态的

二、匿名内部类
1匿名内部类其实就是内部类的简写格式。
2.定义匿名内部类的前提:内部类必须是继承一个类或者实现接口。
3.匿名内部类的格式:new 父类或者接口(){定义子类的内容}
示例:
abstract class AbsDemo
{
       abstract void show();
}
class Outer
{
       int x =3;
/*
       class Inner extends AbsDemo
       {
                    void show()
                  {
                            system.out.println("method:"+x);
                   }
        }
*/
       public void function()
       {
            //new Inner().show();
                 new AbsDemo()//匿名对象格式,代替上方绿色代码。匿名内部类就是一个匿名子类对象。即带内容的对象
                  {
                    void show()
                  {
                            system.out.println("method:"+x);
                   }                        
                  }.show();
       }
}

三、异常机制
异常:就是程序在运行时出现不正常情况。
1.异常由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述。并封装成对象。其实就是java对不正常情况进行描述后的对象体现。
2.问题划分:
严重的,Error:对于error一般不编写针对性的代码对其进行处理。
非严重的,Exception:对于Exception可以使用针对性的处理方式进行处理。
Throwable俩个子类Error 和 Exception,它是所有错误或异常的超类.
3.异常的处理,java提供了特有的语句进行处理。
格式:
try
{ 需要被检测的代码; }
catch(异常类 变量)
{ 处理异常的代码;(处理方式) }
finally
{ 一定会执行的语句;  }
其实jvm默认的异常处理机制,就是在Throwable类中调用printStackTrace方法。打印异常的堆栈跟踪信息。
定义功能时,因为参数的不确定性,会导致问题的发生。所以在功能上通过throws的关键字生命了该功能有可能会出现问题。即抛出异常。
例:int div(int a,int b)throws Exception

4.特殊情况对多异常的处理:
1.声明异常时,建议声明更为具体的异常。这样处理的可以更具体。
2.对方声明抛出几个异常就应该有几个catch。不要定义多余的catch块。
如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。
5.自定义异常:
自定义异常只能手动抛出,一般情况下。函数内出现异常,函数上需要声明。
因为父类中已经把异常信息的操作都完成了。
所以子类只要在构造时,必须是继承Exception,然后通过super语句将异常信息传递给父类。(可以直接通过getMessage方法获取自定义的异常)
为什么要继承Exception?
异常体系有一个特点:异常类和异常对象都需要被抛出。他们都具备可抛性。这个可抛性是throwable这个体系中的独有特点。只有这个体系中的类和对象才可以被throws和throw操作。
示例:
class FuShuException extends Exception
{
    FuShuException(String msg)
    { super(msg); }
}
6.throw关键字:
throw new FuShuException(); 手动通过Throw关键字抛出一个自定义异常对象。
throws和throw的区别:
throws:使用在函数上,后面跟的异常类。可以跟多个,并用逗号隔开。
throw: 使用在函数内,后跟的是异常类对象。
7.RuntimeExecption:Exception中有一个特殊的子类异常RuntimeExecption(即运行时异常)。如果在函数内抛出该异常,函数上可以不用声明,编译通过。
如果在函数上声明了该异常。调用者可以不用进行处理,编译通过。
之所以不用函数说明,是因为不需要让调用者处理。
当该异常发生,希望程序停止。因为在运行时,出现了无法继续运算的情况,希望停止程序后,对代码进行修正。


自定义异常时:如果该异常的发生,无法在继续进行运算,就让自定义异常继承RuntimeException。



评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

11 个回复

正序浏览
两大难点都总结的很好。
回复 使用道具 举报
学习学习 挺好的
回复 使用道具 举报
学的好快啊   我也是学到第九天,明天才开始抽象类
回复 使用道具 举报
赞一个。。。。。。
回复 使用道具 举报
顶                                         
回复 使用道具 举报
cyr 中级黑马 2015-5-4 21:12:24
7#
加油,天天总结天天进步。
回复 使用道具 举报
明天开始面向对象的学习,激动ing
回复 使用道具 举报
挺细心的
回复 使用道具 举报
没有第七天吗?
回复 使用道具 举报
学习学习!
回复 使用道具 举报
总结的好好,学习学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马