面向对象5
来源:互联网 发布:吉祥抽奖软件 编辑:程序博客网 时间:2024/06/06 05:11
---------------------- android培训、java培训、期待与您交流!----------------------
内部类:将一个类定义在另一个类里面,对类里面的类就称为内部类
内部类定义在成员位置上时:
访问特点:
1.内部类可以直接访问外部类中的成员,包括私有成员
2.而外部类要访问内部类中的成员必须要建立内部类的对象。
3.当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中直接建立内部类对象:
建立格式:OuterClass.InnerClass ic=new OuterClass().new InnerClass();
4.当内部类在成员位置上,可以被成员修饰符所修饰。比如:
private:将内部类在外部类中进行封装。
static:内部类就具备static的特性,这时只能访问外部类中的static成员,出现了访问局限。
5.在外部其他类中,如何直接访问static内部类中的非静态成员:
new OuterClass.StaticInnerClass().innerMethod();
6.在外部其他类中,如何直接访问static内部类中的静态成员:
OuterClass.StaticInnerClass.innerStaticMethod();
说明:当内部类中定义了静态成员,该内部类必须是static的。
当描述事物时,事物的内部还有事物,该事物用内部类来描述。因为内部事物在使用外部事物的内容。(如人身体里有心脏)
内部类定义在局部时:
1. 不可以被成员修饰符所修饰(如static)
2. 可以直接访问外部类中的成员,因为还持有外部类中的引用。但是不可以访问它所在方法中的局部变量。只能访问被final修饰的局部变量。
匿名内部类:
1. 匿名内部类其实就是内部类的简写形式
2. 定义匿名内部类的前提:内部类必须是继承一个类或者实现一个接口。
3.匿名内部类的格式:new 父类或者接口([参数]){定义的子类的内容};
4.其实匿名内部类就是一个匿名子类对象。可以理解为带内容的对象。
异常:程序在运行时出现不正常情况
异常由来:问题也是现实生活中一个具体的事物,也可以通过java类的形式进行描述。并封装成对象,其实就是java对不正常情况进行描述后的对象体现。
对于问题的划分:两种:一种是严重的问题,一种非严重的问题。
对于严重的,java通过Error类进行处理。
对于Error一般不编写针对性的代码对其进行处理
对于非严重的,java通过Exception类进行描述。
对于Exception可以使用针对性的处理方式进行处理。
ThrowTable
|——Error
|——Exception
在函数上声明异常:便于提高安全性,让调用处进行处理,不处理则编译失败。
对多异常的处理:
1. 声明异常时,建议声明更为具体的异常,这样处理的可以更具体。
2.对方声明几个异常,就对应有几个catch块,不要定义多余的catch块。如果多个catch块中的异常出现继承关系,父类异常catch块放在后面。
3.在进行catch处理时,catch中一定要定义具体处理方式。不要简单的定义一句e.printStackTrace(),或简单书写一条输出语句,在实际开发中常用异常日志文件的方式进行记录,以便后续查看
自定义异常:
在实际项目工作中经常会出现一些特有的问题,而这些问题并未被java异常所描述,所有这些特有的问题可以按照java对问题封装的思想,将特有的问题进行自定义的异常封装。
当在函数内部出现了throw抛出异常对象(如:throw new NegativeException();//手动通过throw关键字抛出一个自定义异常对象),那么就必须给出对应的处理办法
1.在内部try catch处理;
2.在函数上声明让调用者处理。
一般情况在函数内出现异常,函数上需要声明。
Exception中有一个特殊的子类异常RuntimeException(运行时异常)
如果在函数内抛出该异常,函数上可以不用声明,编译一样通过
如果在函数上声明了该异常,调用者可以不用进行处理,编译一样通过;
之所以不用再函数上声明,是因为不需要让调用者处理。当该异常发生,希望程序停止(因为在运行时,出现了无法继续运算的情况,希望停止程序后对代码进行修正)。
自定义异常时,如果该异常的发生,无法再继续进行运算,就让自定义异常继承RuntimeException。
对于Exception异常分两种:
1. 编译时被检测的异常
2. 编译时不被检测的异常(运行时异常RuntimeException及其子类)
finally代码块:定义一定执行的代码(除非系统提前退出System.exit(0))。
通常用于关闭资源(如数据库连接)
注意:catch是用于处理异常。如果没有catch就代表异常没有被处理过,如果该异常是编译时异常,那么必须声明。
异常在子父类覆盖中的体现:
1. 子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类。
2. 如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集。
3. 如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛异常。如果子类方法发生了异常,就必须要进行try catch处理。绝对不能抛。
当捕获到的异常,本功能处理不了时,可以继续在catch中抛出
如果该异常处理不了,但并不属于该功能出现的异常,可以将异常转换后,再抛出和该功能相关的异常
或者异常可以处理,当需要将异常产生的和本功能相关的问题提供出去,当调用者知道,并处理,也可以将捕获异常处理后,转换新的异常抛出。
练习:写出错误答案错误的原因,用单行注释的方式:
class Demo{int show(int a,int b){return 0;}}
下面那些函数可以存在于Demo的子类中。
A. public int show(int a,int b){return 0;}//可以,覆盖
B. private int show(int a,int b){return 0;}//不可以,权限不够
C. private int show(int a,long b){return 0;}//可以,和父类不是一个函数,相当于重载
D. public show show(int a,int b){return 0;}//不可以,不符合重载的规定
E. static int show(int a,int b){return 0;}//不可以,静态只能覆盖静态
子类继承父类,父类中必须要有默认构造函数,除非子类定义的构造函数特别指明要调用父类中的自定义构造函数。
try语句块的throw语句后不能再有代码,因为语句执行不到。
包:包与包之间进行访问,被访问的包中的类以及类中的成员,需要public修饰。
不同包中的子类还可以直接访问父类中被protected权限修饰的成员。
包与包之间可以使用的权限有两种,public,protected
public protected default private
同一个类中 ok ok ok ok
同一个包中 ok ok ok
子类 ok ok
不同包中 ok
代码示例
1.内部类,静态内部类:
2.局部内部类:
3.练习(匿名内部类):
4.自定义异常类(当除数为负时视为异常) :
4.异常应用:
---------------------- android培训、java培训、期待与您交流!----------------------
详情请查看:http://edu.csdn.net/heima
- 面向对象5
- 面向对象基础5
- 面向对象5
- JavaScript(5) 面向对象
- java面向对象5
- 1.2.5 面向对象
- 面向对象5
- 面向对象5
- 面向对象(5)
- Python 5、面向对象
- 面向对象5---多态
- 面向对象5
- C++面向对象(5)
- 面向对象理论(5)-Polymorphism
- 面向对象学习记录5
- php面向对象详解5
- 面向对象5大基本原则
- php基础5---面向对象
- MySQL 数据备份和恢复
- IPv6资料
- 01背包问题的一维数组解法
- ImagePanel 提供一个专门添加图片的JPanel
- RedHat5搭建简单DNS服务器
- 面向对象5
- linux-用户权限
- 01背包代码(c++)
- XMLHttpRequest 对象
- linux-进程与服务
- 网站框架
- C语言详解 - 枚举类型
- linux配置远程连接
- 黑马程序员---ADO.Net之DateSet