1.面向对象

  面向过程和面向对象都是对软件分析、设计和开发的一种思想,它指导着人们以不同的方式去分析、设计和开发软件。早期先有面向过程思想,随着软件规模的扩大,问题复杂性的提高,面向过程的弊端越来越明显的显示出来,出现了面向对象思想并成为目前主流的方式。两者都贯穿于软件分析、设计和开发各个阶段,对应面向对象就分别称为面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程(OOP)。C语言是一种典型的面向过程语言,Java是一种典型的面向对象语言。

  面向过程思想思考问题时,我们首先思考“怎么按步骤实现?”并将步骤对应成方法,一步一步,最终完成。 这个适合简单任务,不需要过多协作的情况下。比如,如何开车?我们很容易就列出实现步骤:
面向过程适合简单、不需要协作的事务,重点关注如何执行。

  但是当我们思考比较复杂的设计任务时,比如“如何造车?”,就会发现列出1234这样的步骤,是不可能的。那是因为,造车太复杂,需要很多协作才能完成。此时面向对象思想就应运而生了。

  面向对象(Oriented-Object)思想更契合人的思维模式。我们首先思考的是“怎么设计这个事物?” 比如思考造车,我们就会先思考“车怎么设计?”,而不是“怎么按步骤造车的问题”。这就是思维方式的转变。

  其次应该思考"应该让谁来实现?",这个"谁"就是对象 , 对象如何实现我们不关注,只关注对象本身。

天然的,我们就会从“车由什么组成”开始思考。发现,车由如下对象组成:

  为了便于协作,我们找轮胎厂完成制造轮胎的步骤,发动机厂完成制造发动机的步骤;这样,发现大家可以同时进行车的制造,最终进行组装,大大提高了效率。但是,具体到轮胎厂的一个流水线操作,仍然是有步骤的,还是离不开执行者、离不开面向过程思维!

2.类与对象的概念

对象:是具体的事物

类:是对对象的抽象

先有具体的对象,然后抽象各个对象之间象的部分,归纳出类通过类再认识其他对象。

生活案例:

  • 类是一个图纸 对象是根据该图纸制造多个实物
  • 类是一个模具 对象是使用模具制造的多个铸件(月饼模子 )
  • 类是上海大众汽车,对象就是大家购买的一辆辆具体上海大众汽车
类可以看做是一个模版,或者图纸,系统根据类的定义来造出对象。我们要造一个汽车,怎么样造?类就是这个图纸,规定了汽车的详细信息,然后根据图纸将汽车造出来。
类:我们叫做class。 对象:我们叫做Object,instance(实例)。以后我们说某个类的对象,某个类的实例。是一样的意思。

对象和类的关系:

  • 特殊到一般,具体到抽象。
  • 类可以看成一类对象的模板,对象可以看成该类的一个具体实例。
  • 类是用于描述同一类形的对象的一个抽象的概念,类中定义了这一类对象所应具有的静态和动态属性。
  • JDK提供了很多类供编程人员使用,编程人员也可定义自己的类。

2.1 定义类与对象

2.1.1 自定义类

定义类(类的组成)

  • 属性 field
  • 方法 method
  • 构造方法 construtor
  • 其他:代码块 静态代码块 内部类
  1. 属性(field 成员变量)
      属性用于定义该类或该类对象包含的数据或者说静态特征。属性作用范围是整个类体。
      在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。
表4-2 成员变量的默认值 默认值
数据类型
整型 0
浮点型 0.0
字符型 ‘\u0000’
布尔型 false
所有引用类型 null

属性定义格式:

    [修饰符] 属性类型 属性名 = [默认值] ;

示例

   public class Person{String name = "张三";}


2. 功能

**方法用于定义该类或该类实例的行为特征和功能实现。**方法是类和对象行为特征的抽象。方法很类似于面向过程中的函数。面向过程中,函数是最基本单位,整个程序由一个个函数调用组成。面向对象中,整个程序的基本单位是类,方法是从属于类和对象的。

方法定义格式:

  [修饰符] 方法返回值类型 方法名(形参列表) {// n条语句
}

示例

public class Person{//成员变量String name;//成员方法public void study(){System.out.println("一个程序猿正在努力工作...");}
}

2.1.2 使用

创建对象

类名 对象名 = new 类名();
Person p1=new Person();

调用类的属性(成员变量)和方法

2.2成员变量和局部变量的异同

  • 声明位置不同

    • 成员变量 : 类中方法外
    • 局部变量 : 方法中(块中)
  • 作用范围不同
    • 成员变量 : 当前类中
    • 局部变量 : 当前方法
    • 不同的方法中即使有同名的局部变量,没有关系,互不影响,建议相同
  • 内存存放的位置的
    • 成员变量 : 堆内存中
    • 局部变量 : 栈内存中
  • 默认值情况不同
    • 成员变量 : 有默认值
    • 局部变量 : 没有默认值

