2023年6月20日发(作者:)

必看!100道Java程序员⾯试题(含答案)!除了掌握扎实的专业技能之外,你还需要⼀份《Java程序员⾯试宝典》才能在万千⾯试者中杀出重围,成功拿下offer。

Q1:Java内部类和⼦类之间有什么区别?

答案:内部类是指在⼀个外部类的内部再定义⼀个类,内部类对外部类有访问权限,可以访问类中定义的所有变量和⽅法。

⼦类是从⽗类(superclass)中继承的类,⼦类可以访问⽗类所有public和protected的字段和⽅法。

Q2:Java语⾔中有哪些常见的访问说明符,有什么意义?

答案:Java中的访问说明符是放在类名之前,⽤于定义访问范围的关键字,常见的访问说明符有以下⼏类:Public:公共,能被项⽬中的任何⼀个Class、Method、Field访问。Protected:受保护,能被同类或⼦类访问,不能从外部访问。Default:默认,只能被同⼀个包的Class、Method、Field访问。Private:私有,只能被本类访问。

Q3:静态⽅法和静态变量的⽬的是什么?

答案:静态变量被类的所有实例共⽤,静态类只能访问类的静态变量,或调⽤类的静态⽅法。

Q4:什么是数据封装及其意义?

答案:封装是⾯向对象编程中⽤于在单个单元中组合属性和⽅法。

封装可以帮助程序员遵循模块化⽅法进⾏软件开发,每个对象都有⾃⼰的⼀组⽅法和变量,并且可以独⽴于其他对象来执⾏其功能。另外,封装也有数据隐藏的⽬的。

Q5:什么是 singleton class(单例类)?并给出其⽤法的实际例⼦。

答案:单例类只能有⼀个实例,必须⾃⼰创建⾃⼰的唯⼀实例,必须给所有其他对象提供这⼀实例。

单例使⽤场景的最佳实践是由于某些驱动程序限制或由于许可问题的限制只能连接数据库。 Q6:什么是循环?Java中有哪些循环?

答案:循环⽤于编程中重复执⾏语句,Java中的循环有三类:

1、for循环for循环⽤于执⾏指定重复次数的语句,当程序员明确知道循环次数可以使⽤for循环。

2、While循环当语句满⾜条件时开始进⾏重复执⾏,直到语句不再满⾜条件退出循环。While循环中在执⾏语句之前先检查是否满⾜条件。

3、do while循环Do while 和while循环基本类似,唯⼀不同的是do while是先执⾏语句再检查条件,也就是说do while循环⾄少会执⾏⼀次语句。

Q7:什么是⽆限循环?如何声明⽆限循环?

答案:⽆限循环是指⽆条件执⾏,⽆限运⾏。⽆限循环可以由定义中断语句块来结束。

Q8:continue和break语句有什么区别?

答案:break和continue都是循环中的重要关键词,break语句是结束整个循环过程,continue语句只结束本次循环,⽽不是终⽌整个循环的执⾏。

Break:

Continue:

Q9:Java中的double和float变量有什么区别? 答案:float是单精度浮点数,内存中占⽤4字节,double是双精度浮点数,内存中占⽤8字节。

Q10:Java中的Final关键字是什么意思?请举例说明

答案:final是Java中的关键字,有“⽆法改变”、“终态”的含义,final类不能被继承,没有⼦类,final类中的⽅法默认是final的,且不能被⼦类的⽅法覆盖,但可以被继承。

final成员变量表⽰常量,只能被赋值⼀次,赋值后值不再改变。final不能⽤于修饰构造⽅法。

下⾯的例⼦中,const_val被声明且赋值为常量100:Private Final int const_val=100⽽当⼀个⽅法被声明为final之后,它不能被⼦类覆盖,⽽且会⽐其他⽅法都快。

Q11:举例说明什么是三元运算符?

答案:三元运算符,也称为条件运算符,根据布尔值来决定将哪个值分配给变量,它被表⽰为...?...:...

在下⾯的⽰例中,如果rank为1,status=Done,否则status=Pending

Q12:如何在Java中⽣成随机数?

答案:使⽤()可以⽣成0.1到1.0范围内的随机数字,然后通过数学⽅法实现⽣成符合要求的随机数。

