Java面向对象技术总结(含代码)

更新时间:2023-03-15 06:14:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Java面向对象技术总结

1 什么是面向对象思想?

从世界观的角度可以认为:面向对象的基本哲学是认为世界是由各种各样具有自己的运动规律和内部状态的对象所组成的;不同对象之间的相互作用和通讯构成了完整的现实世界。因此,人们应当按照现实世界这个本来面貌来理解世界,直接通过对象及其相互关系来反映世界。这样建立起来的系统才能符合现实世界的本来面目。

从方法学的角度可以认为:面向对象的方法是面向对象的世界观在开发方法中的直接运用。它强调系统的结构应该直接与现实世界的结构相对应,应该围绕现实世界中的对象来构造系统,而不是围绕功能来构造系统。

总结:现实世界中的事物与程序中的代码应完全一致。

2 结构化程序设计思想和优缺点 目的:解决复杂的软件业务需求

优点:在进行开发前保证了程序系统的稳定性和条理性。

缺点:如果软件业务发生改变,程序结构无法作出相应变化且灵活性不够。其扩展性、重用性和灵活性较差。

3 面向对象原则和要素。

四原则:抽象、封装、模块化与分层。 三要素:封装、继承与多态。

抽象:即把模块类型化。在类中对各个子类的共同功能进行描述而不实

现,将实现交由各个子类根据自身业务需求进行实现。抽象是在设计的角度来考虑程序的灵活性。

封装:将具有相同功能的程序代码组织在一起描述为一个方法(具体为java.api)。即:当外界要改变一个对象的状态,也就是对它所包含的数据进行操作,只能向该对象发出请求消息,然后由该对象的对应方法来改变其自身的状态。 封装暗示着我们并不需要知道对象的具体实现,就能够利用它以任何方式构建系统,如果以后再改变它的实现时,将不会影响系统中的其他组件(条件是组件接口不发生变化)。它是一种典型的黑箱机制。封装使得类模块改变的影响仅限于对象内部,以限制外界对数据属性和方法的访问,有利于代码的重用和信息隐藏。

继承:在父类中就各个子类的共同功能进行描述或者实现,各个子类就可以共用父类的程序代码,以实现代码的重用,表现为在现有类的基础上重新构造一个类。继承是在类、子类以及对象之间自动的共享属性和方法的一种机制。继承性允许在设计新的类型时,只需要考虑自身与父类所不同的地方,而继承父类的内容作为自己的内容。从来有效实现代码的重用和控制类的规模。

多态:同一个方法名的操作不仅仅定义一种行为。也可以理解为:同一个父类的引用变量可以接受或者保存不同子类的实例对象,程序根据子类对象的不同而运行出不同的功能。多态的实现主要是通过动态绑定(后期绑定/运行时绑定)机制来实现的。

动态绑定:在运行时判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。也就是说,编译器一直不知道对象的类型,但是方法调

用机制能调用正确的方法体,并加以调用。 对于多态,可以总结它为:

一、使用父类类型的引用指向子类的对象; 二、该引用只能调用父类中定义的方法和变量;

三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)

四、变量不能被重写(覆盖),?重写?的概念只针对方法,如果在子类中?重写?了父类中的变量,那么在编译时会报错。 关系理解:

继承是基础 抽象类与抽象类之间,接口与接口之间(应用) 抽象是核心 基于接口编程,采取层级抽象、逐步实现的原则 多态是具体实现。 4 Java反射机制理解 定义:

Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。

反射意味着我们可以于运行时加载、探知、使用编译期间完全未知的

classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods1。这种?看透class?的能力(the ability of the program to examine itself)被称为introspection(内省、内观、反省)。Reflection和introspection是常被并提的两个术语。

反射机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public, static 等等)、superclass(例如Object)、实现之interfaces(例如Cloneable),也包括fields和methods的所有信息,并可于运行时改变fields内容或唤起methods。

目前好多框架都会用到java的反射机制。比如struts2,sping,hibernate。 如果我们不用struts2,自己写一个类似的功能也是可以实现的,比如浏览器通过HTTP发送数据,而这些数据都是字符串,我们接受到这些字符串时, 可以通过反射去构造一个对象(通过拦截器做成框架的功能),这样就可以用对象的get和set方法了,而不用原始的getPeremter方法。

缺点:

第一个是性能问题。用于字段和方法接入时反射要远慢于直接代码。性能问题的程度取决于程序中是如何使用反射的。如果它作为程序运行中相对很少涉及的部分,缓慢的性能将不会是一个问题。即使测试中最坏情况下的计时图显示的反射操作只耗用几微秒。仅反射在性能关键的应用的核心逻辑中使用时性能问题才变得至关重要。

更严重的一个缺点是使用反射会模糊程序内部实际要发生的事情。程序人员希望在源代码中看到程序的逻辑,反射等绕过了源代码的技术会带来

维护问题。反射代码比相应的直接代码更复杂,正如性能比较的代码实例中看到的一样。解决这些问题的最佳方案是保守地使用反射——仅在它可以真正增加灵活性的地方——记录其在目标类中的使用。 动态加载类和对象:

Class.forName( )静态方法的目的是为了动态加载类。在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便操作。因此,单单使用Class.forName( )是动态加载类是没有用的,其最终目的是为了实例化对象。

Class下的newInstance()和new有什么区别?,首先,newInstance( )是一个方法,而new是一个关键字,其次,Class下的newInstance()的使用有局限,因为它生成对象只能调用无参的构造函数,而使用 new关键字生成对象没有这个限制。 我们总结如下:

Class.forName(\返回的是类

Class.forName(\返回的是object 创建类并实例化:

A a=(A)Class.forName(?pacage.A?).newInstance() 这和 A a=new A() 是一样的效果。

工厂模式中创建对象:

Class c=Class.forName(?Example?);

Factory=(ExampleInterface)c.newIntance(); ExampleInterface是Example的接口

本文来源:https://www.bwwdw.com/article/cn6v.html

Top