《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
public class B{
public void m1();
}
上面2个类都有同样的m1方法。
现在我们调用B的m1方法完成一些事情,而B中的m1方法需要调用A中的m1方法才可以完成这个事情,所以B的代码变成了下面这样:
public class B{
private A a; // @1
public B(){
this.a = new A(); //@2
}
public void m1(){
this.a.m1(); //@3
}
}
分析一下上面代码:
@1:B类中声明了一个A类型的属性a
@2:new了一个A对象,赋给了a属性
@3:B类中的m1方法中去调用a.m1()完成业务操作
先说一下什么是依赖关系?
当a对象完成某些操作需要调用b对象中的方法来实现时,说明a依赖于对象b,a和b是依赖关系。
上面代码中B的m1需要调用A的m1方法,说明了B依赖于A
上面代码存在一些问题问题
B类中a对象的创建被写死在B的构造方法中了,如果我们想在创建不同的B对象的时候,使用不同的a对象,此时是无能为力的;代码也不利于测试,由于B中a的创建被写死在构造方法中了,我们想测试一下B中不同a对象的效果,此时只能去修改B中的构造方法。
上面代码需要优化,B中a对象的创建不能写死,可以让外部传入进去,调整一下变成了下面这样:
public class B{
private A a;
public B(A a){
this.a = a;
}
public void m1(){
this.a.m1();
}
}
上面代码可以在创建B对象的时候,将外部创建好的a对象传入进去,此时a的控制权交给了使用者,创建B对象如下:
A a = new A();
B b = new B(a);
b.m1();
上面代码我们再扩展一下,如果B类中还需要依赖很多类似于A的对象,比如需要依赖于C、D、E、F或者更多对象,首先是需要调整B的构造方法,修改老的构造方法不是很好,可以在B中新增一些构造方法。
但是使用B的时候就变成了下面这样:
A a = new A();
C c = new C();
D d = new D();
E e = new E();
F f = new F();
…
B b = new B(a,c,d,e,f,…);
b.m1();
使用者创建B对象之前,需要先将B依赖的对象都给创建好,然后B依赖的这些对象传递给B对象,如果有很多地方都需要用到B类型的对象,都采用这种new的写法,代码量比较大,也不方便维护,如果B中新增了依赖,又需采用new的方式先创建好被依赖的对象,然后将被依赖的对象填充给B对象。
最后总结我的面试经验
2021年的金三银四一眨眼就到了,对于很多人来说是跳槽的好机会,大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。
另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。

BAT面试经验
实战系列:Spring全家桶+Redis等

其他相关的电子书:源码+调优

面试真题:


《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
070)]
面试真题:
[外链图片转存中…(img-Giay8ZyV-1714677770070)]
[外链图片转存中…(img-5umugiby-1714677770070)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
本文详细解析了Java面试中关于依赖关系和构造方法优化的问题,介绍了如何在B类中动态传递A对象,以及如何处理多个依赖对象。同时提到了面试中注重逻辑思维的重要性,并分享了面试准备策略。
324

被折叠的 条评论
为什么被折叠?