Q13:举例说明什么是default switch case?

答案:在switch语句中,如果没有case条件匹配,那么它会就会执⾏default后⾯的语句。

在下⾯的例⼦中,当score既不是1也不是2时,就会执⾏default之后的语句。 Q14:Java中所有派⽣类的基类是什么?

答案:

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对象转换为字节序列的过程,只能将⽀持 izable 接⼝的对象写⼊流中,每个 serializable 对象的类都被编码。

Q24:Java中的atch是⽤于异常处理吗?

答案:try后⾯往往会跟着catch或finally,try抛出的任何异常都会被捕获在catch中,在代码终⽌前的要执⾏的任务放在finally中。

Q25:有没有什么办法在出现异常时跳过finally? 答案:当在try中出现异常时,如果存在catch,会先被catch捕获,否则会执⾏到finally。异常发⽣时肯定会执⾏finally,除⾮在try的末尾有强制中⽌代码:(0);

Q26:什么时候类的构造函数会被调⽤?

答案:每次⽤new来创建对象时,都会调⽤构造函数。例如,下例中new创建了两个对象,构造函数也被调⽤了两次。

Q27:⼀个类可以有多个构造函数吗?

答案:是的,⼀个类可以有多个具有不同参数的构造函数,创建对象的构造函数取决于创建对象时传递的参数。

Q28:我们可以覆盖类的静态⽅法吗?

答案:我们不能覆盖静态⽅法,静态⽅法属于⼀个类⽽不是单个对象,并且在编译时解析(⽽不是在运⾏时)。

Q29:在下⾯的例⼦中,输出是什么? 答案: 输出为:Displaying from subclassDisplaying from superclass

Q30:String是Java的数据类型吗?

答案:String不是Java的原始数据类型,Java中创建⼀个string时,实际上是创建了类的对象,这个对象可以使⽤String类的所有内置⽅法。

Q31:下⾯的⽰例中,共创建了多少个String对象?

答案:共创建了两个类的对象。s1和s3是对同⼀个对象的引⽤。

Q32:为什么Java中的String被称为Immutable?

答案:Java中,string对象是不可变的,⼀旦赋值不可更改,如果更改,则会创建⼀个新对象。

在下⾯的⽰例中,str是值为“Value One”的字符串对象: 当分配⼀个新值时,将创建⼀个新的String对象,并将引⽤移动到新对象。:

Q33:数组和向量之间有什么区别?

答案:数组是对相同原始类型的数据进⾏组合,本质上是静态的,⽽⽮量本质上是动态的,并且可以容纳不同数据类型的数据。

Q34:什么是多线程?

答案:多线程是⼀个编程概念,可以在单个程序中以并发⽅式执⾏多个任务。同⼀个进程的多个线程堆栈共享,有助于程序的性能改进。

Q35:为什么在ava中使⽤Runnable Interface?

答案:Runnable接⼝在Java中⽤于实现多线程应⽤程序,le接⼝由⼀个⽀持多线程的类来实现。

Q36:Java中实现多线程的两种⽅法是什么?

答案:1、通过使⽤le Interface,通过Run()⽅法来启⽤多线程。2、编写⼀个扩展类的类。

Q37:当数据需要进⾏⼤量更改时, String和StringBuffer谁是更好的选择?

答案:StringBuffers本质上是动态的,我们可以改变StringBuffer对象的值,⽽String是不可变的,每次数据更改都会创建⼀个新的String对象,增加额外开销,所以在数据更改很多的情况下,StringBuffer是⼀个更好的选择。

Q38:每个switch语句后使⽤break的⽬的是什么?

答案:switch使⽤break可以在执⾏完这个语句后中断,如果不使⽤break,那么它将把所有情况都执⾏⼀遍。

Q39:如何在Java中完成垃圾回收?

答案:Java中,对象不被引⽤时,垃圾回收就会发⽣,对象会被⾃动销毁,调⽤()⽅法或()⽅法。 Q40:可以在Main()⽅法前执⾏代码?

答案:如果我们要在类加载时,对象创建之前执⾏语句,可以在类中使⽤静态代码块,这样即使在main⽅法中创建对象之前,此静态代码块中的语句都将在加载类时执⾏⼀次。

