Java面向对象编程思想.pdf
《Java面向对象编程思想.pdf》由会员分享,可在线阅读,更多相关《Java面向对象编程思想.pdf(37页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、Java 面向对象编程思想 网络资源大家共享 Java 面向对象编程思想面向对象编程思想 Java 面向对象编程思想.1 1 版权声明.2 2 第一章.浅议.2 2.1 什么是类,什么是对象.2 2.2 类实例化的几个过程详解.3 2.3 什么是继承.4 2.4 什么是重载.5 2.5 什么是重写.5 2.6 多态的三种表现形式.6 3 第二章构造方法.6 4 第三章.抽象类和方法.7 5 第四章.接口.7 6 第五章.接口和抽象类的区别.8 7 第六章.Java 中的异常.13 7.1 异常和异常处理的初步认识.13 7.2 Java 中异常的封装.15 7.3 异常处理 try/catch
2、/finally.16 7.4 异常的生成再认识.22 7.5 Log4e 插件使用.25 8 第七章.Java 中的修饰符.26 Java 面向对象编程思想 网络资源大家共享 1 版权声明版权声明 此文档只能用于学习以及教学,请勿用作商业用途,因此而产生的法律问题,本人一概不负责。本人声明,此文档资料为本人教学经验和网络资料收集合并之成果,如果在文档中引用了您的资料,而引起了侵犯您的权益的话,可以发送邮件知会,本人必定删除为是。2 第一章第一章.浅议浅议 总所周知,Java 是一种面向对象的语言(所谓 OOP-Object Oriented Programming),但是很多人在学习 Jav
3、a 的过程中对什么是类,什么是对象,什么是面向对象,为什么要有继承,为什么要有实现,为什么要继承和实现,为什么要有抽象类和接口都不是十分的清楚,今天在这里,就让不才浅议,未免贻笑大方,还望各位大大不吝赐教。注:阅读此文档,不需要你是使用注:阅读此文档,不需要你是使用 Java 的高手,但是已经假设你有了一定的的高手,但是已经假设你有了一定的 Java 技术的基础。技术的基础。理解面向对象,理解抽象,我想就应该是真正开始用面向对象的思想去分析问题,解决问题了吧。2.1 什么是类,什么是对象什么是类,什么是对象 首先讲清楚类和对象的区别。类是广泛的概念,表示一个具有相同属性和方法的多个对象的集合,
4、是一个有共同性质的群体,而对象,所谓“万物皆对象”,指的是具体的一个实实在在的东西。例如,“人”是一个类,它可以表示地球上所有的人;而“张三”、“李四”、“爱因斯坦”等则是Java 面向对象编程思想 网络资源大家共享 一个个的对象,或者说它们是“人”这个类的一个个实例。在 Java 中,我们可以定义类,然后创建类的对象。例如:/声明一个类“Human”class Human private String name;public String getName()return name;public void setName(String value)this.name=value;通过一个类来创
5、建一个对象:Human human=new Human();2.2 类实例化的几个过程详解类实例化的几个过程详解 很多人对对象和对象的引用认识模糊,引用是程序操作对象的句柄,相当于 C 和 C+中的指针。前面说了,对象是一个实实在在的东西,比如前面的代码:Human human=new Human();程序执行到这里之后,Java 虚拟机将会在内存中创建一个 Human 对象,并将这个对象的引用赋给 human 变量。这里有三步,首先是创建一个名字为 human 的 Human 类型的句柄,其次,声明一个 Human 对象,然后把创建的对象的引用赋给 human 变量。Java 面向对象编程思
6、想 网络资源大家共享 创建一个 Human 类型的句柄,名字为 human可以指向 Human 类型 创建了一个 Human 对象 让句柄指 向了对象,以后操作句柄就是操作对象 132 如果声明了一个对象的引用,但没有将对象赋值给它,或者给它的就是一个空的对象,则这个引用指向了空的对象,或者说引用了不存在的对象。这时如果想通过这个引用访问对象,则会抛出空指针异常,例如:Human human;/.human.setName(张三);2.3 什么是继承什么是继承 继承可以说是最大限度的发挥面向对象的可复用性,它是这样一个过程,让一个类 B 去继承另一个类 A,那么被继承的类 A 里的一些公开的可
7、以被 B 看到的东西都可以被 B 继承过来,就不必重新开发。如果“人”是一个基类,则“男人”是“人”的一个子类。如果“张三”是一个“男人”,也就是说“张三”是“男人”的一个对象,那么显然“张三”也是“人”这个基类的一个对象。子类具有父类的一般特性(包括属性和行为),以及自身的特殊的特性。Keep your code dry 这一切都目的都是为了达到一个目的,那就是 Dont Repeat Yourself 即所谓的 DRY。如果某个属性或特性在父类中存在的话,就不需要在子类里定义了。而且,如果发现两个类里有完全相同的属性或者方法的话,就要考虑是不是应该有个父亲类了。在父类里只定义一些通用的属性
8、与方法。在子类中通过 super 关键字来调用父类里的构造方法或者属性或者方法。继承还直接带来了多态的好处。在 Java 中使用 extends 关键字表示继承。/声明一个男人类继承人类 Java 面向对象编程思想 网络资源大家共享 public class Man extends Human /声明一个人类的句柄指向男人 Human human=new Man();程序设计的时候:先有子类-程序开发阶段:先做父类-多态带来了最重要的 3 个好处是:可复用性、可扩展性、可维护性。2.4 什么是重载什么是重载 同类,同名,不同参,与返回类无关,访问修饰无关,抛出异常无关。重载:在同一个类中,方法
9、名相同,参数列表不同,所引起的两个方法的差异叫做重载,在同一个类中 方法名相同 参数列表不同-参数的类型不同 参数的个数不同 参数的顺序不同 与访问修饰符无关 与返回值无关 与抛出异常无关 pubic void sayHello(int i)throws Exception 2.5 什么是重写什么是重写 不同类,同名,同参,同返回,访问修饰不能更严格,抛出异常不能更广泛。重写:在存在父子继承关系的前提下,子类把从父类继承过来的方法,完全重写编写的过程叫做重写。在父子类之间 方法名相同 参数列表相同 Java 面向对象编程思想 网络资源大家共享 返回类型相同 访问修饰符,不能更加严格 抛出异常,
10、不能更加广泛 2.6 多态的三种表现形式多态的三种表现形式 1.重写 2.父类指针指向子类对象 3.接口指向实现类 3 第二章构造方法第二章构造方法 1.构造方法是用来完成对象的初始化的方法,要完成类的实例化,产生一个对象,就必须要有构造方法 2.构造方法与类同名,没有返回类型(注意与没有返回值的区别)3.如果不明显的指定类的构造方法,Java 会为每个类隐式的生成一个不带任何参数的构造方法,如果明显制定了任何一个合法的构造方法,Java 都不会为你默认生成。4.构造方法是最先执行的方法(但是晚于静态代码块和非静态代码块)5.存在父子类继承的关系的前提下,如果子类的构造方法没有与父类对应参数个
11、数的构造方法,而且如果不明显的指定运行父类的某一个构造方法的话,会有编译错误。如果可以完成编译的话,是先运行父类的构造方法,然后执行子类的构造方法。6.this(?)关键字是运行本类的构造方法,super(?)关键字是用来运行父类的构造方法。7.构造方法不能继承,更不可以被重写。8.构造方法可以被重载。9.抽象类/接口没有构造方法,因为抽象类/接口不需要产生对象 public class Teacher pubic int Teacher(int i)return 0;上面方法不是构造方法,只不过是一个与类同名的普通方法。Java 面向对象编程思想 网络资源大家共享 4 第三章第三章.抽象类和
12、方法抽象类和方法 如果一个方法中存在不可预知的方法实现,那么这个方法所在的类就应该声明为抽象类 如果在两个类当中有同名的方法,按照正常道理来说,应该提取到父类里,但是这个两个方法又有明显的方法实现上的不同,那么在父类里的方法,就应该定义成为抽象,抽象方法,只给出了方法的样子,而不给出方法的具体实现,具体实现由继承这个类的具体的子类去实现 抽象方法,必须在抽象类里,抽象类里不一定有抽象方法 没有抽象方法的抽象类的存在也是有意义的。这决定了这个类是不能被直接实例化的,他的作用基本上是作为一个“框框”存在的。-种猪 重写的前提是-父类里知道该方法如何去实现,子类不打算走原路,所以覆盖父类里的实现,父
13、类不给出实现,也不知道该如何实现,由具体的子类自己决定如何实现,但是给出一个定义,要求子类必须实现。5 第四章第四章.接口接口 接口是一种规范,是一种规则,它只给出了方法的样子,规定你要实现那些方法,而不给出方法的实现,让接口的实现类去实现这些方法,但是对于不同的实现类来说,对方法的实现可以完全不同。接口是一种规范,是一种规则,它只给出了方法的样子,规定你要实现那些方法,而不给出方法的实现,让接口的实现类去实现这些方法,但是对于不同的实现类来说,对方法的实现可以完全不同。接口的实现类如果实现了某一个接口,那么必须实现接口中定义的所有的待实现的方法。如果你不想要实现方法,那么实现类必须定义为抽象
14、类,不想实现的方法必须定义为抽象方法。接口的实现类如果实现了某一个接口,那么必须实现接口中定义的所有的待实现的方法。如果你不想要实现方法,那么实现类必须定义为抽象类,不想实现的方法必须定义为抽象方法。接口中定义的属性和方法的默认访问级别都是接口中定义的属性和方法的默认访问级别都是public,所以方法肯定不被所以方法肯定不被private所修饰,所有的方法前都默认包含了所修饰,所有的方法前都默认包含了abstract,表明它是一个抽象方法,但是可以省略,而且默认是省略的,表明它是一个抽象方法,但是可以省略,而且默认是省略的 接口实际上是一个抽干了的抽象类,它里面所有的方法都是抽象的,都是不能给
15、出任何实现部分的接口实际上是一个抽干了的抽象类,它里面所有的方法都是抽象的,都是不能给出任何实现部分的-干尸类干尸类 因为接口是一种特殊的因为接口是一种特殊的“抽象类抽象类”,而且因为抽象类可以继承别的类,所以接口也可以继承接口,也只可以继承接口。但是接口不可以实现接口。,而且因为抽象类可以继承别的类,所以接口也可以继承接口,也只可以继承接口。但是接口不可以实现接口。一个类可以实现多个接口使用关键字一个类可以实现多个接口使用关键字implements 一个接口可以继承多个接口使用关键字一个接口可以继承多个接口使用关键字extends 一个类可以同时继承一个别的类,而且实现一个或多个接口,但是关
16、键字一个类可以同时继承一个别的类,而且实现一个或多个接口,但是关键字extends要在前要在前 Java 面向对象编程思想 网络资源大家共享 6 第五章第五章.接口和抽象类的区别接口和抽象类的区别 接口和抽象类的区别接口和抽象类的区别 接口是用来被实现的,而抽象类是用类被继承的接口是用来被实现的,而抽象类是用类被继承的 接口可以继承别的多个接口,组成一个新的接口接口可以继承别的多个接口,组成一个新的接口 抽象类可以继承一个别的类,或实现一个或多个接口抽象类可以继承一个别的类,或实现一个或多个接口 接口是一个接口是一个100%的抽象类,里面的方法没有任何一个有任何的实现的抽象类,里面的方法没有任
17、何一个有任何的实现 抽象类可以包含非抽象的方法,也就是说可以给出某一些方法的实现。抽象类可以包含非抽象的方法,也就是说可以给出某一些方法的实现。接口一般处于代码的最底层,作出一些规定,而接口之上一层抽象类层,对接口进行第一次的实现,把不可能一次完成的方法,交由自己的子类来实现。接口一般处于代码的最底层,作出一些规定,而接口之上一层抽象类层,对接口进行第一次的实现,把不可能一次完成的方法,交由自己的子类来实现。抽象类可以有构造方法,而接口不可以有构造方法。抽象类可以有构造方法,而接口不可以有构造方法。接口中定义的变量只能为接口中定义的变量只能为 公有的,静态的,终态的,而且会默认增加。公有的,静
18、态的,终态的,而且会默认增加。面向对象思想,我觉得最关键的就是抽象。一个软件设计的好坏,我很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象,当代表业务逻辑的高层抽象层结构合理时,你底层的具体实现需要考虑的就仅仅是一些算法和一些具体的业务实现了。当你需要再开发另一个相近的项目时,你以前的抽象层说不定还可以再次利用呢,面对对象的设计,复用的重点其实应该是抽象层的复用,而不是具体某一个代码块的复用。_ 说到了抽象,我就不能不提到 Java 接口和 Java 抽象类了。既然面向对象设计的重点在于抽象,那 Java 接口和 Java 抽象类就有它存在的必然性了。Java 接
19、口和 Java 抽象类代表的就是抽象类型,就是我们需要提出的抽象层的具体表现。在OOP(面向对象编程)中,如果要提高程序的复用性,增加程序的可维护性、可扩展性、可复用性,就必须是面向接口的编程,面向抽象的编程,正确地使用接口、抽象类这太有用的抽象类型做为结构层次上的顶层。Java 接口和 Java 抽象类有太多相似的地方,又有太多特别的地方,究竟在什么地方,才是它们的最佳位置呢?把它们比较一下,你就可以发现了。1、Java 接口和 Java 抽象类最大的一个区别,就在于 Java 抽象类可以提供某些方法的部分实现,而 Java 接口不可以,这大概就是 Java 抽象类唯一的优点吧,但这个优点非
20、常有用。如果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都一下子都得到了这个新方法,而Java 面向对象编程思想 网络资源大家共享 Java 接口做不到这一点,如果向一个 Java 接口里加入一个新方法,所有实现这个接口的类就无法成功通过编译了,因为你必须让每一个类都再实现这个方法才行,这显然是 Java 接口的缺点。2、一个抽象类的实现只能由这个抽象类的子类给出,也就是说,这个实现处在抽象类所定义出的继承的等级结构中,而由于 Java 语言的单继承性,所以抽象类作为类型定义工具的效能大打折扣。在这一点上,Java 接口的优势就出来了,任何一个实现了一个 Java 接口所规定的方法的
21、类都可以具有这个接口的类型,而一个类可以实现任意多个 Java 接口,从而这个类就有了多种类型。3、从第 2 点不难看出,Java 接口是定义混合类型的理想工具,混合类表明一个类不仅仅具有某个主类型的行为,而且具有其他的次要行为。4、结合 1、2 点中抽象类和 Java 接口的各自优势,具经典的设计模式就出来了:声明类型的工作仍然由 Java 接口承担,但是同时给出一个 Java 抽象类,且实现了这个接口,而其他同属于这个抽象类型的具体类可以选择实现这个 Java 接口,也可以选择继承这个抽象类,也就是说在层次结构中,Java 接口在最上面,然后紧跟着抽象类,哈,这下两个的最大优点都能发挥到极
22、至了。这个模式就是“缺省适配模式”。在 Java 语言 API 中用了这种模式,而且全都遵循一定的命名规范:Abstract 接口名。Java 接口和 Java 抽象类的存在就是为了用于具体类的实现和继承的,如果你准备写一个具体类去继承另一个具体类的话,那你的设计就有很大问题了。Java 抽象类就是为了继承而存在的,它的抽象方法就是为了强制子类必须去实现的。其次,下面重点谈一谈类、抽象类、接口和继承之间的关系 不少细心的初学者在论坛上问类似这样的问题:1、接口不实现方法,但我却在程序中可以调用接口的方法,这是为什么?比如 java.sql 包中的 Connection、Statement、Re
23、sultSet 等都是接口,怎么可以调用 它们的方法呢?2、抽象类不能实例化,但是 jdk 中却有很多抽象类的对象,这是为什么?比如 System.in 是一个 InputStream 类型对象,但 InputStream 是抽象类,怎么可以得到它的对象呢?不管怎么样,大家应该明白一点:不管是抽象类中的抽象方法,还是接口中定义的方法,都是需要被调用的,否则这些方法定义出来就没有意义了。可能有很多书上没有提到,或者提到了而读者没有注意到这一点:一个子类如果继承了它的基类,则表示这个类也是其基类的一种类型,这个子类的一个对象是子Java 面向对象编程思想 网络资源大家共享 类类型,并且同时也是其基
24、类的一个对象,它也具有基其类的类型;一个类如果实现了一个接口,则表示这个类的一个对象也是这个接口的一个对象。可能这样说不太好懂,又是子类、基类、类型、接口什么的,容易搞混。其实举个现实的例子你就会觉得其实很简单:明白了这一点,就容易理解为什么我们可以得到抽象类的对象了:原来我们得到的抽象类的对象其实是它的已经实现了抽象方法的子类或子孙类的一个对象,但我们拿它当它的抽象类的基类来用。比如“人”这个类,每个人都会“悲伤”,男人悲伤的时候抽烟、喝酒,女人悲伤的时候哭泣、流泪。由于不同的子类在“悲伤”时所进行的动作不一样,因此这个动作(方法)在基类中不好实现,但基类中又需要有这个方法,因此,“人”这个
25、类就可以定义一个抽象方法“悲伤”,由其子类“男人”和“女人”来实现“悲伤”这个方法。但是调用者只把男人和女人的对象当作其基类“人”的一个对象,调用它的“悲伤”方法。读者可以去体验一下 jdk 的抽象类 java.lang.Process:Runtime runtime=Rumtime.getRuntime();Process process=rumtime.exec(notepad.exe);Class cls=process.getClass();System.out.println(cls.getName();这时会打印出 process 类的名字,如果在 Windows 下它会是一个类似
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 面向 对象 编程 思想
限制150内