java基础09

instanceof:用于判断对象的具体类型,只能用于引用数据类型判断。通常在向下转型时做健壮性判断。

多态时,成员的特点:

1.成员变量:编译时,参考引用型变量所属的类中的是否有调用的成员变量,有,编译通过,否则,编译失败。运行时,参考引用型变量所属的类中的是否有调用的成员变量,并运行该所属类中的成员变量。简单说,编译和运行都参考左边。

2.成员函数:编译时,参考引用型变量所属的类中的是否有调用的成员变量,有,编译通过,否则,编译失败。运行时,参考的是对象所属的类中是否有调用的函数。简单说,编译看左边,运行看右边。

3.静态方法:编译时,参考引用型变量所属的类中的是否有调用的静态方法,运行时,参考引用型变量所属的类中的是否有调用的静态方法,简单说,编译和运行都看左边。静态方法直接通过类名就可以调用。

内部类

编译后生成:外部类名+$+内部类名.class

访问特点:1.内部类可以直接访问外部类中的成员。2.外部类要访问内部类,必须建立内部类的对象。

应用环境:一般用于类的设计,分析事物时,发现该事务内部还有事务,而且该内部事务的运行依赖于外部成员,这是应该定义内部类。

1.直接访问外部类中的内部类中的成员:

Outer.Inner in = new Outer().new Inner();

2.内部类是静态的,相当于一个外部类。

Outer.Inner  in  = new Outer.Inner();

3.内部类是静态的,内部类中的成员是静态的。

Outer.Inner.function();

注意:如果内部类中定义了静态成员,该内部类必须是静态的。

为什么内部类能直接访问外部类中的成员呢?因为内部类持有了外部类的引用,外部类名.this

内部类可以存储在局部位置上。内部类在局部位置上只能访问局部中被final修饰的局部变量。

匿名内部类 :就是内部类的简写格式。(前提:内部类必须继承或实现一个外部类或者接口)

匿名内部类其实就是一个子类对象。

匿名内部类的格式:new 父类名(){ 方法的实现;}.方法名();

匿名内部类的应用场景:当函数参数是接口类型时,而且接口中的方法不超过3个,可以使用内名内部类作为参数进行传递。

子类创建过程:加载子类构造函数--->执行父类构造函数--->显示初始化--->构造代码块初始化(子类中的非静态代码块)--->子类构造函数初始化

Object是所有类的顶级父类,Object是不断抽取而来,具备着所有对象的共性内容。

Object中equal()方法,一般都会被重写,应为Object中的equal()比较的是哈希值,很少会用到。

异常:是在运行时期发生的不正常情况。

在java中用类的形式对不正常情况进行了描述和封装对象,描述不正常的情况的类,就称为异常类。其实异常就是java通过面向对象的思想将问题封装成对象。不同的问题用不同的类进行具体的描述。

Throwable体系所有的子类都具有可抛性: 

1.一般不可处理的,Error    特点:是由jvm抛出的严重性的问题,这种问题的发生一般不进行针对性的处理,解决方法修改源代码。

2.可以处理的.Exception

throw:用于在方法内部将对象抛出。throws:用于声明方法可能抛出的异常。

注意:如果让一个类称为异常类,必须要继承异常体系,因为只有成为异常体系的子类才具有可抛性,才可以被两个关键字所操作,throws,throw

异常的分类

1.编译时被检测异常:只要是Exception和其子类都是,除了特殊的子类RuntimeException体系。这种问题一旦出现,希望在编译时就进行检测,让这种问题有对应的处理方式。这样的问题都可以针对性的处理。

2.编译时不检测异常(运行时异常):就是Exception中的RuntimeException和其子类异常。这种问题的发生,无法让功能继续,运算无法进行,更多是调用者的原因导致的而或者引发了内部状态的改变导致的。那么这种问题一般不处理,直接编译通过,在运行时,让调用者调用时的程序强制停止,让调用者对代码进行修改。

所以自定义异常时,要么继承Exception,要么继承RuntimeException。

异常处理的捕捉形式:这是可以对异常进行针对性处理的方式。

具体格式:try
        {
            //需要被捕捉异常的代码
        }
        catch ()
        {
            //处理异常的代码。
        }
        finally
        {
            //最终执行的代码块。
        }

e.printStackTrace();//jvm默认的异常处理机制,就是调用对象的这个方法。

异常处理的原则

1.函数内部如果抛出需要检测的异常,那么函数上必须声明。否则必须在函数内用try catch捕捉,否则编译失败。

2.如果调用到了声明异常的函数,要么try catch 要么throws,否则编译失败。。

3.什么时候catch,什么时候throws? 功能内容可以解决,用catch。解决不了,用throws告诉调用者,由调用者解决。

4.一个功能如果抛出了多个异常,那么调用时,必须有对应多个catch进行针对性的处理。内部有几个需要检测的异常,就抛出几个异常,就需要catch几个。

try catch finally代码块组合特点:

1:try catch finally

2.try catch(多个)当没有必要释放资源时,就可以不写finally

3.try finally 异常无法直接catch处理,资源必须关闭。

异常的注意事项:

1.子类在覆盖父类方法时,如果父类的方法如果抛出了异常,那么子类的方法只能抛出该异常或者该异常的子类。

2.如果父类抛出多个异常,那么子类只能抛出父类异常的子集。

注意:如果父类的方法没有抛出异常,子类覆盖时,一定不能抛出异常。

包(package)

作用:1.对类文件件进行分类管理,2.给类提供多层命名空间。3.写在应用程序的第一行。4.类的全名:包名+类名

总结:包与包之间的类进行访问,被访问的类一定是public,被访问的方法一定是public,不然无法被访问。

protected:保护(只有不同包中的子类引用)

                public    protected    default    private
同一类中    ok        ok               ok        ok
同一包中    ok        ok               ok
子类中        ok        ok
不同包中    ok

猜你喜欢

转载自blog.csdn.net/weixin_42581821/article/details/86620426