Q41:⼀个类可以同时既是⽗类也是⼦类吗?请举例说明?

答案:如果使⽤了继承层次结构,那么这个类就可能既是⼀个类的⽗类也是另⼀个类的⼦类,如下例中的⼤陆类既是世界类的⼦类,同时也是国家类的⽗类。

Q42:如果类中没有定义构造函数,那么类的对象将会怎么创建?

答案:即使类没有定义显式构造函数,对象在创建时也会执⾏隐式构造函数,且该构造函数没有参数。

Q43:在多线程中,如何确保资源不会同时被多个线程使⽤?

答案:在多线程中,可以通过使⽤同步的概念来控制对多个线程之间共享的资源的访问。使⽤synchronized关键字,我们可以确保只有⼀个线程可以⼀段时间内使⽤共享资源。

Q44:我们是否可以为对象多次调⽤类的构造函数?

答案:使⽤new创建对象时,会⾃动调⽤构造函数,对象创建之后,则⽆法再调⽤该构造函数。

Q45:两个类classA和classB都在同⼀个包中,那么classA的私有成员可以被classB的对象访问吗?

答案:类的私有成员在该类的范围之外是不可访问的,即使在同⼀个包中也不能访问任何其他类。 Q46:同⼀类中可以定义重名的⽅法吗?

答案:可以定义重名的⽅法,但是其参数的数量和类型是不同的,调⽤哪个⽅法取决于传递的参数。

例如在下⾯的类中,我们有两个具有相同名称但不同参数的打印⽅法。根据参数,将调⽤适当的参数:

Q47:如何制作⼀个Java对象的副本?

答案:使⽤克隆,我们可以创建具有对象的实际状态的副本。Clone()是Cloneable interface的⽅法,因此需要实现Cloneableinterface来进⾏对象拷贝。

Q48:使⽤继承有什么好处?

答案:使⽤继承的主要优点是代码的可重⽤性,因为继承使⼦类能够重⽤其⽗类的代码。多态性(可扩展性)是另⼀个好处,允许引⼊新的功能⽽不影响现有的派⽣类。

Q49:类的变量和⽅法的默认访问说明符是什么?

答案:变量和⽅法的默认访问说明符是protected,即变量和类可⽤于同⼀个包中的任何其他类。

Q50:举⼀个在Java类中使⽤指针的例⼦。

答案:Java中没有指针。

Q51:如何限制⼀个类不被继承?

答案:使⽤关键字Final。在下⾯的例⼦中,Stone类就不能被继承了。

Q52:访问说明符的访问范围是什么? 答案:

Q53:栈和队列之间有什么区别?

答案:栈和队列之间的主要区别在于,栈基于“后进先出(LIFO)”原则,⽽队列基于FIFO(先进先出)原则。

Q54:在Java中,我们如何禁⽌序列化变量?

答案:想要某些变量不被序列化,那么可以在声明时使⽤关键字transient。例如,下⾯的变量trans_var是⼀个临时变量,不能被序列化:

Q55:我们如何使⽤原始数据类型作为对象?

答案:Java提倡“⼀切皆为对象”,引⽤数据类型可以实例化为对象,基本数据类型却⽆法变为对象,针对这⼀不⾜,JAVA中设置了包装类,例如,Integer是原始数据类型int的包装类。

Q56:编译时会遇到哪些类型的异常?

答案:程序编译时可以捕获被检查的异常,为了成功编译代码,异常会通过atch来处理。

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:在实现接⼝的类中,我们可以更改接⼝中定义的变量的值吗?

答案:不能,接⼝中定义的变量⼤多都默认是public、static和final等不可更改的常量。

Q78:Java中的垃圾回收机制能够确保程序永远不会超出内存?

答案:即使Java提供⾃动垃圾回收,也不能确保程序不会超出内存,因为与垃圾回收相⽐,Java对象的创建速度更快。

Q79:main()能否有除void之外的返回类型?

答案:不可以,main()必须返回值为void,程序才能成功执⾏。

Q80:垃圾回收之后,还能否重新触发并使⽤该对象? 答案:不能,⼀旦对象被回收之后,就不再存在于堆栈上,也就不能再次访问和引⽤了。

