一、面向对象的引入

解决问题的时候,首先要会分析思路,这个思路就是我们生活中解决一个问题的方法步骤;

有了思路之后,再把思路使用java代码来解决;

但是 计算总分的需求变了

  

分析:原来在一个程序中,出项代码重复的问题,是通过将相同的代码抽取出来,放到函数中,需要的时候调用函数,来解决的;

现在又是相同的代码,能不能也抽出来对呢?

分析发现,相同的代码是一个函数,函数抽出来,可以放在哪里呢?根据函数的定义,函数是必须写在类中的,所以我们要抽出来,也只能放到一个类中;

抽出来后,编译程序,发现报错了,原因是,在一个类中不能直接使用其他类的函数;

java中有没有办法,让我们在一个类中使用其他类中的函数呢?

有,需要先建立这个类的一个实体对象,然后再通过这个实体来调用;

建立一个类的实体对象的方法:使用new关键字;

类名  对象名(对象的引用) = new 类名();----会在堆内存中开辟一段内存空间

(等号左边就是一个普通的变量,对象名就是一个变量名,变量的数据类型就是这个类;变量里面保存的,就是右边在对空间中开辟的内存的地址)

本例:

Tool tool = new Tool();

通过一个类的对象来调用它的函数:

对象名 . 函数名(参数列表);

. 就是表示“的”的意思;

最后这个问题的解决办法,就是用了面向对象的思想;

总结:使用对象,可以提高程序的复用性;

 二、面向过程和面向对象

  1. 面向过程

过程:就是做一件事情的先后经过(就是先做什么,后做什么);

生活中的过程:泡面:1、烧开水;2、打开包装袋;3、泡面;4、吃;

程序的过程:代码执行的先后顺序;

面向过程:面向,就是关注的意思;面向过程,指的就是一种解决问题的思路(思想);

使用这种思想解决问题,主要关心的就是一件事情由那几步组成,然后先该做什么,后该做什么;

使用这种思想写程序,关心的就是需求可以由哪些功能组成,然后写程序实现这些功能,然后按照发生的先后顺序意义调用;

在这个里面,开发者需要参与功能实现的每一步中,是劳动者;

我们前面写程序,就一直使用的是面向过程的方法写的程序;在这些程序中,基本组成是函数;

特点:在需求简单的时候,这种方法,简单直观;

弊端:在需求复杂的时候,这种方法,就非常不便,开发和维护都很困难;

  2.面向对象

对象:实际存在的个体;

生活中的对象:班长的手机,班长的汽车,……

Java程序中的对象:使用new关键字在堆内存中开辟的空间;

面向对象:也是一种解决问题的思想;这种思想,关心的是一件事情中的参与者;

使用面向对象的方法写程序,研究的是,需求有哪些功能组成,然后就是找有没有现成的写好的已经具备该功能的类;

如果有,就直接把这个类拿过来,创建这个类的对象,然后通过这个对象去调用这个写好的功能;

如果没有,就要先写一个类,在类中写需要的功能【面向过程】,然后创建这个类的对象,调用这个功能;

在面向对象中,开发者更多的是在调用其他别人已经写好的功能,所以开发者扮演的是功能的调用者的角色;

面向过程和面向对象,是否是相互排斥的?

面向对象是基于过程的,二者不排斥;

  3. 举例说明

吃饺子:

面向过程:

a、包饺子:剁馅;和面;包饺子;

b、煮饺子:烧开水;下饺子;

c、吃饺子;

d、收拾;

面向对象:

a、找个饺子馆;(相当于程序中创建对象)

b、告诉服务员,吃的口味、数量、付钱;(相当于程序中调用函数传参)

c、等着服务员端上做好的饺子;(相当于程序中获得函数返回的结果)

d、吃饺子;

  4.面向对象和面向过程的区别

a、关注点不同:

  a.1面向过程关注的是事情的发生的先后顺序(每一步该怎么做);

  a.2面向对象关注的是事情中的参与者(谁来做);

b、效率不同:

  b.1面向过程,开发者需要参与每一步的实现,效率比较低;

  b.2面向对象,更多的是在调用别人已经实现好的功能,效率高;

c、开发质量:

  c.1面向过程,都是自己做的,质量不能保证;

  c.2面向对象,大部分是用别人已经写好的、被广大程序员验证过的功能,质量是有保证的;

d、使用范围不同:

  d.1面向过程,适合需求简单的场景;

  d.2面向对象,更适合需求复杂的大型应用;

注意:面向对象是基于过程的;

四、对象的内存图解和练习

总结:对象保存在堆内存中,里面只有对象的成员变量(成员函数放在方法区,后面再讲);

哪个对象调用函数,就使用的哪个对象中的变量;

 五、类和对象的区别

类是又同一类事物的共性信息进行抽取得倒的;

对象是根据类创建出来的,用于描述一个具体事物的信息的;

六、局部变量和成员变量

  1. 概念    

    成员变量:直接定义在类中的变量,就叫做成员变量;  

    局部变量:定义在类的局部位置的变量就叫做局部变量;

  

在函数中能不能定义一个和成员变量相同名称的局部变量呢?

 \

总结:在一个类中的函数中,可以定义和成员变量相同的局部变量;使用时,优先使用定义在函数中的局部变量;

如果在函数中找不到变量,才会去类中找成员变量;

  2. 区别

a、从定义的位置上:

成员变量:直接定义在类中;

局部变量:定义在函数中;

b、从内存上看:

成员变量:保存在堆空间中;

局部变量:是保存在栈内存中;

c、从生命周期(指的是从分配空间到回收空间)上看:

成员变量:创建对象时分配空间,随着对象空间被回收而销毁;

