java基础面试题,归纳总结

XIAO 2020-04-02 12:11:29 java常见问答 6780

眼看全国的学生们渐渐就要开学了,各地的工人们也慢慢复工了,需要换工作或者刚刚准备找工作的朋友现在也都在准备了,由于软件行业的特性,受到这次疫情的影响其实跟其他行业相比已经算小的了,下面呢小编就准备了一些与软件开发行业密切相关的java开发的一些基础面试题归纳。

1、面向对象的特征有哪些方面?

答案:

- 抽象:软件抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。

- 封装:定义与自己相关的属性和方法,隐藏实现的细节,只向外界提供最简单的编程接口。

- 继承:继承是从已有类得到继承信息创建新类的过程。继承可以提高代码的重用性,JAVA中只允许单一继承。

- 多态性:不同子类型的对象对同一消息作出不同的响应。方法重载(overload)实现的是编译时的多态性(也称为前绑定或静态多态),而方法重写(override)实现的是运行时的多态性(也称为后绑定或动态多态)。一般多态通过方法重写来实现。

2.比较一下Java和JavaSciprt。

答:JavaScript 与Java是两个公司开发的不同的两个产品。Java 是原Sun Microsystems公司推出的面向对象的程序设计语言,特别适合于互联网应用程序开发;而JavaScript是Netscape公司的产品,是一种可以嵌入Web页面中运行的基于对象和事件驱动的解释性语言。JavaScript的前身是LiveScript;而Java的前身是Oak语言。

下面对两种语言间的异同作如下比较:

- 解释和编译:Java的源代码在执行之前,必须经过编译。JavaScript是一种解释性编程语言,其源代码不需经过编译,由浏览器解释执行。

- 强类型变量和类型弱变量:Java采用强类型变量检查,即所有变量在编译之前必须作声明;JavaScript中变量是弱类型的,甚至在使用变量前可以不作声明,JavaScript的解释器在运行时检查推断其数据类型。

3、String 是最基本的数据类型吗?

答案:

不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type)和枚举类型(enumeration type),剩下的都是引用类型(reference type)。

4、float f=3.4;是否正确?

答案:

不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F;。

5、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?

答案:

对于short s1 = 1; s1 = s1 + 1;由于1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能赋值给short型。而short s1 = 1; s1 += 1;可以正确编译,因为s1+= 1;相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换。

6、Java有没有goto?

答案:

goto 是Java中的保留字,在目前版本的Java中没有使用。

7、int和Integer有什么区别?

答案:

int是基本数据类型, Integer是int的包装类,包装类提供了很多操作方法,如各种类型直接转换等

int默认值为0,integer的默认值为null

Integer变量和int变量比较时,只要两个变量的值是向等的,则结果为true(因为包装类

Integer和基本数据类型int比较时,java会自动拆包装为int,然后进行比较,实际上就变为两个int变量的比较)

对于两个非new生成的Integer对象,进行比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为false

boolean,char,byte,short,int,long,float,double

- 包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double

8、&和&&的区别?

答案:

&运算符有两种用法:(1)按位与;(2)逻辑与。

&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true整个表达式的值才是true。&&之所以称为短路运算是因为,如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。

9、解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。

基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间;

答案:

通过new关键字和构造器创建的对象放在堆空间;

程序中的字面量(literal)如直接书写的100、"hello"和常量都是放在静态区中。

栈空间操作起来最快但是栈很小,通常大量的对象都是放在堆空间,理论上整个内存没有被其他进程使用的空间甚至硬盘上的虚拟内存都可以被当成堆空间来使用。

10、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?

答案:

Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加0.5然后进行下取整。

11、switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?

答案:

在Java 5以前,switch(expr)中,expr只能是byte、short、char、int。从Java 5开始,Java中引入了枚举类型,expr也可以是enum类型,从Java 7开始,expr还可以是字符串(String),但是长整型(long)在目前所有的版本中都是不可以的。

12、用最有效率的方法计算2乘以8?

答案:

2 << 3(左移3位相当于乘以2的3次方,右移3位相当于除以2的3次方)。

13、数组有没有length()方法?String有没有length()方法?

答案:

数组没有length()方法,有length 的属性。String 有length()方法。JavaScript中,获得字符串的长度是通过length属性得到的,这一点容易和Java混淆。

14、在Java中,如何跳出当前的多重嵌套循环?

答案:

在最外层循环前加一个标记如A,然后用break A;可以跳出多重循环。(Java中支持带标签的break和continue语句,作用有点类似于C和C++中的goto语句,但是就像要避免使用goto一样,应该避免使用带标签的break和continue,因为它不会让你的程序变得更优雅,很多时候甚至有相反的作用,所以这种语法其实不知道更好)

15、构造方法(constructor)是否可被重写(override)?

答案:

构造器不能被继承,因此不能被重写,但可以被重载。

16、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

答案:

不对,如果两个对象x和y满足x.equals(y) == true,它们的哈希码(hash code)应当相同。Java对于eqauls方法和hashCode方法是这样规定的:(1)如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同;(2)如果两个对象的hashCode相同,它们并不一定相同。

17、是否可以继承String类?

答案:

String 类是final类,不可以被继承。

18、String和StringBuilder、StringBuffer的区别?

答案:

String是只读字符串,也就意味着String引用的字符串内容是不能被改变的。StringBuffer/StringBuilder类表示的字符串对象可以直接进行修改。StringBuilder是Java 5中引入的,它和StringBuffer的方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方面都没有被synchronized修饰,因此它的效率也比StringBuffer要高。

面试题1 - 什么情况下用+运算符进行字符串连接比调用StringBuffer/StringBuilder对象的append方法连接字符串性能更好?

少量字符串连接用+,大量字符串连接用append

面试题2 - 请说出下面程序的输出。

class StringEqualTest {
public static void main(String[] args) {
String s1 = "Programming";
String s2 = new String("Programming");
String s3 = "Program" + "ming";
System.out.println(s1 == s2);
System.out.println(s1 == s3);
System.out.println(s1 == s1.intern());
}
}

补充:String对象的intern方法会得到字符串对象在常量池中对应的版本的引用(如果常量池中有一个字符串与String对象的equals结果是true),如果常量池中没有对应的字符串,则该字符串将被添加到常量池中,然后返回常量池中字符串的引用。

19、重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?

答案:

重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;

重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求。

20、描述一下JVM加载class文件的原理机制?

答案:

JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的,它负责在运行时查找和装入类文件中的类。

Java类的加载是动态的,它并不会一次性将所有类全部加载后再运行,而是保证程序运行的基础类(像是基类)完全加载到jvm中,至于其他类,则在需要的时候才加载。这样可以节省内存开销

类装载方式,有两种

1.隐式装载, 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中,

2.显式装载, 通过class.forname()等方法,显式加载需要的类

Java的类加载器有三个,对应Java的三种类:(java中的类大致分为三种: 1.系统类 2.扩展类 3.由程序员自定义的类 )

Bootstrap Loader // 负责加载系统类 (指的是内置类,像是String |

- ExtClassLoader // 负责加载扩展类(就是继承类和实现类)

- AppClassLoader // 负责加载应用类(程序员自定义的类)

以上就是小编整理的有关于java基础面试题目的归纳了,希望能对有需要的朋友有所帮助,最后记得关注本站了解更多相关内容哦。