Q81:在Java线程编程中,哪个⽅法是所有线程必须实现的?

答案:Run()是⼀个Runnable接⼝的⽅法,必须由所有线程实现。

Q82:如何在程序中控制数据库连接,且每次只有⼀个线程可以进⾏数据库连接?

答案:应⽤同步的概念来实现,将数据库相关代码hs synchronized关键字的⽅法中,以便⼀次只有⼀个线程可以访问它。

Q83:程序员⼿动抛出异常怎么办?

答案:为了处理⼿动抛出的异常,我们可以使⽤throw关键字,并在catch中捕获和处理异常。

Q84:如何实现⼀个类不允许其他类(甚⾄派⽣类)创建其对象?

答案:将该类的构造函数声明为private,那么它就不会被其他类访问。

Q85:对象如何存储在Java中?

答案:每个对象在创建时都会从堆栈中获取内存空间,被垃圾回收器销毁之后,其空间将被释放重新分配给其它对象。

Q86:如何确定堆栈上对象的实际⼤⼩?

答案:Java中,没办法确定对象的确切⼤⼩。

Q87:以下哪个类将分配更多的内存?

A类:三种⽅法,四个变量,⽆对象B类:五个⽅法,三个变量,⽆对象

答案:在创建对象之前,不会分配内存,所以这两个类都没有分配内存。 Q88:如果程序中没有处理异常,会发⽣什么?

答案:如果没有异常处理,那么程序将中⽌,且不会执⾏异常抛出之后的语句。

Q89:如果定义了⼀个类定义了多个构造函数,那么是否可以在⼀个构造函数中调⽤另⼀个构造函数?

答案:如果⼀个类有多个构造函数,那么可以使⽤this()在⼀个构造函数中调⽤另⼀个构造函数。

Q90:什么是匿名类?

答案:匿名类是不能有名字的类,它们不能被引⽤,只能在创建时⽤New语句来声明它们。

下例中,我们定义了⼀个匿名类:

Q91:数组声明之后是否还可以改变其⼤⼩?

答案:数组是静态的,⼀旦指定了⼤⼩,就不能改变。

Q92:应⽤程序中有多个类,但只有⼀个main()可以吗?

答案:可以,main()⽅法是Java应⽤程序的⼊⼝⽅法,代码总是从特定类的main⽅法开始。

Q93:如果我想要保留对象的数据以供以后使⽤,最好的做法是什么? 答案:使⽤序列化。

Q94:什么是局部类?

答案:如果我们在Java的特定块中定义⼀个新类,那么这个类就被称为局部类,它在局部范围内可⽤,在其定义的块之外不可⽤。

Q95:String和StringBuffer都表⽰String对象,这两个对象之间可以互相⽐较吗?

答案:不可以。

Q96:Java提供了哪些API⽤于集合类的操作?

答案:Java提供了Collection API,可应⽤于⼀组对象的,Collection API⽀持的重要类包括ArrayList、HashMap、TreeSet和TreeMap。

Q97:Java的类型转换可以将所有其他类转换为布尔类型吗?

答案:不可以,其它原始类型不能转换为布尔类型,布尔类型也不能转换为其它原始数据类型。

Q98:⽅法的重写允许返回类型不同吗?

答案:⽅法的重写要求⼦类的⽅法的名称及参数必须和所覆盖的⽅法相同,返回类型可以不同但必须是所覆盖⽅法的⼦类。

Q99:所有异常类的基类是什么?

答案:ble。 Q100:构造函数在继承中的调⽤顺序是什么?

答案:在继承的情况下,创建派⽣类的新对象时,⾸先调⽤⽗类的构造函数,然后调⽤派⽣类的构造函数。

以上就是整理的100道Java程序员⾯试问题和答案,希望同学们在学好技术的基础上,也能理解和掌握这些知识,祝⼤家早⽇拿到满意的offer!

最后我建了⼀个qq群,正在学习Java的⼩伙伴可以进群:127522921 ,纯技术讨论裙(你需要的PDF电⼦书,练习题,开发⼯具,练⼿项⽬,⾯试题,学习路线图等都已经给你准备好了,群内每天分享各种Java学习资料,链接容易失效,请⾃⾏进群下载)

