Java面试题整理(附答案)

是的,一切都会成为过去;

没关系,一切都还来得及;

都过去了,算了吧。

 

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

封装,继承,多态

2.访问修饰符public protected default(不写默认) private区别?      

  类内部 本包 子类 外部包
public

protected

default
private

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

不是 String是一个类(Java编程语言中的字符串)

4.float f = 3.4是否正确?

不正确 精度不够准确

应该强制类型转换float f = (float)3.4或者float f = 3.4f

没小数点默认是int,有小数点默认是double

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

s1=s1+1有错,其类型是int类型不能用short类型接收(类型转换错误)

s1+=1正确,+=是Java语言规定的运算符,编译器自动进行了隐式类型转换

6.Java有没有goto?

是java语言中的保留字,目前Java中还没有使用。C语言使用

7.int和integer有什么区别?

integer int
是int的包装类 基本数据类型
必须实例化 不用实例化
是对象的引用 直接存储数据值
默认值为null 默认值为0

8.&和&&的区别?

&    不管前面的条件是否正确,后面都会执行

&& 前面条件正确时,才执行后面。前面条件不正确时,后面不执行。效率更好

同理|和||

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

stack:只保存基本数据类型的对象和自定义对象的引用(不是对象),都是私有的。

heap:存储的都是对象,只存放对象本身。只有一个堆区被所有线程共享

静态区:包含所有的class和static变量,都是在整个程序中永远唯一的元素

String str = new String("hello");

str放在栈上,用new创建出来的字符串放在堆上,hello放在静态区上

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

                                            12                                            -11

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

int byte short char都可以,对应的包装类型也可以

long double float boolean不可以(包括他们的包装类型)

JDK1.7之后可以用String类型

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

2<<3

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

数组没有length(),只有size属性

String有length()方法

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

在最外层循环定义一个标号,想跳出直接break该标号即可
15、构造器(constructor)是否可被重写(override)?

构造器不能被继承,所以不能被重写,但是可以被重载。
16、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

不对 如果满足(x.equals(y) == true)那么他们的hashcode一定相同
17、是否可以继承String类?

不可以 因为String有final修饰符,所以不能被继承。
18、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

Java只有值传递参数,对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。
19、String和StringBuilder、StringBuffer的区别?

运行速度:StringBuilder>StringBuffer>String

StringBuilder和StringBuffer类的对象能够被多次操作,并不产生新的未使用对象,适合对字符串频繁的修改

StringBuffer是线程安全的        StringBuiler是线程不安全的

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

重写:方法名 参数 列表 返回值相同,内容不一样。

重载:方法名相同,参数类型个数数序至少有一个不相同的

不能,因为调用时不能指定类型信息,编译器不知道你要调用哪个函数


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

1.装载:查找和导入class文件

2.连接:检查载入的class文件数据的正确性

              为类的静态变量分配存储空间

              将符号引用转换成直接引用(可选)

3.初始化静态变量,静态代码块


22、char 型变量中能不能存贮一个中文汉字,为什么?

用来存储unicode编码的,汉字包含在unicode编码中,所以可以存储汉字。但如果unicode不包含某个特殊字符那不能存储这个汉字。占2个字节。


23、抽象类(abstract class)和接口(interface)有什么异同?

抽象类可以有构造方法,方法体;接口没有构造方法,不能有方法体。

抽象类可以继承一个类或实现多个接口;接口只可以实现一个或多个接口

抽象类可以做方发声明,也可以做方法实现;接口只能做方发声明


24、静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同?

静态嵌套类的实例话对象不能也无法绑定外围类的实例话对象

内部类的实例话对象需要绑定一个外围类的实例话对象


25、Java 中会存在内存泄漏吗,请简单描述。

理论上有垃圾回收机制不会存在,但是确实存在

比如创建了一个对象,以后一直不在使用这个对象,这个对象却一直被引用。即这个对象无用但是却无法被垃圾回收器回收


26、抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被synchronized修饰?

