文章目录

  • 1、什么是对象?
  • 2、什么是面向对象?
  • 3、 什么是类?
  • 4、单一职责原则
  • 5、this关键字的应用
    • 5.1 this.成员属性
    • 5.2 this.成员方法()
    • 5.3 this构造方法()
    • 5.4 在方法调用时,作为参数传递
    • 5.5 在方法调用时,作为返回值传递
  • 6、构造方法常见问题总结
    • 6.1 构造方法与类中成员方法得起区别是什么?
    • 6.2 一个类中构造方法可以有几种表现形式?相互之间是否可以调用?
    • 6.3 进行构造方法的调用时,为啥我的断点会跳到这里来而不在我写的代码里呢?
    • 6.4 debug进入之后单步执行为啥会直接报错 source not found?

1、什么是对象?

  • 万物皆对象。现实世界存在的客观事物都是对象。
  • 对象是类的实例表现。
  • 对象是特定类型的数据。

2、什么是面向对象?

  • 例如:去宠物店买小猫,我们选择猫猫的过程就是面向对象。

3、 什么是类?

  • 类是模子,确定对象将会拥有的特征(属性)和行为(方法)
    (1)属性:对象具有的各种静态特征。
    (2)方法:对象具有的各种动态行为。

4、单一职责原则

(1)单一职责yuanze(SRP: Single responsibility principle) 又称单一功能原则,面向对象五个基本原则(SOLID: SRP单一职责原则、OCP开放封闭原则、LSP里式替换原则、DIP依赖倒置原则、ISP接口分离原则)之一。它规定一个类应该只有一个发生变化的原则。该原则由罗伯特•C•马丁于《敏捷软件a: 原则、模式和实践》一书中给出的。马丁表示此原则是基于汤姆•狄马克和Meilir Page-Jones的著作中的内聚性原则发展出的。
(2)所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。
(3)单一职责原则告诉我们:一个类不能太“累”!在软件系统中,一个类(大到模块,小到方法)承担的职责越多,它被复用的可能性就越小,而且一个类承担的职责过多,就相当于将这些职责耦合在一起,当其中一个职责变化时,可能会影响其他职责的运作,因此要将这些职责进行分离,将不同的职责封装在不同的类中,即将不同的变化原因封装在不同的类中,如果多个职责总是同时发生改变则可将它们封装在同一类中。
(4)之所以会出现单一职责原则就是因为在软件设计时会出现以下类似的场景:T负责两个不同的职责:职责p1,职责p2。当由于职责p1需求发生改变而需要修改类T时,有可能会导致原本正常的职责p2功能发生故障。也就是说职责p1和p2被耦合在一起。
(5)解决办法:遵循单一职责原则,将不同的职责封装到不同的类或模块中。分别建立两个类T1、T2,使T1完成职责p1功能,T2完成职责p2功能。这样,当修改类T1时,不会使职责p2发生故障风险;同理,当修改T2时,也不会使职责p1发生故障风险。

5、this关键字的应用

5.1 this.成员属性

  • (1)分别在run和eat方法中,通过this访问成员属性month和name。如图所示:


    ①输出结果;

    ②当在Cat类中run和eat方法中均去掉this,则输出结果为:

  • (2)总结:大部分时候,类的方法中访问成员属性时无须使用this,但如果方法里存在局部变量和成员属性同名,但程序又需要在该方法里访问成员属性时,则必须使用this进行调用。

5.2 this.成员方法()

  • (1)在Cat类中的run方法中,分别通过this以及不加this为前缀调用的方法访问同类的eat方法。


    ①输出结果:
  • (2)大部分时候,类的成员方法访问同类中其他成员方法时,this关键字可加可不加,效果相同。

5.3 this构造方法()

在Cat类中分别定义了属性name和month、无参构造方法、单参构造方法以及双参构造方法;在CatTest类中,定义多个Cat类型引用,并分别应用不同构造方法进行实例化。

  • (1)当在带参构造中调用无参构造时


    ①输出结果:

    ②当调整this()在单参构造方法中的位置时:

    **错误提示:**构造方法的调用必须为一个构造方法的第一行
    ③当在Cat的双参构造方法中,同时调用无参和单参构造方法时:

    **错误提示:**构造方法的调用必须为一个构造方法的第一行
  • (2)总结:
    ① 可以在构造方法中,通过this调用本类中的另一个构造方法,但是,调用动作必须置于方法中的第一行。
    ② 可以通过this调用本类中带参或者无参构造方法,调用带参构造方法时,需要按顺序传入设定的参数。
    ③ 在一个构造方法内只能调用一个构造方法。
    ④ 不能在类的普通成员方法内通过this调用构造方法。