2023年6月20日发(作者:)

必看!100道Java程序员⾯试题(含答案)!除了掌握扎实的专业技能之外,你还需要⼀份《Java程序员⾯试宝典》才能在万千⾯试者中杀出重围,成功拿下offer。

Q1:Java内部类和⼦类之间有什么区别?

答案:内部类是指在⼀个外部类的内部再定义⼀个类,内部类对外部类有访问权限,可以访问类中定义的所有变量和⽅法。

⼦类是从⽗类(superclass)中继承的类,⼦类可以访问⽗类所有public和protected的字段和⽅法。

Q2:Java语⾔中有哪些常见的访问说明符,有什么意义?

答案:Java中的访问说明符是放在类名之前,⽤于定义访问范围的关键字,常见的访问说明符有以下⼏类:Public:公共,能被项⽬中的任何⼀个Class、Method、Field访问。Protected:受保护,能被同类或⼦类访问,不能从外部访问。Default:默认,只能被同⼀个包的Class、Method、Field访问。Private:私有,只能被本类访问。

Q3:静态⽅法和静态变量的⽬的是什么?

答案:静态变量被类的所有实例共⽤,静态类只能访问类的静态变量,或调⽤类的静态⽅法。

Q4:什么是数据封装及其意义?

答案:封装是⾯向对象编程中⽤于在单个单元中组合属性和⽅法。

封装可以帮助程序员遵循模块化⽅法进⾏软件开发,每个对象都有⾃⼰的⼀组⽅法和变量,并且可以独⽴于其他对象来执⾏其功能。另外,封装也有数据隐藏的⽬的。

Q5:什么是 singleton class(单例类)?并给出其⽤法的实际例⼦。

答案:单例类只能有⼀个实例,必须⾃⼰创建⾃⼰的唯⼀实例,必须给所有其他对象提供这⼀实例。

单例使⽤场景的最佳实践是由于某些驱动程序限制或由于许可问题的限制只能连接数据库。 Q6:什么是循环?Java中有哪些循环?

答案:循环⽤于编程中重复执⾏语句,Java中的循环有三类:

1、for循环for循环⽤于执⾏指定重复次数的语句,当程序员明确知道循环次数可以使⽤for循环。

2、While循环当语句满⾜条件时开始进⾏重复执⾏,直到语句不再满⾜条件退出循环。While循环中在执⾏语句之前先检查是否满⾜条件。

3、do while循环Do while 和while循环基本类似,唯⼀不同的是do while是先执⾏语句再检查条件,也就是说do while循环⾄少会执⾏⼀次语句。

Q7:什么是⽆限循环?如何声明⽆限循环?

答案:⽆限循环是指⽆条件执⾏,⽆限运⾏。⽆限循环可以由定义中断语句块来结束。

Q8:continue和break语句有什么区别?

答案:break和continue都是循环中的重要关键词,break语句是结束整个循环过程,continue语句只结束本次循环,⽽不是终⽌整个循环的执⾏。

Break:

Continue:

Q9:Java中的double和float变量有什么区别? 答案:float是单精度浮点数,内存中占⽤4字节,double是双精度浮点数,内存中占⽤8字节。

Q10:Java中的Final关键字是什么意思?请举例说明

答案:final是Java中的关键字,有“⽆法改变”、“终态”的含义,final类不能被继承,没有⼦类,final类中的⽅法默认是final的,且不能被⼦类的⽅法覆盖,但可以被继承。

final成员变量表⽰常量,只能被赋值⼀次,赋值后值不再改变。final不能⽤于修饰构造⽅法。

下⾯的例⼦中,const_val被声明且赋值为常量100:Private Final int const_val=100⽽当⼀个⽅法被声明为final之后,它不能被⼦类覆盖,⽽且会⽐其他⽅法都快。

Q11:举例说明什么是三元运算符?

答案:三元运算符,也称为条件运算符,根据布尔值来决定将哪个值分配给变量,它被表⽰为...?...:...

在下⾯的⽰例中,如果rank为1,status=Done,否则status=Pending

Q12:如何在Java中⽣成随机数?

答案:使⽤()可以⽣成0.1到1.0范围内的随机数字,然后通过数学⽅法实现⽣成符合要求的随机数。

