黑马程序员——学习日志6面向对象(多态,内部类,异常,访问权限)

来源:互联网 发布:股票数据查询 编辑:程序博客网 时间:2024/06/05 18:18

------- android培训、java培训、期待与您交流! ---------- 



1、多态

      可以理解为事物存在的多种体现形态。

      多态的体现:父类或者接口的引用指向或者接受自己的子类对象

      多态的好处和作用:提高了程序的扩展性和后期可维护性

      前提:需要继承或者实现关系,需要覆盖操作。

      弊端:只能使用父类的引用访问父类中的成员

      向上转型:把一个子类当做父类来用是可以的,因为父类有的子类都有;把一个父类当做子类来用就不可以了,因为子类有的父类不一定有;可以定义一个父类类型的变量来记住子类对象,这在程序中称之为向上转型

      强制类型转换:把一个子类当做父类来用的时候,不能调用子类特有方法。因为编译时编译器会做语法检查,看到变量是父类类型那么就会到父类中查找是否有该方法,没有则报错。这种情况下,就需要强制类型转换,将父类类型强转成子类类型。以(子类名)变量名形式进行强制类型转换;强制类型转换时,无论类型是否匹配编译都不会报错,但如果类型不匹配运行会报错,我们可以使用instanceof进行判断,编译时预知错误

多态的特点:成员函数在编译时:要查看引用变量所属的类中是否有所调用的成员。在运行时:要查看对象所属的类中是否有所调用的成员。简单来说:成员函数在多态调用时,编译看左边,运行看右边。

在多态中成员变量的特点:无论编译和运行都参考左边(引用型变量所属的类)。

在多态中静态函数的特点:无论编译和运行,都参考左边。只要引用在,就找引用型变量所属类中的内容。静态方法一进内存就已经绑定在该方法所属的类上了。

2、Object类

Object:是所有对象的直接或者间接父类,是一个超类,该类中定义的肯定是所有对象都具备的功能。Object类中已经提供了对对象是否相同的比较方法,如果自定义类中也有比较相同的功能,没必要重新定义,只要沿袭父类中的功能,建立自己特有的比较内容即可,这就是覆盖。java认为所有对象都具备比较性,该方法equals定义在Object中。

3、内部类

      在类里面定义的类称之为内部类,内部类是外部类的一个成员。

内部类必须创建外部类对象才能使用。

创建内部类对象时必须先创建一个外部类对象,通过一个外部类对象才能创建内部类对象。

      外部类名.内部类名变量名 = new 外部类名().new 内部类名();

      内部类可以直接访问外部类的成员,而外部类不能直接访问内部类的成员。访问方式:外部类名.this.成员名

      内部类可以访问外部类成员,因为在使用内部类时一定会有外部类对象,且只对应一个。

      外部类不能访问内部类成员,因为在使用外部类时有可能还没有创建内部类对象。

      如果一定要在外部类中使用内部类成员,那么需要创建内部类对象,通过对象来访问。

内部类中不能定义静态成员。内部类可以被privatestatic修饰,被static修饰的内部类只能访问外部类中的静态成员

      因为内部类需要创建外部类对象才能使用,static的本意是不创建对象就能使用,这是矛盾的。

内部类的class文件名为:外部类名.内部类名.class

内部类定义在局部位置上:不可以被成员修饰符修饰,也可以直接访问外部类中的成员;同时可以访问所在局部中的局部变量,但必须是被final修饰的。

4、匿名内部类

如果一个类只使用一次,那么可以定义为匿名内部类。

匿名内部类其实就是内部类的简写形式。

定义匿名内部类的前提:内部类必须是继承一个类或者实现接口。

格式:new 父类名或者接口名(){覆盖类或者接口中的代码,(也可以自定义内容。)}

匿名内部类的class文件名为:外部类名$编号.class

什么时候使用匿名内部类呢?通常在使用方法是接口类型参数,并该接口中的方法不超过三个时,可以将匿名内部类作为参数传递。增强阅读性。

5、异常

      异常就是Java程序在运行过程中出现的错误。Java在设计异常体系时,将容易出现的情况都封装成了对象。对于严重的问题,java通过Error类进行描述,不编写代码对其处理;对于非严重的,java通过Exception类进行描述。

6、Throwable

Throwable表示Java中可被抛出的对象,它是所有错误和异常的父类;有两个子类:Error、Exception;Error表示错误,Exception表示异常;RuntimeException表示运行时异常,是Exception的子类

7、异常处理

try

{

      需要检测的代码;

}

catch(异常类  变量)

{

      异常处理代码;

}

finally

{

      一定会执行的代码;

}

Finally代码块只有一种情况不会被执行。就是在之前执行了System.exit(0)。

处理过程:

Try中检测到异常会将异常对象传递给catch,catch捕获到异常进行处理。

Finally里通常用来关闭资源。比如:数据库资源,IO资源等。

需要注意:try是一个独立的代码块,在其中定义的变量只在该变量块中有效。

如果在try以外继续使用,需要在try建立引用。在try对其进行初始化。如果父类方法中声明抛出多个异常,那么重写(覆盖)该方法只能抛出那些异常的一个子集,也就是说子类不能比父类抛出更多的异常。

8、自定义异常

自定义类继承Exception或者其子类。通过构造函数定义异常信息。通过throw将自定义异常抛出。

9、throw和throws

thorws用在函数上,后面跟异常类名。

throw用在函数内,后面跟异常对象。

10、异常细节

Exception中有一个特殊的子类异常RuntimeException 运行时异常。如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过。如果在函数上声明了该异常,调用者可以不用进行处理,编译一样通过。之所以不用在函数上声明,是因为不需要让调用者处理,当该异常发生,希望程序停止,因为在运行时,出现了无法继续运算的情况,希望停止程序后,对代码进行修正。自定义异常时:如果该异常的发生,无法再继续进行运算时,就让自定义异常继承RuntimeException。

异常有两种:编译时被检测异常:该异常在编译时,如果没有处理,那么编译失败;该异常被标识,代表可以被处理。运行时异常(编译时不检测):在编译时,不需要处理,编译器不检查;该异常的发生,建议不处理,让程序停止,需要对代码进行修正。

11、包 package

对类文件进行分类管理,给类提供多层命名空间,写在程序文件的第一行,类名的全称的是  包名.类名,包也是一种封装形式。

包的出现可以让类文件和java的源文件相分离,可以很方便地只将类文件提供给别人使用。

包之间的访问:被访问的包中的类权限必须是public的,类中的成员权限:public或者protected,protected是为其他包中的子类提供的一种权限

 

 

 

 

12、import

      简化类名。import packb.*;为导入包中所有的类,尽量不要写通配符*,需要用到哪个类就导入哪个类,都导进来比较占内存

无包的类可以使用有包的类,有包的类不能使用无包的类导入指定一个类。无论当前包中是否有同名类,都直接匹配导入的类

13、jar包

jar文件是Java文件的一种压缩格式,一般来讲,我们会将一个软件系统的所有class文件打成一个jar文件以供别人使用,当我们用到jar包中的类时,需要将jar文件的绝对路径加到classpath当中

 

 

 


------- android培训、java培训、期待与您交流! ----------

0 0
原创粉丝点击