javaSE面试题整理

记得每天要坚持整理面试题,五个月后轻松一点。。。

一、java面向对象

1.面向对象有哪些特性已经你对这些特性的理解?

1)继承:extends,继承父类方法,高效性和重用性 2)封装:private,隐藏一切可隐藏的东西,保护数据,只向外界提供最简单的接口
3)多态::允许不同子类型的对象对同一消息做出的不同的响应
4)抽象:abstract,抽象只关注对象有哪些属性和行为,并不关心这些行为的细节

2.访问权限修饰符的区别?
在这里插入图片描述
从前车马很慢,路很远。。。嗯,这个名字不错

二、JavaSE语法

1.java有goto语句吗?

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

2.&与&&的区别?

&的运算符有两种:1)按位与;2)逻辑与 &&运算符是短路与运算。 相同点:都必须两边都为true才为true
不同点:&&当左边的表达式是false的时候,右边会被直接短路掉。

3.在java中,如何跳出当前的多重循环?

在最外层循环前加一个标记如A,然后用breakA;就可以跳出多重循环

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

不对,如果满足x.equals(y)=true,hashCode一定相同!!!

5.是否可以继承String类?

String是final类(太监类),不能被继承。。。 对 String 类型最好的重用方式是关联关系(Has-A)和依赖关系(Use-A)

6.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并
可返回变化后的结果,那么这里到底是值传递还是引用传递?

待解答。。。

7.重载和重写的区别?重载能否根据返回类型区分?

重载和重写都是实现多态的方式 区别:前者编译时的多态,后者是运行时的多态 重载:1.方法名一致 2.参数列表中参数的顺序,类型,个数不同
重写:1.参数列表,返回类型必须完全一致

8.为什么函数不能根据返回类型来区分重载?
因为调用时不能指定类型信息,编译器不知道你要调用哪个函数?
例如:

float max(int a,int b)
int max(int a,int b)

现在九点唉,今天刚学了一堆数据结构,码农的道路越走越远
加油,还有一小时下课!
9.char类型变量能不能存储一个中文汉字,为什么?(待解答)

char类型可以存储一个中文汉字,因为java中使用的编码是Unicode,一个char类型占2个字节(16bit)
不懂,过段时间再来瞅瞅。。。

10.抽象类和接口有什么区别?(最最最经典的面试题)

抽象类:
1.抽象类中可以定义构造器
2.可以有抽象方法和具体方法
3.接口中的成员全都是public 的
4.抽象类中可以定义成员变量
5.有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法
6.抽象类中可以包含静态方法
7.一个类只能继承一个抽象类
接口:
1.接口中不能定义构造器
2.方法全部都是抽象方法
3.抽象类中的成员可以是 private、默认、protected、public
4.接口中定义的成员变量实际上都是常量
5.接口中不能有静态方法
6.一个类可以实现多个接口
相同:
1.不能够实例化
2.可以将抽象类和接口类型作为引用类型
3.一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类

11.抽象方法是否可同时是静态的, 是否可同时是本地方法(native),是否可同时被synchronized待解答。。。过段时间瞅瞅

都不能。抽象方法需要子类重写,而静态的方法是无法被重写的,因此二者是矛盾的。本地方法是由 本地代码(如 C
代码)实现的方法,而抽象方法是没有实现的,也是矛盾的。synchronized 和方法的实现细节有关,
抽象方法不涉及实现细节,因此也是相互矛盾的。

12.静态变量和实例对象的区别?

静态变量:是被static修饰的变量,属于类,不属于类的任何一个对象,一个类不管创建多少对象,静态变量在内存中有且仅有一个拷贝。
实例对象:必须依存于某一实例,需要先创建对象然后通过对象才能访问到它。静态变量可以实现让多个对象共享内存。

13.==和equals的区别?

equals 和== 最大的区别是equals是方法,而另一个是运算符。
==:如果比较的是基本数据类型,比较的是数值是否相等
如果比较的是引用数据类型,比较的是对象的地址值是否相等
equals:比较两个对象的内容是否相等
equals不能用于基本数据类型的变量,如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址。

14. break 和continue 的区别?

break 和continue 都是用来控制循环的语句。 break 用于完全结束一个循环,跳出循环体执行循环后面的语句。 continue
用于跳过本次循环,执行下次循环。

15. String s = “Hello”;s = s + " world!";这两行代码执行后,原始的String 对象
中的内容到底变了没有?

没有。因为String 被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。在这段代码中,s 原先指 向一个String 对象,内容是 “Hello”,然后我们对s 进行了“+”操作,那么s 所指向的那个对象是否发生了改变呢?
答案是没有。
这时,s不指向原来那个对象了,而指向了另一个 String 对象,内容为"Hello world!",原来那个对象还 存在于内存之中,只是s 这个引用变量不再指向它了。
销。因为 String 对象建立之后不能再改变,所以对于每
一个不同的字符串,都需要一个String 对象来表示。这时,应该考虑使用StringBuffer 类,它允许修改,而不是每个不同的字符串都要生成一个新的对象。

今天就到这里吧。

猜你喜欢

转载自blog.csdn.net/qq_33646685/article/details/89195513