Q13:举例说明什么是default switch case?

答案:在switch语句中,如果没有case条件匹配,那么它会就会执⾏default后⾯的语句。

在下⾯的例⼦中,当score既不是1也不是2时,就会执⾏default之后的语句。 Q14:Java中所有派⽣类的基类是什么?

答案:

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对象转换为字节序列的过程,只能将⽀持 izable 接⼝的对象写⼊流中,每个 serializable 对象的类都被编码。

Q24:Java中的atch是⽤于异常处理吗?

答案:try后⾯往往会跟着catch或finally,try抛出的任何异常都会被捕获在catch中,在代码终⽌前的要执⾏的任务放在finally中。

Q25:有没有什么办法在出现异常时跳过finally? 答案:当在try中出现异常时,如果存在catch,会先被catch捕获,否则会执⾏到finally。异常发⽣时肯定会执⾏finally,除⾮在try的末尾有强制中⽌代码:(0);

Q26:什么时候类的构造函数会被调⽤?

答案:每次⽤new来创建对象时,都会调⽤构造函数。例如,下例中new创建了两个对象,构造函数也被调⽤了两次。

Q27:⼀个类可以有多个构造函数吗?

答案:是的,⼀个类可以有多个具有不同参数的构造函数,创建对象的构造函数取决于创建对象时传递的参数。

Q28:我们可以覆盖类的静态⽅法吗?

答案:我们不能覆盖静态⽅法,静态⽅法属于⼀个类⽽不是单个对象,并且在编译时解析(⽽不是在运⾏时)。

Q29:在下⾯的例⼦中,输出是什么? 答案: 输出为:Displaying from subclassDisplaying from superclass

Q30:String是Java的数据类型吗?

答案:String不是Java的原始数据类型,Java中创建⼀个string时,实际上是创建了类的对象,这个对象可以使⽤String类的所有内置⽅法。

Q31:下⾯的⽰例中,共创建了多少个String对象?

答案:共创建了两个类的对象。s1和s3是对同⼀个对象的引⽤。

Q32:为什么Java中的String被称为Immutable?

答案:Java中,string对象是不可变的,⼀旦赋值不可更改,如果更改,则会创建⼀个新对象。

在下⾯的⽰例中,str是值为“Value One”的字符串对象: 当分配⼀个新值时,将创建⼀个新的String对象,并将引⽤移动到新对象。:

Q33:数组和向量之间有什么区别?

答案:数组是对相同原始类型的数据进⾏组合,本质上是静态的,⽽⽮量本质上是动态的,并且可以容纳不同数据类型的数据。

Q34:什么是多线程?

答案:多线程是⼀个编程概念,可以在单个程序中以并发⽅式执⾏多个任务。同⼀个进程的多个线程堆栈共享,有助于程序的性能改进。

Q35:为什么在ava中使⽤Runnable Interface?

答案:Runnable接⼝在Java中⽤于实现多线程应⽤程序,le接⼝由⼀个⽀持多线程的类来实现。

Q36:Java中实现多线程的两种⽅法是什么?

答案:1、通过使⽤le Interface,通过Run()⽅法来启⽤多线程。2、编写⼀个扩展类的类。

Q37:当数据需要进⾏⼤量更改时, String和StringBuffer谁是更好的选择?

答案:StringBuffers本质上是动态的,我们可以改变StringBuffer对象的值,⽽String是不可变的,每次数据更改都会创建⼀个新的String对象,增加额外开销,所以在数据更改很多的情况下,StringBuffer是⼀个更好的选择。

Q38:每个switch语句后使⽤break的⽬的是什么?

答案:switch使⽤break可以在执⾏完这个语句后中断,如果不使⽤break,那么它将把所有情况都执⾏⼀遍。

Q39:如何在Java中完成垃圾回收?

答案:Java中,对象不被引⽤时,垃圾回收就会发⽣,对象会被⾃动销毁,调⽤()⽅法或()⽅法。 Q40:可以在Main()⽅法前执⾏代码?

答案:如果我们要在类加载时,对象创建之前执⾏语句,可以在类中使⽤静态代码块,这样即使在main⽅法中创建对象之前,此静态代码块中的语句都将在加载类时执⾏⼀次。

