必看!100道Java程序员面试题(含答案)!,积累总结
每年转战互联网行业的人很多,说白了也是冲着高薪去的,不管你是即将步入这个行业还是想转行,学习是必不可少的。作为一个Java开发,学习成了日常生活的一部分,不学习你就会被这个行业淘汰,这也是这个行业残酷的现实。如果你对Java感兴趣,想要转行改变自己,那就要趁着机遇行动起来。或许,这份限量版的Java零基础宝典能够对你有所帮助。[外链图片转存中…(img-RkRlXdVn-1712028248701
Q15:Java中的main()方法可以返回任何数据吗?
答案:java中的main()方法不能返回任何数据,它的返回类型始终是void。
Q16:什么是Java Packages?其意义是什么?
答案:为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。
包的作用:
1、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
2、如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
3、包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
Q17:我们可以声明一个抽象类,但是没有任何抽象方法吗?
答案:是的,我们可以声明一个抽象类,且不包含任何抽象方法,但是一旦一个类中含有一个抽象方法,那么该类必须声明为抽象。
Q18:Java中的抽象类和接口有什么区别?
答案:抽象类和接口之间的主要区别在于,抽象类可以拥有任意范围的成员数据,同时也可以拥有自己的非抽象方法,但是接口方式中,它仅能够有静态、不能修改的成员数据,同时它所有的方法都必须是抽象的。
抽象类是对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。
一个类可以实现多个接口,但它只能扩展一个抽象类。
Q19:接口对抽象类的性能影响是什么?
答案:与抽象类相比,接口性能较慢。一个类只能扩展一个抽象类,却能实现许多接口,随着接口在类中的实现,也会给开发人员带来额外负担。
Q20:Java中导入包时,其子包是否会被导入?
答案:在Java中导入包时,其子包不会被导入,如果有需要,开发者必须单独导入。开发者需要单独导入它们。
Q21:类中的main方法可以声明为private?
答案:Java中main方法必须是public,如果是private,那么它虽然在编译时不会出错,但是在运行时会出错。
Q22:我们能不能通过引用向函数传递参数?
答案:不能,我们只能通过引用将值传递给函数。
Q23:对象在java中如何序列化?
答案:序列化是指把Java对象转换为字节序列的过程,只能将支持 java.io.Serializable 接口的对象写入流中,每个 serializable 对象的类都被编码。
Q24:Java中的try…catch是用于异常处理吗?
答案:try后面往往会跟着catch或finally,try抛出的任何异常都会被捕获在catch中,在代码终止前的要执行的任务放在finally中。
Q25:有没有什么办法在出现异常时跳过finally?
答案:当在try中出现异常时,如果存在catch,会先被catch捕获,否则会执行到finally。异常发生时肯定会执行finally,除非在try的末尾有强制中止代码:System.exit(0);
Q26:什么时候类的构造函数会被调用?
答案:每次用new来创建对象时,都会调用构造函数。
例如,下例中new创建了两个对象,构造函数也被调用了两次。
Q27:一个类可以有多个构造函数吗?
答案:是的,一个类可以有多个具有不同参数的构造函数,创建对象的构造函数取决于创建对象时传递的参数。
Q28:我们可以覆盖类的静态方法吗?
答案:我们不能覆盖静态方法,静态方法属于一个类而不是单个对象,并且在编译时解析(而不是在运行时)。
Q29:在下面的例子中,输出是什么?
答案: 输出为:
Displaying from subclass
Displaying from superclass
Q30:String是Java的数据类型吗?
答案:String不是Java的原始数据类型,Java中创建一个string时,实际上是创建了Java.Lang.String类的对象,这个对象可以使用String类的所有内置方法。
Q31:下面的示例中,共创建了多少个String对象?
答案:共创建了两个java.Lang.String类的对象。s1和s3是对同一个对象的引用。
Q32:为什么Java中的String被称为Immutable?
答案:Java中,string对象是不可变的,一旦赋值不可更改,如果更改,则会创建一个新对象。
在下面的示例中,str是值为“Value One”的字符串对象:
当分配一个新值时,将创建一个新的String对象,并将引用移动到新对象。:
Q33:数组和向量之间有什么区别?
答案:数组是对相同原始类型的数据进行组合,本质上是静态的,而矢量本质上是动态的,并且可以容纳不同数据类型的数据。
Q34:什么是多线程?
答案:多线程是一个编程概念,可以在单个程序中以并发方式执行多个任务。同一个进程的多个线程堆栈共享,有助于程序的性能改进。
Q35:为什么在ava中使用Runnable Interface?
答案:Runnable接口在Java中用于实现多线程应用程序,Java.Lang.Runnable接口由一个支持多线程的类来实现。
Q36:Java中实现多线程的两种方法是什么?
答案:
1、通过使用Java.Lang.Runnable Interface,通过Run()方法来启用多线程。
2、编写一个扩展Java.Lang.Thread类的类。
Q37:当数据需要进行大量更改时, String和StringBuffer谁是更好的选择?
答案:StringBuffers本质上是动态的,我们可以改变StringBuffer对象的值,而String是不可变的,每次数据更改都会创建一个新的String对象,增加额外开销,所以在数据更改很多的情况下,StringBuffer是一个更好的选择。
Q38:每个switch语句后使用break的目的是什么?
答案:switch使用break可以在执行完这个语句后中断,如果不使用break,那么它将把所有情况都执行一遍。
Q39:如何在Java中完成垃圾回收?
答案:Java中,对象不被引用时,垃圾回收就会发生,对象会被自动销毁,调用System.gc()方法或Runtime.gc()方法。
Q40:可以在Main()方法前执行代码?
答案:如果我们要在类加载时,对象创建之前执行语句,可以在类中使用静态代码块,这样即使在main方法中创建对象之前,此静态代码块中的语句都将在加载类时执行一次。
Q41:一个类可以同时既是父类也是子类吗?请举例说明?
答案:如果使用了继承层次结构,那么这个类就可能既是一个类的父类也是另一个类的子类,如下例中的大陆类既是世界类的子类,同时也是国家类的父类。
Q42:如果类中没有定义构造函数,那么类的对象将会怎么创建?
答案:即使类没有定义显式构造函数,对象在创建时也会执行隐式构造函数,且该构造函数没有参数。
Q43:在多线程中,如何确保资源不会同时被多个线程使用?
答案:在多线程中,可以通过使用同步的概念来控制对多个线程之间共享的资源的访问。使用synchronized关键字,我们可以确保只有一个线程可以一段时间内使用共享资源。
Q44:我们是否可以为对象多次调用类的构造函数?
答案:使用new创建对象时,会自动调用构造函数,对象创建之后,则无法再调用该构造函数。
Q45:两个类classA和classB都在同一个包中,那么classA的私有成员可以被classB的对象访问吗?
答案:类的私有成员在该类的范围之外是不可访问的,即使在同一个包中也不能访问任何其他类。
Q46:同一类中可以定义重名的方法吗?
答案:可以定义重名的方法,但是其参数的数量和类型是不同的,调用哪个方法取决于传递的参数。
例如在下面的类中,我们有两个具有相同名称但不同参数的打印方法。根据参数,将调用适当的参数:
Q47:如何制作一个Java对象的副本?
答案:使用克隆,我们可以创建具有对象的实际状态的副本。Clone()是Cloneable interface的方法,因此需要实现Cloneable interface来进行对象拷贝。
Q48:使用继承有什么好处?
答案:使用继承的主要优点是代码的可重用性,因为继承使子类能够重用其父类的代码。多态性(可扩展性)是另一个好处,允许引入新的功能而不影响现有的派生类。
Q49:类的变量和方法的默认访问说明符是什么?
答案:变量和方法的默认访问说明符是protected,即变量和类可用于同一个包中的任何其他类。
Q50:举一个在Java类中使用指针的例子。
答案:Java中没有指针。
Q51:如何限制一个类不被继承?
答案:使用关键字Final。
在下面的例子中,Stone类就不能被继承了。
Q52:访问说明符的访问范围是什么?
答案:
Q53:栈和队列之间有什么区别?
答案:栈和队列之间的主要区别在于,栈基于“后进先出(LIFO)”原则,而队列基于FIFO(先进先出)原则。
Q54:在Java中,我们如何禁止序列化变量?
答案:想要某些变量不被序列化,那么可以在声明时使用关键字transient。例如,下面的变量trans_var是一个临时变量,不能被序列化:
Q55:我们如何使用原始数据类型作为对象?
答案:Java提倡“一切皆为对象”,引用数据类型可以实例化为对象,基本数据类型却无法变为对象,针对这一不足,JAVA中设置了包装类,例如,Integer是原始数据类型int的包装类。
Q56:编译时会遇到哪些类型的异常?
答案:程序编译时可以捕获被检查的异常,为了成功编译代码,异常会通过try…catch来处理。
Q57:请描述一下线程的不同状态。
答案:Java中的线程往往是处于下面的某一种状态
-
NEW:通过New关键字创建了Thread类(或其子类)的对象
-
RUNNABLE:这种情况指的是Thread类的对象调用了start()方法,线程处于就绪状态。
-
RUNNING:线程获得了CPU,处于运行状态。
-
DEAD:处于RUNNING状态的线程,在执行完run方法之后,就变成了DEAD状态了。
-
BLOCKED:这种状态指的是处于RUNNING状态的线程,出于某种原因,比如调用了sleep方法、等待用户输入等而让出当前的CPU给其他的线程。
Q58:定义了类的显式构造函数之后,还可以使用默认构造函数吗?
答案:如果没有定义显式构造函数,那么Java将提供一个默认的无参数构造函数,但是如果定义了显式构造函数之后,就不能再调用默认构造函数。
Q59:可以有两个方法,它们方法名和参数都相同,但返回值类型不同?
答案:相同的方法指的是方法名、参数以及返回类型都相同,因此返回类型不同的两个方法是可以并存的。
Q60:以下代码的输出是什么?
答案:输出为4
Q61:在没有执行main()的情况下,成功编译了一个Java类,这一说法正确吗?
答案:正确,虽然Java编译器规定程序的入口点为staticmain,但是没有main()还是能够编译,只是不能运行。
Q62:我们可以在静态方法中调用非静态方法?
答案:非静态方法归类的对象所有,且具有对象的级别范围,所以如果想要在静态方法中调用非静态方法,首先要创建类的对象,然后使用对象引用,调用这些方法。
Q63:为了运行Java程序,必须设置两个环境变量是什么?
答案:PATH变量和CLASSPATH变量。
Q64:Java中变量没有初始化可以使用吗?
答案:Java不会给变量分配默认值,因此变量没有初始化的情况下,程序会编译失败并给出错误提示。
Q65:Java中的类可以继承多个类吗?
答案:Java不支持多重继承。
Q66:Java中,构造函数可以与类名不同吗?
答案:不可以,Java的构造函数必须与类名相同,如果不同,它将被视作普通函数。
Q67:Round(3.7)和Ceil(3.7)的输出分别是什么?
答案:它们的输出都是4。Round()遵循四舍五入,Ceil()遵循向上舍入。
Q68:Java中可以使用goto来转到特定行吗?
答案:不可以,Java中没有goto关键字。
Q69:已经死亡的线程可以再次启动吗?
答案:不可以。
Q70:以下类的声明是否正确?
答案:不正确,抽象类不能被声明为Final。
Q71:每个机器都需要JDK来运行Java程序?
答案:JDK是Java的开发工具包,不是必需的,JRE才是必需的。
Q72:Equals()和==有什么区别?
答案:Java中,==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同
下例中,equals()返回true,而==操作符则返回false:
Q73:Java类中定义方法,可否使用其他语言代码实现,如C语言?
答案:可以,在基于原生开发的情况下,我们可以在Java类中定义公共静态方法,但是不执行,然后用另外一种语言(如C)实现。
Q74:如何在Java中定义析构函数?
答案:Java类中没必要定义析构函数,它有自己的垃圾回收机制,当不再引用对象时,会自动执行。
Q75:Java中变量可以既是局部变量又是静态变量吗?
答案:不能,将局部变量定义为静态变量会导致编译错误。
Q76:Interface中可以有静态方法吗?
答案:Interface中的静态方法是没有意义的,静态方法在类中不能被覆盖,而Interface中的方法默认都是抽象的,所以只能在实现Interface的类中实现。
Q77:在实现接口的类中,我们可以更改接口中定义的变量的值吗?
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
最后
每年转战互联网行业的人很多,说白了也是冲着高薪去的,不管你是即将步入这个行业还是想转行,学习是必不可少的。作为一个Java开发,学习成了日常生活的一部分,不学习你就会被这个行业淘汰,这也是这个行业残酷的现实。
如果你对Java感兴趣,想要转行改变自己,那就要趁着机遇行动起来。或许,这份限量版的Java零基础宝典能够对你有所帮助。
…(img-KxViU1l1-1712028248700)]
[外链图片转存中…(img-RkRlXdVn-1712028248701)]
[外链图片转存中…(img-BBIoLoOq-1712028248701)]
[外链图片转存中…(img-trYhVE4w-1712028248702)]
[外链图片转存中…(img-5WtyfnCB-1712028248703)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-LACGMhEP-1712028248703)]
最后
每年转战互联网行业的人很多,说白了也是冲着高薪去的,不管你是即将步入这个行业还是想转行,学习是必不可少的。作为一个Java开发,学习成了日常生活的一部分,不学习你就会被这个行业淘汰,这也是这个行业残酷的现实。
如果你对Java感兴趣,想要转行改变自己,那就要趁着机遇行动起来。或许,这份限量版的Java零基础宝典能够对你有所帮助。
[外链图片转存中…(img-w9jWR5Ay-1712028248704)]
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)