面向对象

面向对象:

面向对象是向现实世界模型的自然延伸,是一种万物皆对象的编程思想,在现实生活中的任何物体都可以归为一类事物,而每一个个体都是一类事物的实例,类似于生物分类学一般,分为域、界、门、纲、科、属、种一般,面向对象就是把现实中的事物抽象为一类事物。

以事物为中心,先开发类,得到对象,通过对象之间相互通信实现功能

现有数据结构,后有算法

面向过程:

       思想:由过程、步骤、函数组成,以过程为核心,现有算法,后有数据结构

 

 

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了,面向对象是把构成问题事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为

 

 

面向对象的耦合度低,易维护,易复用,易扩展,是系统灵活,但类调用需要实例化,开销比较大,比较消耗资源。

面向过程的耦合度高,可维护性差,性能高

 

 

 

面向对象的三大特征:封装,继承,多态

封装:是将一类事物的属性和行为封装成一个类,一般是使其属性私有化,行为公开化,提高数据的隐秘性的同时,使代码模块化

 

原则:将不需要对外提供的内容隐藏起来,把属性都隐藏,提供公共方法对其访问

 

类的修饰符:private、default(默认)、protected、public

 

Private:类中限制为private的成员,只能被这个类本身访问,如果一个类的构造方法声明成private,则其他类不能生成该类的一个实例。

Default:类不加任何访问权限限定的成员属于缺省的(default)访问状态,可以被这个类本身和同一个包中的类锁访问。

Protected:类中限定为protected的成员,可以被这个,类本身、他的子类(包括同一个包中以及不同包中的子类)和同一个包中的所有其他类访问

Public:类中限定为public的成员可以被所有的类访问

 

Private

Default

Protected

Public

同一个类中

可访问

可访问

可访问

可访问

同一个包中

 

可访问

可访问

可访问

子类

 

 

可访问

可访问

全局范围(不同包)

 

 

 

可访问

 

 

继承:
       基于已有类的定义的基础,构建新的类,已有类称为父类,新构建的类称为子类,子类能调用父类的非private修饰符访问的成员,同时还可以自己添加一些新的成员,扩充父类,甚至重写父类已有的方法

 

              父类可以拥有多个子类,但是子类只能继承一个父类,称为单继承

      

Java中通过super来实现对父类成员的访问,super用来引用当前对象的父类。Super的使用有三种情况:

              访问父类被隐藏的成员变量

              调用父类中被重写的方法

              调用父类的构造方法

 

 

多态:方法的重写、重载域动态连接构成多态性。

多态的一大作用就是为了解耦--为解除父类子类继承的耦合度:多态即使允许父类引用(或接口)指向子类(或实现类)对象。很多的设计模式都是基于面向对象的多态性设计的

 

多态性:发送消息给某个对象,让该对象自行决定响应何种行为

 

 

面向对象的五大原则:

 

单一职责原则:一个类只做好一件事,只有一个引起他的变化。低耦合,高内聚在面向对象的引申

      

开放封闭原则:软件实体应该使可扩展的,而不可修改的,对扩展开放,对修改封闭

      

Liskov替换原则:子类必须能够替换其基类

 

依赖倒置原则:依赖于抽象。高层模块不依赖于底层模块,二者相同依赖于抽象,抽象不依赖于具体,具体依赖于抽象

 

接口隔离原则:使用多个小的专门的接口,而不要使用一个大的总接口,接口应该是内聚的,一个类对另外一个类的依赖应该建立在最小的接口上,

      

 

 

 

SRP:就一个类而言,应该只专注于做一件事和仅有一个引起他变化的原因

 

LSP:如果对于类型S的每一个对象o1,都有一个类型T的对象o2,使对于任意类型T定义的程序P,将o2替代为o1,P的行为保持不变,则成S为T的一个子类。即子类型必须能够替换他的基类型

 

DIP:高层模块不应该依赖于底层模块,二者都应该依赖于抽象,抽象不应该依赖于细节,细节应该依赖于抽象

 

DIP:依赖倒置原则使细节和策略都依赖于抽象,抽象的稳定性决定了系统的稳定性

 

ISP:使用多个专门的接口比使用单一的总接口要好

 

 

 

 

 

值传递:

       参数在程序语言中分为形式参数和实际参数

      

形式参数:在调用有参函数时,主调函数和被调函数之间有数据传递关系,在主调函数中调用一个函数时,函数后面括号的参数称为“实际参数”

 

实际参数是调用有参方法的时候真正传递的内容,而形式参数是用于接收实参内容的参数

 

 

值传递是指在调用函数时将实际参数复制一份传递到函数中,那么在函数中对参数所进行的修改将不会影响到实际参数

 

引用传递是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将会影响到实际参数

 

 

Java中都是值传递(其实都是共享传递),就算传递的是对象,其实也是把对象的地址的引用复制一份给形参,主要看形参在方法中会不会创建一个新的对象,若创建一个新的对象,此时形参指向一个新的地址,修改的是新对象的值,则原对象的值不会发生变化;若不在方法创建新的对象,则源对象的值发生变化

 

 

 

Java的特点:与平台无关:

Java最大的优点就是编写的软件能在所有的计算机上运行,之所以能做到这一点,是因Java可以在计算机的操作系统之上再提供一个Java运行环境(JRE),该运行环境是由Java虚拟机(JVM)、类库以及一些核心文件组成。Java虚拟机的核心是字节码指令,字节码指令不是机器指令,因此他不予特定的平台相关。而Java针对不同平台提供的Java虚拟机的字节码指令是相同的

 

Java程序的运行过程:

 

 

Java语言提供的编译器不针对特定的平台进行编译,而是针对Java虚拟机编译成字节码(.class文件),字节码被Java虚拟机(Java解释器是Java虚拟机的一部分)解释、运行。Java虚拟机将字节码翻译成本地计算机的机器指令,并将机器指令交给平台运行

 

字节码其实是一种“中间代码”

 

 

posted @ 2019-05-29 21:17  hongzxc  阅读(91)  评论(0)    收藏  举报