局部变量:函数进栈是分配空间,随着函数出栈而被销毁;

d、从使用范围上:

成员变量:使用范围是整个类中;

局部变量:只在定义它的函数中有效;

e、从初始值上看:

成员变量:有默认初始化值,在使用之前,可以赋值,也可以不赋值;

局部变量:没有默认初始值,要使用,必须先要赋值;

七、匿名对象

  1. 匿名对象的概念   

    匿名:就是没有名字,匿名对象,就是没有名字的对象;

       对象的名字,指的就是,保存了对象的内存地址的引用变量;

       我们一般对对象的操作,都是通过这个引用来实现的;

       匿名对象,就是创建对象时,不把自己的内存地址赋值给其他引用变量

  2. 匿名对象的局限

上面演示中,给a赋值和调用show函数,分别是创建了两个对象;

匿名对象,只能在创建出来的时候被调用一次;

  3. 匿名对象的应用

    

使用匿名对象传参,可以解决该问题;

八、引用传递和案值传递

  按值传递:    

    基本数据类型的变量进行传参,实际传递的是存放在变量中的常量值,这种传参方式叫做按值传递;这种传参方式,修改一个变量的值,对其他变量都没有影响;

  引用传递:    

    引用类型的变量进行传参,实际传递的是存放在变量中堆内存的地址,这种方式叫做引用传递,这种方式传参,通过变量操作一个数据,对其他拥有这个引用的变量,都有影响; 

JAVA基础-面向对象05的更多相关文章

  1. java基础面向对象之类与对象

    java基础面向对象之类与对象 2017-01-14 1.面向对象的基本概念 以一种组建化的形式进行代码设计 1)在面向对象程序设计中包含有如下几种特性 •封装性:保护内部结构的安全性 •继承性:在已 ...

  2. 第二十七节:Java基础面向对象-静态,单例模式,继承详情知识点

    前言 Java基础面向对象-静态,单例模式,继承详情知识点.静态-static关键字,static变量,静态代码块,代码块(不加静态),对象创建过程,单例模式,继承. 静态-static关键字 // ...

  3. Java基础-面向对象第三大特性之多态(polymorphism )

    Java基础-面向对象第三大特性之多态(polymorphism) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 多态是继封装,继承之后,面向对象的第三大特性,多态的 ...

  4. Java基础-面向对象第二特征之继承(Inheritance)

    Java基础-面向对象第二特征之继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承的概述 在现实生活中,继承一般指的是子女继承父辈的财产.在程序 ...

  5. Java基础-面向对象第一特性之封装(Encapsulation)

    Java基础-面向对象第一特性之封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.理解什么是面向过程和面向对象 面向过程与面向对象都是我们编程中 ...

  6. 053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结

    053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结 本文知识点: 流程控制知识总结 流程控制知识总结 选择结构语句 循环结构语句 ...

  7. 052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试——debug2 多断点调试程序

    052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试--debug2 多断点调试程序 本文知识点: Eclipse下程序调 ...

  8. 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1

    051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...

  9. 050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句

    050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句 本文知识点:continue语句 continue语句 continue ...

随机推荐

  1. BUPT复试专题—科学计算器(2009)

    题目描述 给你一个不带括号的表达式,这个表达式只包含加.减.乘.除,请求出这个表 达式的最后结果,最后结果一定是整数: 输入 一个数学表达式,只包括数字,数字保证是非负整数,以及五种运算符 " ...

  2. BUPT复试专题—中位数(2014-2)

    题目描述 给定一个长度为N的非降数列,求数列的中位数.中位数:当数列的项数N为奇数吋,处于中间位置的变最值即为中位数:当N 为偶数时,中位数则为处于中间位置的两个数的平均数.   输入 输入数据第一行 ...

  3. 【LeetCode-面试算法经典-Java实现】【010-Regular Expresssion Matching(正則表達式匹配)】

    [010-Regular Expresssion Matching(正則表達式匹配)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Implement regular ...

  4. winform中使用ReportViewer的时候,找不到报表数据面板.

    最近在做winform的报表项目,看人家教程里都有报表数据面板,可我的怎么都找不到,我的是VS2012,最后终于找到,首先必须在报表设计TAB上(选中它),然后选择视图->报表数据

  5. Git的使用 -- 用git玩翻github,结尾有惊喜!有惊喜!有惊喜!林妙妙看了说:牛呲呼啦带闪电 (三)(超详解)

    简介 上一篇主要讲解的是Git安装及配置,这一篇就详细的从无到有的来用Git玩翻github. 一.什么是Github Github是全球最大的社交编程及代码托管网站(https://github.c ...

  6. Elasticsearch 学习笔记 Elasticsearch及Elasticsearch head安装配置

    一.安装与配置 1.到官网下载Elasticsearch,https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6. ...

  7. String 字符串基本使用

    目录 一.JavaDoc解释 二.基础属性和构造函数 三.基本方法说明 一.JavaDoc解释 String类表示字符串,所有Java程序中的字符串像是"abc"都是此类的实例,字 ...

  8. 2016/06/13 phpexcel 未完待续

    ①准备工作: 1,php版本不能太低 2,去官网下载PHPExcel插件    http://phpexcel.codeplex.com/ 3,解压后提取classes文件夹到工作目录,并重命名为PH ...

  9. 4408: [Fjoi 2016]神秘数

    4408: [Fjoi 2016]神秘数 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 452  Solved: 273 [Submit][Stat ...

  10. JSON和JavaScript对象

    var obj={width:100,height:200},这样的并不叫JSON,并且JSON只是一种数据格式,并不是具体的实例. 但很多人把这样的JS对象当成JSON,下面把这个问题讲清楚 一.J ...