都不能

抽象的方法需要子类重写,静态方法无法被重写。二者矛盾

本地方法是由本地代码实现的方法,抽象方法是没有实现的。所以矛盾

synchronized和方法实现的细节有关,抽象方法不涉及实现细节,矛盾!


27、阐述静态变量和实例变量的区别。

静态变量是所有对象共有的,某一个对象将它的值改变了,其他对象再获取它的值,得到的是改变后的值

实例变量则是每个对象私有的,某一个对象将它的值改变了,不影响其他对象取值的结果,其他对象仍会得到实例变量一开始就被赋予的值。


28、是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?

不可以,因为非static方法是要与对象关联一起的,必须创建一个对象后。才可以在该对象进行方法调用,而static方法调用时不需要创建对象,可以直接调用


29、如何实现对象克隆?

实现Cloneable接口并重写object类中的clone()方法

实现Serializable接口,通过对象的序列化和反序列化。实现真正的深度克隆


30、String s = new String("xyz");创建了几个字符串对象?

两个

new一个String对象,需要现在字符串常量中查找相同的值或创建一个字符串常量。然后再在内存中创建一个String对象


31、接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?

都可以


32、一个".java"源文件中是否可以包含多个类(不是内部类)?有什么限制?

可以包含多个类,但只允许有一个public类 ,并且类名跟文件名一致

因为每个编译单元只能有一个公开的接口,由public表示


33、Anonymous Inner Class(匿名内部类)是否可以继承其它类?是否可以实现接口?

匿名内部类必须借助一个类或一个接口,从上方面说它是可以继承其他类或实现接口的。但若是通过extends或implements关键字是不可能的


34、内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制?

可以 如果不是静态内部类,没有限制!


35、Java 中的final关键字有哪些用法?

修饰变量(不可改变)  参数(不可被修改)     方法(不可被覆盖)     类(不可被继承)


36、数据类型之间的转换:

低级到高级的自动类型转换

高级到低级的强制类型转换

基本类型向类类型转换

类类型向字符串转换

基本类型向字符串类型转换


37、如何实现字符串的反转及替换?

用StringBuffer,调用reverse方法可实现反转             replace方法替换


38、怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串?

String result = new String(s.getBytes("GB2312"),"iso-8859-1");


39、日期和时间:
40、打印昨天的当前时刻。

Calendar cal = Calendar.getInstance();

cal.add(Calendar.DATE, -1);

System.out.println(cal.getTime());


41、比较一下Java和JavaSciprt。

Java 面向对象;  JavaSciprt基于对象

Java必须编译;JavaSciprt由浏览器解释执行

Java强类型变量,编译之前必须声明;JavaSciprt弱类型变量,变量在使用前不需作声明,而是解释器在运行时检查其数据类型;

代码格式不一样


42、什么时候用断言(assert)?

如果希望在不满足某些条件时阻止代码的执行的时候


43、Error和Exception有什么区别?

Error 是不可控制的,用来表示系统错误或底层资源的错误,系统级错误

Exception可以是可控制也可以是不可控制,由程序员导致的错误,应用程序级被处理


44、try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后?

Finally里的代码会执行 再执行完try后执行 在return之前


45、Java语言如何进行异常处理,关键字:throws、throw、try、catch、finally分别如何使用?

Try用来执行一段代码

Catch紧跟在try后面,用来指定想要捕获的异常

Finally不管发生什么异常都要被执行

Throw明确地抛出一个异常

Throws用来声明一个方法可能抛出的各种异常


46、运行时异常与受检异常有何异同?

运行时异常不用必须作出处理

受检异常必须处理捕获抛出


47、列出一些你常见的运行时异常?

ClassNotFoundException

FileNotFoundException

ClassCaseException

IOException

NullPointerException

SQLException


48、阐述final、finally、finalize的区别。

Final用于声明属性 方法和类
finally异常处理的一部分,try/catch语句中使用
finalize是object类的一个方法

 

50、List、Se

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值