JAVA面试题目

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

答:可以有多个类,但是只能有一个public类,并且public类只能与文件名一样。

2、Java有没有goto?

答:java中goto作为保留字,但是不用。

3、说说&和&&的区别。

答:&和&&都是表示逻辑与的关系,等式两边都为true时候才为true,不然就为false,
&&有短路的功能,就是表达式前面如果为false,那么不用计算后面,这个等式一定为false,如果换成&,那么后面的会一直执行完
表达式if(str!=null&&!str.equals("")),如果str为null时候不会出现nullpointexception,如果换成&那就会出现空指针异常。
当表达式两边都不是boolean类型,&可以按位与操作

4、在JAVA中如何跳出当前的多重嵌套循环?

答:可以定义ok:然后再循环里面做一个条件限定用break跳出来,代码如下


System.out.println("begin>>>>>>>>");

ok:
for(int i=1;i<10;i++){
for (int j = 0; j < 10; j++) {
System.out.println("i="+i+"----------j="+j);
if(i==2&&j==3){
break ok;
}
}
}
System.out.println("end>>>>>>>>");


5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上?

答:能用在switch里面的有int,short,byte,还有一些枚举类型
switch(color)
{
case yellow:
color=yellow;
break;

case red:
red;
break;

case green:
color=green;
break;
}


6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

答:1.s1+1会自动升级为int类型,在赋值给s1时候就会出现错误
2.+=是java语言规定的一种运算符,java编译器会对其进行特殊处理,因此可以正确编译


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

答案:可以,而且可以存储刚好一个中文汉字!char c='中';

8、用最有效率的方法算出2乘以8等於几?

答案:

9、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

答:使用final关键字修饰一个变量时,引用变量不能变,但是引用的对象内容能变。

10、"=="和equals方法究竟有什么区别?

答案:String a=new String("abc");
String b=new String("abc");
==比较是内存中的对象地址,而equals比较的是对应对象字符串
a==b 得出的结果肯定是false,因为a和b是两个对象
a.equals(b) 的出的结果肯定是true,因为指向的字符串都是abc


11、静态变量和实例变量的区别?

答案:从语法上定义就是静态变量必须得加static关键字,而实例变量不需要加
静态变量就是常量,而实力变量仍然是变量

13、是否可以从一个static方法内部发出对非static方法的调用?

答案:不可以,因为static方法在调用时候不需要创建对象,而非static必须创建对象


14、Integer与int的区别

答案:int是基本类型,Integer是包装类型
int的默认值是0,Integer的默认值是null
Integer提供了多个与整数相关的方法,还可以将字符串转换成整数,例如:int i=Integer.getInteger("1");

15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

答案:Math提供了三种关于取整的方法,ceil、floor、round
ceil为向上取整
floor为向下取整
round为四舍五入,可以理解为Math.round(11.5+0.5)向下取整
所以结果为12,-11

16、下面的代码有什么不妥之处?
1. if(username.equals(“zxx”){} //正确的应为:if(“zxx”.equals(username)){}
2. int x = 1;
return x==1?true:false; //代码重复,可以简化代码为一句return true;


17、请说出作用域public,private,protected,以及不写时的区别
作用域 同类 同包 子孙类 不同包
public 是 是 是 是
protected 是 是 是 否
默认不写 是 是 否 否
private 是 否 否 否

18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

答案:Overload是方法重载,Override方法重写,也叫方法覆盖!!
Overloaded方法是可以改变返回值的类型的。
Overload是在同一类里面实现重载,Override主要是存在父子之间的关系!

19、构造器Constructor是否可被override?

答案:由于构造器不能被继承,所以不能被重写,但是可以被重载。
子类不会继承父类的构造方法,如果子类想要调用父类的构造方法,只能子类第一句用super()的方式调用。

20、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)?
抽象类中是否可以有静态的main方法?

答案:接口可以继承接口,抽象方法可以实现接口,抽象类可以继承集体类,抽象类可以有静态方法!
只有记住抽象类与普通类的唯一区别就是不能创

建实例对象和允许有abstract方法。

21、写clone()方法时,通常都有一行代码,是什么?

答案:clone是克隆的意思,那就是复制的意思,但是应该注意先克隆父类的内容,在复制子类的内容
第一行写super.clone();

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

答案:面向对象四大特征:封装,抽象,继承,多态!

封装:把对同一事物的操作的方法和变量放在一个类中,这就叫做封装
抽象:把事物具有相同属性和方法给抽离出来,这就叫做抽象
继承:子类继承父类
多态:父类的对象指向子类的引用

23、java中实现多态的机制是什么?