Q41:⼀个类可以同时既是⽗类也是⼦类吗?请举例说明?

答案:如果使⽤了继承层次结构,那么这个类就可能既是⼀个类的⽗类也是另⼀个类的⼦类,如下例中的⼤陆类既是世界类的⼦类,同时也是国家类的⽗类。

Q42:如果类中没有定义构造函数,那么类的对象将会怎么创建?

答案:即使类没有定义显式构造函数,对象在创建时也会执⾏隐式构造函数,且该构造函数没有参数。

Q43:在多线程中,如何确保资源不会同时被多个线程使⽤?

答案:在多线程中,可以通过使⽤同步的概念来控制对多个线程之间共享的资源的访问。使⽤synchronized关键字,我们可以确保只有⼀个线程可以⼀段时间内使⽤共享资源。

Q44:我们是否可以为对象多次调⽤类的构造函数?

答案:使⽤new创建对象时,会⾃动调⽤构造函数,对象创建之后,则⽆法再调⽤该构造函数。

Q45:两个类classA和classB都在同⼀个包中,那么classA的私有成员可以被classB的对象访问吗?

答案:类的私有成员在该类的范围之外是不可访问的,即使在同⼀个包中也不能访问任何其他类。 Q46:同⼀类中可以定义重名的⽅法吗?

答案:可以定义重名的⽅法,但是其参数的数量和类型是不同的,调⽤哪个⽅法取决于传递的参数。

例如在下⾯的类中,我们有两个具有相同名称但不同参数的打印⽅法。根据参数,将调⽤适当的参数:

Q47:如何制作⼀个Java对象的副本?

答案:使⽤克隆,我们可以创建具有对象的实际状态的副本。Clone()是Cloneable interface的⽅法,因此需要实现Cloneableinterface来进⾏对象拷贝。

Q48:使⽤继承有什么好处?

答案:使⽤继承的主要优点是代码的可重⽤性,因为继承使⼦类能够重⽤其⽗类的代码。多态性(可扩展性)是另⼀个好处,允许引⼊新的功能⽽不影响现有的派⽣类。

Q49:类的变量和⽅法的默认访问说明符是什么?

答案:变量和⽅法的默认访问说明符是protected,即变量和类可⽤于同⼀个包中的任何其他类。

Q50:举⼀个在Java类中使⽤指针的例⼦。

答案:Java中没有指针。

Q51:如何限制⼀个类不被继承?

答案:使⽤关键字Final。在下⾯的例⼦中,Stone类就不能被继承了。

Q52:访问说明符的访问范围是什么? 答案:

Q53:栈和队列之间有什么区别?

答案:栈和队列之间的主要区别在于,栈基于“后进先出(LIFO)”原则,⽽队列基于FIFO(先进先出)原则。

Q54:在Java中,我们如何禁⽌序列化变量?

答案:想要某些变量不被序列化,那么可以在声明时使⽤关键字transient。例如,下⾯的变量trans_var是⼀个临时变量,不能被序列化:

Q55:我们如何使⽤原始数据类型作为对象?

答案:Java提倡“⼀切皆为对象”,引⽤数据类型可以实例化为对象,基本数据类型却⽆法变为对象,针对这⼀不⾜,JAVA中设置了包装类,例如,Integer是原始数据类型int的包装类。

Q56:编译时会遇到哪些类型的异常?

答案:程序编译时可以捕获被检查的异常,为了成功编译代码,异常会通过atch来处理。

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:在实现接⼝的类中,我们可以更改接⼝中定义的变量的值吗?

答案:不能,接⼝中定义的变量⼤多都默认是public、static和final等不可更改的常量。

Q78:Java中的垃圾回收机制能够确保程序永远不会超出内存?

答案:即使Java提供⾃动垃圾回收,也不能确保程序不会超出内存,因为与垃圾回收相⽐,Java对象的创建速度更快。

Q79:main()能否有除void之外的返回类型?

答案:不可以,main()必须返回值为void,程序才能成功执⾏。

Q80:垃圾回收之后,还能否重新触发并使⽤该对象? 答案:不能,⼀旦对象被回收之后,就不再存在于堆栈上,也就不能再次访问和引⽤了。

