java基础:关于debug,发消息,组合与继承,运行时多态,接口,instanceof等问题

写博客使我快乐!
这次内容就围绕下面几个方面吧!

在这里插入图片描述

1. debug功能设置断点,单步调试跟踪子类实例化的执行顺序和总结。

这里主要简单分享一下IDEA使用debug功能的经验。
以一个代码为例:
在这里插入图片描述

1.设置断点:可以直接点击该行左侧,就会出现断点
在这里插入图片描述

或者是点击选择该行,通过快捷键Ctirl+F8 设置断点.

2.运行:点击这个看起来像爬虫的绿色图标,带有断点的程序便会运行(一定需要点爬虫这个,点左边的运行图标的话程序会忽视断点照常运行)
在这里插入图片描述
点击运行之后,会弹出debug调试界面,
在这里插入图片描述
下面介绍一下debug调试界面的一些功能:
在这里插入图片描述
上方的8个图标的功能依次为:
【1】 Show Execution Point(快捷键:Alt+ F10):如果光标在其它行或其它页面,点击这个按钮可跳转到当前代码执行的行。
【2】 Step Over (快捷键:F8):一行一行地往下走,如果这一行上有方法不会进入方法。
【3】Step lnto (快捷键:F7):如果当前行有方法,可以进入方法内部,一般用于进入自定义方法内,不会进入官方类库的方法。
【4】Force Step Into (快捷键:Alt + Shift + F7):强制步入,能进入任何方法,查看底层源码的时候可以用这个进入官方类库的方法。
【5】Step Out (快捷键:Shift + F8):步出,从步入的方法内退出到方法调用处,此时方法已执行完毕,只是还没有完成赋值。
【6】Drop Frame:回退断点。
【7】Run to Cursor(快捷键:At + F9):运行到光标处,可以将光标定位到需要查看的那一行,然后使用这个功能,代码会运行至光标行,而不需要打断点。
【8】 Evaluate Expression (快捷键:Alt+ F8):计算表达式。

左侧的一列图标功能从上到下依次是:
【1】Rerun ‘…’:重新运行程序,会关闭服务后重新启动程序。
【2】Resume Program (快捷键:F9):恢复程序,比如,你在第20行和25行有两个断点,当前运行至第20行,按F9,则运行到下一个断点(即第25行),再按F9,则运行完整个流程,因为后面已经没有断点了。
【3】Pause Program:暂停程序,启用Debug。目前没发现具体用法。
【4】Stop ‘…’(快捷键:Ctrl + F2):连续按两下,关闭程序。有时候关闭服务再启动时,报端口是被占用的,这是因为没完全关闭服务,这时候就需要查杀所有JVM进程了。
【5】View Breakpoints (快捷键:Ctrl + Shift +F8):查看所有断点,后面章节会涉及到。
【6】Mute Breakpoints: 选择后,所有断点变为灰色,断点失效,按F9则可以直接运行完程序。再次点击,断点变为红色,有效。如果只想使某一个断点失效,可以在断点上右键取消Enabled。

设置断点之后运行,可以在该行后面,或者variables区域看到该行的参数情况,如下图:
在这里插入图片描述

2. 如何实现两个对象之间的互发消息?

发消息就是描述使用引用的属性和方法其实就是调用对象的属性和方法的过程,实质就是引用向对象发出服务请求,对数据成员和成员的方法进行调用
要能发消息需要满足3个条件:
(1)引用必真实引用了特定的对象。
(2)被访问的对象必须定义了相应的属性或方法。
(3)被访问的属性或方法必须具有可访问的权限。

要使两个对象之间能够互发消息,那么两个类的对象引用就要分别做另一个类的数据成员。
例如:
在这里插入图片描述

3. 组合与继承的区别以及两者的使用场景。(什么时候宜用组合,什么时候宜用继承)

组合就是某类的对象引用做另一个类的数据成员,相当于这个类是另一个类对象的一个属性!
继承则是子类从父类继承相应的属性和方法。

区别:
(1)组合可以显式的获得被包含类的对象,继承是子类隐式的获得父类的对象
(2)组合在运行时才能体现,而继承在编译的时候就体现了
(3)组合是包含类和被包含类的松耦合关系;继承是父类和子类的一种紧耦合关系。
(4)继承父类可以引用子类对象,而组合被包含类不能引用包含类对象。
(5)从理解上看,通过继承,子类可以继承父类所有的方法和属性,这些方法和属性可以看作属于该子类的;而组合被包含类的对象是包含类的数据成员,包含类并没有拥有被包含类的属性和方法,还是需要通过被包含类对象引用间接调用其方法和属性。

应用场景:
(1)当子类只需要使用父类的功能,而父类和子类没有什么需求时,适合用继承。
(2)当父类的所有变化,都需要在子类体现时,需要用继承。
(3)对于比较大的程序,优先考虑组合比较好,使用组合可以保证每一个类的封装性,因为它是通过别的类引用去调用其类属性。当然使用组合还是继承需要根据具体情况而定。

4. Java中的运行时多态的含义及作用。

多态分为运行时多态编译时多态,根据什么时间执行多态中的一个而定。
运行时多态则为程序在运行的时候执行多态的某一种。

作用:运行时多态通过方法覆盖实现,是一种动态的绑定,使用父类的引用指向子类对象,再调用某一父类中的方法时,不同子类会表现出不同结果。这样使得程序扩展性强,当要添加与其他子类具有类似功能的子类时,只需要在子类中覆盖父类的方法,父类近乎不需要改动,可以移植性强,也便于维护,实现代码重用,提高编程效率。

5. 接口(改写程序)

这里就浅显的介绍一下接口吧,然后给出一个抽象类改写成接口的例子。
接口(interface):是功能方法说明的集合,相当于遥控器,通过接口实现不同功能。
(1)定义的时候用interface,前修饰符为public或者默认
(2)接口中的数据成员全部都是静态常量,即使不修饰,默认为静态常量
(3)方法都是抽象方法,无构造方法
(4}接口也可以继承
(5)接口不能实例化对象
使用接口,首先要定义接口,然后必须要有其实现类,实现类需要实现接口中的全部方法(遥控器都有了,实现类不实现其全部方法,那光有按钮没有反应就没意义,编译也不会通过)

下面是一个抽象类的相关程序:
在这里插入图片描述
在这里插入图片描述
将其改写成接口(以Rect为例)
在这里插入图片描述

可以看到,一个接口可以被多个类继承,但是每个类都需要实现接口中的所有方法。main方法中接口引用实现类对象,调用实现类具体功能.

6. 简述运算符instanceof使用场景

instanceof的使用格式为: a instanceof A;A为类,a为对象的引用,当a为A类的实例或者A类的子类实例的时候,返回true;如果a为A父类的实例,返回false;如果两者没有任何联系,则编译无法通过(语法错误)

使用场景:
(1)判断一个变量是一个类的实例或者子类的实例,还是其父类的实例
(2)当子类和父类对象在转型的时候,向上转型向下转型有时候会出现类转换异常,此时可以通过instanceof进行判断,再转型,以此来避免类转换异常的发生。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值