2.3 构造器(构造方法 constructor)

  构造器也叫构造方法(constructor),用于对象的初始化。构造器是一个创建对象时被自动调用的特殊方法,目的是对象的初始化。构造器的名称应与类的名称一致。Java通过new关键字来调用构造器,从而返回该类的实例,是一种特殊的方法。

2.3.1格式声明

[修饰符] 类名(形参列表){//n条语句
}
public Dog(){}

构造器4个要点:

  • 构造器的方法名必须和类名一致!
  • 构造器虽然有返回值,但是不能定义返回类型(返回值的类型肯定是本类),不能在构造器里调用return。
  • 通过new关键字调用!!
  • 如果我们没有定义构造器,则系统会自动定义一个无参的构造方法。如果已定义则编译器不会添加无参数构造方法!
  • 与普通方法一样,构造方法也可以重载
  • 修饰符 final abstract static不能用来修饰构造器
    作用

初始化对象信息的,不是用于创建对象的!!!

2.3.2 空构造(无参构造)

没有参数构造器叫做无参构造

  • 一个类中,如果没有显式|手动 加入 任意构造器 javac 编译后 自动加入空构造

  • 一旦加入构造器 ,javac 不会加入空构造器。

     class Dog{String color;String name;//空构造//public Dog(){} 默认提供}
    

2.3.3 重载

一个类中可以存在多个构造器

  • 方法重载: 两同三不同 同一个类方法名相同,形参类型 个数 顺序不同

  • 构造器重载: 只看形参即可 形参类型 个数 顺序不同。调用时按“就近最优原则”

     class Dog{String color;String name;//空构造Dog(){}public Dog(String name,String color){this.name=name;this.color=color;}public static void main(String[ ] args) {Dog d1 = new Dog();Dog d2 = new Dog("二狗子", "白色");Dog d3 = new Dog("三狗子", "土色");}}
    

2.3.4 this关键字

this 即”自己”,代表对象本身,谁调用代表谁。在成员方法中或构造器中隐式的传递。作用如下:

  • this.属性避免属性和形参、局部变量同名,发生就近原则

  • this([实参列表]): 构造器的首行调用其他构造器。

     class Web{//网址public String url;public Web(){System.out.println("构造器");}public Web(String url){this(); //this()构造器的调用this.url =url;//this.属性 区分同名问题}//赋值public void setUrl(String url){this.url =url;}/**属性与形参 同名,发生就近原则public Web(String url){url =url;}//二者不同名public Web(String u){url =u;}*/}
    

注意:静态方法中无 this

2.3.5 static关键字

凡是静态的都是属于类的,与对象无关的,先于对象存在的。可用于修饰属性、方法、块。

在类中,用static声明的成员变量为静态成员变量 ,或者叫做: 类属性,类变量.

  • 它为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化,
  • 对于该类的所有对象来说,static成员变量只有一份。被该类的所有对象共享!!
  • 可以使用”对象.类属性”来调用。不过,一般都是用“类名.类属性”
  • static变量置于方法区中!

用static声明的方法为静态方法

  • 不需要对象,就可以调用(类名.方法名)

  • 在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可直接访问非static的成员。但是可以通过对象使用。

  • 静态方法不能以任何方式引用this和super关键字

     class StaticDemo01 {static int id;//静态变量int age; //成员变量public static void main(String[] args) {//静态的内容可以直接使用System.out.println("id1="+id); //id1=0System.out.println("id2="+StaticDemo01.id); //id2=0test();//通过对象使用成员StaticDemo01 sd=new StaticDemo01();System.out.println("age="+sd.age);//age=0}
    

注意:

  • 静态内容中只能直接使用静态内容,通过对象使用成员内容
  • 成员内容中可以直接使用静态内容,可以直接使用成员内容,也可以通过对象使用

2.3.6 block

块{},在java中自成作用域,可以分为

@ 静态代码块 构造代码块 普通语句块 同步代码块
声明位置 类中,方法外 类中,方法外 方法中 fynchronized(){}
作用 整个类进行某些初始化操作(静态属性赋值…) 构造代码块是为对象初始化操作(为静态或非静态成员属性赋值…) 声明一些临时变量等… 控制并发
执行时机 类第一次加载时,只执行一次,如果多个静态块,从上到下一次执行 创建对象时,执行构造器代码之前执行,如有多个,从上到下一次执行 跟随方法执行 跟随方法执行

注意:

  • 类第一次被载入时先执行static代码块;类多次载入时,static代码块只执行一次;static块经常用来进行static变量的初始化。
  • 是在类初始化时执行,不是在创建对象时执行。
  • 静态初始化块中不能访问非static成员。
  • 构造块被被编译到将要执行的构造器代码之前执行

静态块,仅在类的第一次使用时加载。
构造块,先于构造器执行,每创建一个对象执行一次

浅谈面向对象和面向过程相关推荐

  1. 【c++开篇】浅谈面向对象与面向过程(举例说明)

    浅谈面向对象与面向过程 前言:刚接触C++第一时间,都会经常听到这样一话:C语言面向过程,C++面向对象.在老师模拟面试时,问道你对面向对象与面向过程的认识时,我有点懵答的不是很完整,刚好C++开篇写 ...

  2. 【Java开发语言 03】第三章 面向对象编程(面向对象与面向过程+类和对象+类成员一:属性+类成员二:方法+对象的创建和使用+封装和隐藏+构造器+关键字this,package,import)

    面向对象编程 1 面向对象与面向过程 1.1 java类及类的成员 2 java语言的基本元素:类和对象 2.1 类的语法格式 2.2 创建Java自定义类 2.3 对象的创建及使用 3 类的成员之一 ...

  3. 通俗理解面向对象和面向过程+编程思想

    上午单位的C++大佬给我们分享了一些编程思想,开始介绍了面向对象和面向过程 面向过程是什么,就是对事件的过程进行编程,我们已知事件的发展过程,我们根据过程发展的节点去编程.整个编程是过程驱动,开始,然 ...

  4. 什么是面向对象、面向过程与面向对象的区别

    要讲区别,首先我们得先来弄弄清楚什么是面向过程,什么是面向对象. 面向过程是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了. 比如把大象放进冰箱,第一 ...

  5. 面向对象与面向过程区别

    面向对象:用线性的思维.与面向过程相辅相成.在软件开发过程中,宏观上,用面向对象来把握事物间复杂的关系,分析系统.微观上,仍然使用面向过程. "面向过程"是一种是事件为中心的编程思 ...

  6. 面向对象编程(一)——面向对象和面向过程

    面向对象(Object Oriented),通过对象来封装我们的数据.(组织代码,封装数据) 面向对象和面向过程: 面向过程:procedure oriented programming,POP 面向 ...

  7. 浅谈CMMI几个过程概念流程管理 (转)

    浅谈CMMI几个过程概念流程管理 CMMI(Capability Maturity Model Integration)能力成熟度模型集成,正如它的名字一样,它是一个模型.个人觉得它更是一种概念.它带 ...

  8. python面向对象和面向过程的区别_Python11-01_面向对象----面向对象和面向过程的区别...

    面向对象编程 面向对象(OPP)编程思想主要针对大型软件设计而来的.面向对象编程使程序的扩展性更加强,可读性更好.使得编程可以像搭积木一样简单. 面向对象编程将数据和操作数据的方法封装到对象中,组织代 ...

  9. 面向对象和面向过程,python中的类class,python中程序的入口——main方法,

    1.程序入口,让main显现出来: print(__name__)#__name___是模块中的隐藏字段,当前模块运行的函数名 if __name__ == __main__ __main__() # ...

最新文章

  1. hadoop集群运维碰到的问题汇总
  2. 巴菲特:买进你同学的10%
  3. 神经网络模拟逻辑推理-演绎推理
  4. 第15章 进程间通行 15.6 XSI IPC 15.7 消息队列
  5. 【PP操作手册】生产订单的查询
  6. 履约时间预估:如何让外卖更快送达?
  7. ABB 机器人 通信指令(人机对话):
  8. ETL异构数据源Datax_自增ID增量同步_12
  9. 背景选择器selector替换按钮默认背景
  10. 职称计算机考试word2003真题,职称计算机考试《Word2003》历年真题回顾(1)
  11. 如何获取e.printStackTrace()的内容
  12. 从数学到计算机 从莱布尼兹到冯诺依曼 从数理逻辑到算法分析
  13. 无法连接到远程网络连接到服务器失败怎么办,无法远程桌面连接到服务器怎么办(连接失败原因和解决法)...
  14. Qt QT的I/O流 QT输入输出
  15. Windows之IOCP
  16. 【CS224N-2019】斯坦福CS224N-2019自然语言处理----作业详解
  17. rs485的1:n计算机连接和n:n的主从plc通讯,富士人机界面与GE90-70 PLC N:1通讯在轧钢生产线的应用...
  18. 我的完整版mbti职业性格测试
  19. EXCEL如何实现两个表的相应数据关联
  20. Excel分组行转列(Power Query透视列,一维表转二维表)

热门文章

  1. Vue中分页组件的用法
  2. android是乐视手机刷机,乐视 X620(乐2 全网通)刷机教程,简单刷机
  3. [python]pycharm自动生成函数注释
  4. stata软件不出图_stata 如何导出绘制的图?
  5. 大数据决策领跑零售业
  6. 免费在线云服务CAD编辑软件AutoCAD易
  7. 计算机初中教师教材知识测试,开县中小学教师新教材考试初中信息技术
  8. C++ 设计模式 适配器模式(中英翻译, Win-Linux翻译)
  9. wildfly 21中应用程序的部署
  10. C++ 上溢和下溢(overflow underflow)