答案:比如说父类 动物类 Animal 子类 Dog Dog继承Animal
Animal animal=new Dog();
这就是父类的对象指向子类的引用,这就是多态

24、abstract class和interface有什么区别?

答案:1、一个类可以实现多个接口,但是只能继承一个抽象类
2、抽象类里面可以有抽象方法也可以有实例方法,但是接口里面全是抽象方法
3、抽象类里面可以有构造方法,但是接口里面不能有
4、抽象类中可以有普通成员变量,但是接口里面不能有
5、抽象类里面方法可以是public,protected,但是接口里面都是public并且默认的都是public abstract
6、抽象类中可以包含静态方法,但是接口中不包含
7、抽象类中可以有静态成员变量,可以使任意的public,protected,或者其他的,但是接口中只能是public static final

25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

答案:1、抽象方法不可以是static的,因为抽象方法是需要被子类实现的,而static与子类扯不上关系
2、native方法表示该方法要用另外一种依赖平台的编程语言实现的,不存在着被子类实现的问题,
所以,它也不能是抽象的,不能与abstract混用。
3、线程同步的对象是本身,但是抽象类不能创建对象,所以不行


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

答案:可以,只要不是静态内部类 ,没有什么限制
但是如果是静态内部类,这是一种特殊的内部类
这种内部类只能调用外部类里面的静态对象


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

答案:可以继承其他类或实现其他接口。不仅是可以,而是必须!

29、super.getClass()方法调用
下面程序的输出结果是多少?
import java.util.Date;
public class Test extends Date{
public static void main(String[] args) {
new Test().test();
}

public void test(){
System.out.println(super.g

etClass().getName());
}
}


答案:结果是Test,就是本身类名

答案解析:由于getClass()在Object类中定义成了final,子类不能覆盖该方法,所以,在
test方法中调用getClass().getName()方法,其实就是在调用从父类继承的getClass()方法,
等效于调用super.getClass().getName()方法,
所以,super.getClass().getName()方法返回的也应该是Test。

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

答案:不是,基本数据类型八种int,short,long,char,float,double,boolean,byte
String是引用数据类型

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

答案:String对象中的内容没有改变,只是s的指向一个为“Hello world!”的对象

32、是否可以继承String类?

答案:不能,因为String是final类所以不行

33、String s = new String("xyz");创建了几个String Object? 二者之间有什么区别?

答案:两个对象,一个对象时new String,还有一个是“xyz”,后面对象放在常量缓冲区,不管出现多少遍,都是从缓冲区拿

34、String 和StringBuffer的区别

答案:String字符串的内容不能被改变,但是StringBuffer字符串的值能被改变,

36、数组有没有length()这个方法? String有没有length()这个方法?

答案:数组没有length()方法但是有length属性,String有length()这个方法

37、下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";

答案:由于java编译器的原因,此代码就是String s="abcd";所以对象就一个

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

答案:
代码如下:public class Test1 {

static int test2(){
int x=1;

try {
System.out.println("进入try");
return x;
}
finally{
System.out.println("进入finally");
++x;
System.out.println(x);
}
}


public static void main(String[] args) {

System.out.println(Test1.test2());
}

}


测试结果如下: 进入try
进入finally
2
1

就是在return 中执行!!!



39、下面的程序代码输出的结果是多少?

public class smallT
{
public static void main(String args[])
{
smallT t = new smallT();
int b = t.get();
System.out.println(b);
}

public int get()
{
try
{
return 1 ;
}
finally
{
return 2 ;
}
}
}

最后打印值肯定是2

=========================38.39题注意==========================


40、final, finally, finalize的区别。

答案:final用于声明属性,方法还有类,修饰的属性是不能变的,修饰的方法是不能覆盖的,修饰的类是不能继承的。
内部类要访问局部变量,

局部变量要定义成final
finally在异常语句后面,表示总是执行
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,
可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用

41、运行时异常与一般异常有何异同?

答案:一般异常分两类,运行时异常和检查异常
运行时异常都是程序无法提前捕捉的异常,出现runtimeException异常时候,程序通常会停止运行
检查异常需要写一堆try..catch进行捕捉异常


42、error和exception有什么区别?

答案:error表示错误,表示程序无法自己出来的问题,比如内存溢出等等
exception表示设计或者一种实现问题,也就是说程序能正常执行,就不会发生情况

43、Java中的异常处理机制的简单原理和应用。

答案:1.在面向对象的世界中,异常也是一种对象,把所有的异常都封装在一个异常对象里面,然后处理
2.java对异常进行了分类,所有的java异常根类https://www.360docs.net/doc/ae18217462.html,ng.Throwable,这个类下面又派生了两个类
error,exception
3.java为系统异常和普通异常提供了不同的解决方案,编译器强制普通异常必须try..catch处理或用throws声
明继续抛给上层调用方法处理,所以普通异常也称为checked异常,而系统异常可以处理也可以不处理,
所以,编译器不强制用try..catch处理或用throws声明,所以系统异常也称为unchecked异常。