Q81:在Java线程编程中,哪个⽅法是所有线程必须实现的?

答案:Run()是⼀个Runnable接⼝的⽅法,必须由所有线程实现。

Q82:如何在程序中控制数据库连接,且每次只有⼀个线程可以进⾏数据库连接?

答案:应⽤同步的概念来实现,将数据库相关代码hs synchronized关键字的⽅法中,以便⼀次只有⼀个线程可以访问它。

Q83:程序员⼿动抛出异常怎么办?

答案:为了处理⼿动抛出的异常,我们可以使⽤throw关键字,并在catch中捕获和处理异常。

Q84:如何实现⼀个类不允许其他类(甚⾄派⽣类)创建其对象?

答案:将该类的构造函数声明为private,那么它就不会被其他类访问。

Q85:对象如何存储在Java中?

答案:每个对象在创建时都会从堆栈中获取内存空间,被垃圾回收器销毁之后,其空间将被释放重新分配给其它对象。

Q86:如何确定堆栈上对象的实际⼤⼩?

答案:Java中,没办法确定对象的确切⼤⼩。

Q87:以下哪个类将分配更多的内存?

A类:三种⽅法,四个变量,⽆对象B类:五个⽅法,三个变量,⽆对象

答案:在创建对象之前,不会分配内存,所以这两个类都没有分配内存。 Q88:如果程序中没有处理异常,会发⽣什么?

答案:如果没有异常处理,那么程序将中⽌,且不会执⾏异常抛出之后的语句。

Q89:如果定义了⼀个类定义了多个构造函数,那么是否可以在⼀个构造函数中调⽤另⼀个构造函数?

答案:如果⼀个类有多个构造函数,那么可以使⽤this()在⼀个构造函数中调⽤另⼀个构造函数。

Q90:什么是匿名类?

答案:匿名类是不能有名字的类,它们不能被引⽤,只能在创建时⽤New语句来声明它们。

下例中,我们定义了⼀个匿名类:

Q91:数组声明之后是否还可以改变其⼤⼩?

答案:数组是静态的,⼀旦指定了⼤⼩,就不能改变。

Q92:应⽤程序中有多个类,但只有⼀个main()可以吗?

答案:可以,main()⽅法是Java应⽤程序的⼊⼝⽅法,代码总是从特定类的main⽅法开始。

Q93:如果我想要保留对象的数据以供以后使⽤,最好的做法是什么? 答案:使⽤序列化。

Q94:什么是局部类?

答案:如果我们在Java的特定块中定义⼀个新类,那么这个类就被称为局部类,它在局部范围内可⽤,在其定义的块之外不可⽤。

Q95:String和StringBuffer都表⽰String对象,这两个对象之间可以互相⽐较吗?

答案:不可以。

Q96:Java提供了哪些API⽤于集合类的操作?

答案:Java提供了Collection API,可应⽤于⼀组对象的,Collection API⽀持的重要类包括ArrayList、HashMap、TreeSet和TreeMap。

Q97:Java的类型转换可以将所有其他类转换为布尔类型吗?

答案:不可以,其它原始类型不能转换为布尔类型,布尔类型也不能转换为其它原始数据类型。

Q98:⽅法的重写允许返回类型不同吗?

答案:⽅法的重写要求⼦类的⽅法的名称及参数必须和所覆盖的⽅法相同,返回类型可以不同但必须是所覆盖⽅法的⼦类。

Q99:所有异常类的基类是什么?

答案:ble。 Q100:构造函数在继承中的调⽤顺序是什么?

答案:在继承的情况下,创建派⽣类的新对象时,⾸先调⽤⽗类的构造函数,然后调⽤派⽣类的构造函数。

以上就是整理的100道Java程序员⾯试问题和答案,希望同学们在学好技术的基础上,也能理解和掌握这些知识,祝⼤家早⽇拿到满意的offer!

最后我建了⼀个qq群,正在学习Java的⼩伙伴可以进群:127522921 ,纯技术讨论裙(你需要的PDF电⼦书,练习题,开发⼯具,练⼿项⽬,⾯试题,学习路线图等都已经给你准备好了,群内每天分享各种Java学习资料,链接容易失效,请⾃⾏进群下载)