5.4 在方法调用时,作为参数传递

  • (1)在Cat类中,定义run方法,方法参数为Cat类型对象。call方法中,调用run方法,并通过this指代,传入当前对象。


    ①输出结果为:

    ②这段代码作用等同于:

  • (2)总结: this可以作为方法参数进行传递,代表调用方法的当前对象。

5.5 在方法调用时,作为返回值传递

  • (1)在Cat类中,定义call方法,方法中通过this返回Cat类型对象。


    ①输出结果为:
  • (2)总结:this可以作为方法返回值,代表返回当前调用对象。

6、构造方法常见问题总结

6.1 构造方法与类中成员方法得起区别是什么?

1、作用:

  • 构造方法:用于生成并初始化对象,针对不同的初始化状态,设置不同参数的构造方法。
  • 成员方法:根据类型所需任意功能,进行方法设置。
    2、格式:
  • 构造方法:访问修饰符 类名(参数列表){*******}
  • 成员方法:访问修饰符 返回值类型 方法名(参数列表){*******}
    3、特点:
    (1)构造方法:
    ①方法名必须与类名相同,包括大小写
    ②没有返回值,也不能用void修饰
    ③如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数且无方法体的构造方法以完成对象实例化。如果类中显式地定义了一个或者多个构造方法,则编译器不再提供默认构造方法。
    ④类中可以包含多个构造方法,多个构造方法之间可以通过this进行调用,但仅可在第一行执行调用。
    ⑤只能与new一起进行调用,不能通过对象名、类名等其他形式调用。
    ⑥在非构造方法中,只能结合对象实例化操作被调用,不能通过方法名被访问。
    (2)成员方法:
    ①方法名符合Java命名规范即可。
    ②需要设置返回值,如果方法体无返回值,需要用void设置。
    ③类中可以包含多个同名成员方法、类内方法间可以在任意位置进行调用。另外、当访问权限允许时,可以通过对象名.方法名()形式调用。
    ④语法层面来说,可以存在方法名与类名相同的成员变量,但不推荐。同时,编译器会提示,这个方法与构造方法同名,但不影响程序运行。

6.2 一个类中构造方法可以有几种表现形式?相互之间是否可以调用?

  • 一个类中可以包含多个构造方法,只要满足参数类型、顺序、个数不同即可,也称为构造方法重载。
  • 不同构造方法之间可以通过this(参数列表)的方式进行调用,但是只能在构造方法的第一行出现。

6.3 进行构造方法的调用时,为啥我的断点会跳到这里来而不在我写的代码里呢?


解决方案:如果在代码调试时,希望进入构造方法内部,需要在对应的构造方法上设置断点。

6.4 debug进入之后单步执行为啥会直接报错 source not found?


解决方案:首先source并不是报错,而是由于没有配置源码信息,再加上断点设置的位置关系,进行调试时就会展示这个界面。想配置源码信息,可以参考如下步骤:
①点击debug窗口中的“Edit Source Lookup Path”按钮。
②在弹出窗口中点击“Add”按钮。
③在弹出窗口中点击“Project”选项。
④选择自己正在调试的项目。
⑤不要勾选“Search for duplicate source files on the path”这个选项。
⑥保存,重启eclipse。