44、请写出你最常见到的5个runtime exception。

答案:nullpotinexception(空指针异常)
ClassCastException(类型转换异常)
IndexOutOfBoundsException(数组越界)
BufferOverflowException()
ArrayStoreException(数据存储异常,操作数组时类型不一致)
WebServiceException(web服务器异常)
EventException(事件异常)

45、JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?

答案:throws是获取异常
throw是扔出异常
try{ 括起异常}catch(){如果异常执行的代码}finally{无论是否异常,都会执行的代码}


46、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?

答案:两种方法,一个是继承Thread,一个是实现runnable
用关键字synchronized实现同步
反对使用stop(),是因为它不安全。suspend()方法容易发生死锁。

47、sleep() 和 wait() 有什么区别?

答案:sleep是线程类Thread的方法,导致其线程指定时间暂停,讲执行机会给其他线程,但是监控状态依然在,
直到时间结束后才继续执行。

调用sleep不会释放线程锁。wait是Object类的方法,对此对象调用wait会
导致本对象放弃线程锁,进入等待此对象的等待锁定池


48、同步和异步有何异同,在什么情况下分别使用他们?举例说明。

答案:同步就是:数据同时有人读入,有人写出,同时有人操作这个数据
异步就是:数据只能一个人操作,如果有一个人操作,另外一个人就不能操作

截取网上的理解例子:
你给你媳妇存钱,先查了一下是1000,你要存100,结果你存的时候你媳妇也正在取钱,她准备取100,
如果这个时候不思锁定其中一人的动作,后果就很 可能是,你媳妇取走了100,本来应该冲至账户金额为900,
待还没有重置,你的存动作就过来了,因为之前你那里得到的信息是1000所以存的时候是 1000+100,再以重置帐户,
变成1100了 而不是900
这就是同步(一个人占用了,我就不能再做了)

异步就是互不影响
ajax的第一个a就是异步,你一边浏览网页,后台一边和web服务器通信 检查你的用户名是否重复,但你却在前台根本看不出来
通俗解释
同步:必须保持相同步调。我在你前面就会始终在你前面,即使你跑的比我快又怎样,了不起啊,我有synchronized给我撑腰,你超我一个试试看,抽你丫的不可!

异步:(synchronized不知去向)你丫刚不是牛x吗?我还就超了你了,怎么招吧,你抽我一个看看,有本事冲这来!


50、多线程有几种实现方法?同步有几种实现方法?

答案:两种方法,继承Thread和实现runnable
同步的实现方面有两种,分别是synchronized,wait与notify
wait():使一个线程处于等待状态,并且释放所持有的对象的lock。
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,
而是由JVM确定唤醒哪个线程,而且不是按优先级。
Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

51、启动一个线程是用run()还是start()?

答案:start()方法


52、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

答案: 1.其他方法前是否加了synchronized关键字,如果没加,则能。
2.如果这个方法内部调用了wait,则可以进入其他synchronized方法。
3.如果其他个方法都加了synchronized关键字,并且内部没有调用wait,则不能。
4.如果其他方法是static,它用的同步锁是当前类的字节

码,与非静态的方法不能同步,因为非静态的方法用的是this。

53、线程的基本概念、线程的基本状态以及状态之间的关系

答案:一个线程就是执行的一段线索,一个程序可以同时执行多个线程,也就是多个线索
状态:就绪,运行,synchronize阻塞,wait和sleep挂起,结束。wait必须在synchronized内部调用。
调用线程的start方法后线程进入就绪状态,线程调度系统将就绪状态的线程转为运行状态,
遇到synchronized语句时,由运行状态转为阻塞,当synchronized获得锁后,由阻塞转为运行,
在这种情况可以调用wait方法转为挂起状态,当线程关联的代码执行完后,线程变为结束状态。

54、简述synchronized和java.util.concurrent.locks.Lock的异同 ?

答案:主要相同点:Lock能完成synchronized所实现的所有功能
主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。
synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。
Lock还有更强大的功能,例如,它的tryLock方法可以非阻塞方式去拿锁。



57、介绍Collection框架的结构

答案:集合框架(Collection Framework)泛指java.util包的若干个类和接口.
如Collection、List、ArrayList、,LinkedList、Vector(自动增长数组),HashSet、,HashMap等.


58、Collection框架中实现比较要实现什么接口

答案:comparable/comparator

























相关主题
相关文档
最新文档