构造方法
1. 如何理解java中的构造方法?
答:顾名思义,构造方法主要用于“构造”出一个对象。平时说的,类可以产生一个对象,实际就是类通过“new + 构造方法”产生了一个对象,例如Person per = new +Person构造方法() 。
构造方法的最大特点就是,没有返回值。
构造方法具体有以下几个作用:
(1)可以通过关键字new构造出一个对象。
(2)当给对象的属性赋值时,可以用多个setter方法,也可以用构造方法一次性赋值。即,此时,构造方法相当于多个setter。
(3)单例模式的一个核心实现就是:构造方法私有化,另一个是:枚举。
(4)构造方法可以产生一个对象,并且在产生该对象前会先自动调用其父类的无参构造方法,也就是在构造方法的第一句话会默认调用super()。
(5)一个类可以有多个重载的构造方法,并且多个构造方法之间可以使用this()相互调用。但是必须有一个构造方法没有this()调用其他方法,否则会陷入死循环。
(6)一个类如果没有显示的写上任何构造方法,也jvm会给该类自动生成一个无参构造;但如果手工写了任何一个构造方法,也jvm不会再提供无参构造。因此,当我们手写了任何一个构造方法后,就建议马上写一个无参构造。
(7)在项目中,对于javabean,一般至少会写这么三个构造方法:无参构造,全参构造,除id以外的全参构造。
(8)构造方法和setter、getter、toString()等,几乎是每个实体类的标配。除了每次自己编写(或用编译器自动生成)以外,还可以使用lombok插件自动完成。也就是说,使用了lombok之后,以后就不用再写构造方法、setter等了。lombok的使用,百度谷歌随处可得,自己查一下吧。
需要更多大厂面试资料的话也可以点击直接进入,免费获取!暗号:CSDN
if…else…同时执行
2.今天面试看见这个题,____处该填什么呢?(如何才能同时执行if…else…?)
填空,使得程序的运行结果是:helloworld
if (____) {
System.out.print("hello");
} else {
System.out.print("world");
}
答:首先说明,if…else…是不可能同时执行的,这应该是选择结构第一堂课上老师必然会讲的内容。此题属于脑筋急转弯,考察的是一种创新能力。
答这个题之前,先想想以下这行语句的输出结果是什么?
System.out.println(System.out.printf("hello"));
结果是:hellojava.io.PrintStream@12a3a380
因为输出语句最终调用的printf(“字符串”),实际是在java.io.PrintStream中的printf(“字符串”)方法,源码如下:
public class PrintStream extends FilterOutputStream
implements Appendable, Closeable
{
public PrintStream printf(String format, Object ... args) {
return format(format, args);
}
...
}
可见,printf()参数是字符串时,返回时是一个PrintStream对象。如果继续跟踪formar()方法,可以发现最终会返回一个不为null的PrintStream对象。因此答案来了,可以填入的值是:
System.out.printf("hello") == null
完整代码如下所示。
public static void main(String[] args) {
if (System.out.printf("hello") == null) {
System.out.print("hello");
} else {
System.out.print("world");
}
}
if在判断的过程中已经输出了hello,但判断结果为false,因此又会输出else中的world,所以答案就是helloworld。
实际上,以上的分析都不重要。重要的是,是怎么想到在if中再嵌套一条完整语句的,这个思路是怎么产生的?因为联想到了IO流中一条非常常见的代码,如下。
while((len = in.read(buf)) != -1) {
...
}
...
面试全对,却没offer
3. 我这几天参加了几次面试,有的是笔试。自我感觉回答的都还不错,并且回去了我查了答案,感觉都对着,但为什么一份offer也没拿到?
答:个人觉得,有这么几种可能:
(1)你回答的都对,但答案过于标准,面试官可能怀疑你的答案是背诵的某个“面试宝典”。软件开发不是应试教育,不需要标准的答案。很多时候,公司更需要一种有独立思维的员工。也就是说,面试官喜欢的答案是:你的回答是独一无二的(尽可能),至少能从回答中 看到你是对这个问题有自己独到的思考,而不希望你的回答和之前N个应聘者的答案一模一样。更详细的,你可以看看这篇文章,戳右侧红色字体(超链接): 技术面试,这些坑你踩过几个?
(2)公司只想花4k雇一个做CRUD的,而你却写着期望2W+。
(3)行业水太深了。A公司可能根本不缺人,但由于合作关系、绩效任务等等原因,不得不作为招聘方去参加一场招聘会(或者其他形式的招聘)。因此,招聘者可能根本没有仔细听你在说什么,只是想跟你随便聊几句,然后下班回家。
(4)招聘转招生。根本不是在招聘,是培训机构在招生。常用手段就是,让你做一套题,然后告诉你“你的回答太浅了”(如果你有错,就会说“你的回答太差了”)。然后告诉你“培训机构哪家强?快来到我这报名,包你毕业后这些题都会,包你拿高薪……”
(5)年龄、person类中那个boolean类型的属性(《某某法》不让说)……
(6)欢迎在评论区补充~
不过还想说一句,这些其实都不重要。因为,从我接触过的人整体来看,很多人可能都遇到过一些无语的面试经历,但最终还是符合常理的:能力强的进大厂、拿高薪,能力弱的去小公司、甚至转行。从来没有一帆风顺,只有坚持与努力。
读者福利
感谢你看到了这里!
我这边整理很多2020最新Java面试题(含答案)和Java学习笔记,如下图
上述的面试题答案小编都整理成文档笔记。 同时也还整理了一些面试资料&最新2020收集的一些大厂的面试真题(都整理成文档,小部分截图)免费分享给大家,有需要的可以 点击进入暗号:CSDN!免费分享~
如果喜欢本篇文章,欢迎转发、点赞。
记得关注我!