Java基础学习生疏知识点总结(4)——面向对象、单一职责原则、this关键字、构造方法相关推荐

  1. Java基础学习总结(6)——面向对象

    2019独角兽企业重金招聘Python工程师标准>>> 一.JAVA类的定义 JAVA里面有class关键字定义一个类,后面加上自定义的类名即可.如这里定义的person类,使用cl ...

  2. 面向对象——单一职责原则

    在设计软件的各个类时,应该遵循单一职责原则 什么是单一职责原则? 就是他的字面意思,只负责一类事件,而不是全部都参与,一手通天 例如: 设计一个游戏中的人物类,NPC类,或者玩家类,那么,他们能负责的 ...

  3. JAVA基础学习--面向对象

    JAVA基础学习–面向对象 1.面向对象与面向过程: 面向过程:就代表从头到位,每一步都需要我们来完成,例如洗衣服,首先收拾脏衣服.接上水.到洗衣液.搓.倒水.拧干.晾晒.每一步都需要我们来完成. 面 ...

  4. Java基础学习——第六章 面向对象编程(下)

    Java基础学习--第六章 面向对象编程(下) 一.关键词:static 1. static关键字的引入 当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new ...

  5. Java基础学习总结(84)——Java面向对象六大原则和设计模式

    面向对象六大原则 在此之前,有一点需要大家知道,熟悉这些原则并不是说你写出的程序就一定灵活.清晰,只是为你优秀的代码之路铺上了一层栅栏,在这些原则的指导下,你才能避免陷入一些常见的代码泥沼,从而让你写 ...

  6. java基础学安卓开发_Android开发学习路线之Java基础学习

    原标题:Android开发学习路线之Java基础学习 很多Android学习开发者刚入手Android开发技术时,稍微有点迫切.任何的开发技术都有其基础语言,Android应用程序开发是以Java语言 ...

  7. 尚学堂JAVA基础学习笔记_2/2

    尚学堂JAVA基础学习笔记_2/2 文章目录 尚学堂JAVA基础学习笔记_2/2 写在前面 第10章 IO技术 1. IO入门 2. IO的API 3. 装饰流 4. IO实战 5. CommonsI ...

  8. Java基础学习——方法

    Java基础学习--方法 前言 本文将介绍有关Java面向对象编程的知识之一:方法:其中包括方法的概念,三类方法的格式.方法的重载以及方法的内存 方法的概念 方法是程序中最小的执行单元 方法定义:将一 ...

  9. java基础学习总结(二)——开篇(转载于孤傲苍狼博主的心得体会)

    由于孤傲苍狼博主16年后,就没有更新博客了.其中有些文章看不了,挺可惜的.为了避免后续文章也会有类似情况,因此,他的博文基本都会转载过来,也会标注转载,做一个备份.不过文章太多,不会每篇文章都有转载于 ...

最新文章

  1. 读博难?大神来支招!DeepMind科学家Ruder提出十条实用建议
  2. Java基础之移位运算,为什么高位补1?
  3. oracle之分析函数over及开窗函数
  4. luogu P1027 Car的旅行路线
  5. wenzhixin bootstrap-table 点击table单元格改变颜色
  6. c++ 宏 win linux_服务器端开发经验总结 Linux C语言
  7. chrome鼠标手势_Chrome插件推荐——第一弹
  8. 实现位数超过32bit的整数的加减乘除运算_Java 运算符
  9. 荣耀系列到底算不算华为手机
  10. Java Code Examples for org.apache.ibatis.annotations.Insert
  11. oracle 定义变量 查询,Oracle定义PL/SQL变量
  12. ApacheCN 翻译/校对/笔记整理活动进度公告 2019.10.11
  13. DNA拷贝数变异CNV检测——基础概念篇
  14. 板内板间通信协议及接口(七)现场总线及modbus协议
  15. 使用腾讯云paas服务接口通过视频进行活体校验-人脸识别
  16. jQuery下载所有版本(实时更新……)
  17. 聊聊旷厂黑科技 | 手机多摄的终极奥义是“多”吗?
  18. 西瓜书.第五章(神经网络)重点最全整理+课后习题
  19. 计算机提示无法访问手机tf卡,内存卡在电脑上无法显示
  20. 老破旧ThinkPad机器装Win7

热门文章

  1. Apollo 星火计划踩坑记录 dreamview启动报错“No such file or directory: ‘ping‘: ‘ping‘”
  2. PHP的Apache自带的ab压力测试
  3. hp mfp m281fdw 彩色激光打印机不通电
  4. 易购数码类电商商城网页设计与实现项目源码
  5. JavaFX 布局——VBox
  6. 学会向上管理,4个提问技巧,让你事半功倍
  7. iOS8 对开发人员来说意味着什么?
  8. python函数高级话题
  9. 19软考软件设计师_19个免费的设计师在线杂志
  10. 中国计算机学会推荐国际学术会议