面试题总结(一)

来源:互联网 发布:lewin'gene知乎 编辑:程序博客网 时间:2024/05/22 14:52

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

可以有多个类,但只能有一个与文件名相同的public

2Java有没有goto? 

Goto java中的保留字。

3、说说&&&的区别。 

&&&都可做逻辑运算符,只有当算是两边都是true结果才为true,否则结果为false

&&的作用是当左边表达式为false的时候不再进行右边的表达式,只有当左边为true的时候才进行右边的表达式

&作为位运算符当两边表达式不是boolean的时候,&表示按位与操作

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

 使用break跳出当前循环

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

switch的默认数据类型是intbyte转换int是自动转换转换,而longString是强制转换,所以,switch只能做用在byte上,不能做用在longString

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

前面会报强制类型转换错误,后面的正确编译

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

 能储存,因为char用来存储unicode编码字符,unicode字符长度为2位,中文汉字也是两位,所以只要是unicode编码字符中有的中文都能储存

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

2<<3,2乘以8相当于二进制的2想左移3位,所以是2<<3

9、请设计一个一百亿的计算器

想要设计一个百亿计算器,先考虑结果在哪个数字类型中可以储存,然后才能进行设计,只有long类型的变量可以存储百亿,所以只能使用long类型的变量来接收

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

Final修饰的引用变量不可变,引用对象可以改变

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

==判断基本数据类型和引用数据类型的地址值是否相等,equals判断字符串和引用数据类型地址指向的空间里面的值是否相等

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

实例变量需要创建实例对象才可以使用,静态变量直接就可以使用,静态变量前面要加static,静态变量是类变量,存储在全局数据区,实例变量是对象属性

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

不可以,因为创建static方法不用实例对象,而没有实力对象的情况下是不能调用非static方法的

14、Integerint的区别

Integerint的封装类,int默认值为0integer默认值为nullinteger可以区分值为0null的区别

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

Math.Round方法是四舍五入,加上0.5然后向下取整,所以Math.round(11.5)值是12Math.round(-11.5)值是11

17、请说出作用域publicprivateprotected,以及不写时的区别

Public修饰的时候,什么情况下都可以调用,protected修饰,只能在同包、同类或者父子级关系中可以用,缺省修饰是在同包或同类中才可以使用,private修饰,只有在同一类中才可以使用

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

Overload是重载,是一个方法中可以有多个相同名字的方法但是参数列表不同

Override是重写,子类重写父类的方法,方面名和参数列表相同,方法体不同

在参数列表相同的情况下不可以改变返回值类型

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

构造器Constructor不能被继承,所以不能重写Override,但可以被重载Overload

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

接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承具体类。抽象类中可以有静态的main方法

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

clone 有缺省行为

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

封装:把一些属性和方法封装在一个类中,使它变成私有的,只能通过方法来访问

继承:子类继承父类,把父类的方法当作自己的方法使用,也可以重写父类方法

多态:方法的多态,重载和重写,对象的多态,向上和向下转型

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

父类或接口定义的引用变量可以指向子类或具体实现类的实例对象

24、abstract classinterface有什么区别? 

抽象类可以有构造方法,接口中没有

抽象类中可以有普通成员变量,接口中没有

抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的

抽象类中的抽象方法的访问类型可以是publicprotected默认缺省,但接口中的抽象方法只能是public类型的

抽象类中可以包含静态方法,接口中不能包含静态方法

抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型

 一个类可以实现多个接口,但只能继承一个抽象类

26、什么是内部类?Static Nested ClassInner Class的不同。

内部类就是在一个类的内部定义的类,内部类中不能定义静态成员,内部类可以直接访问外部类中的成员变量,内部类可以定义在外部类的方法外面,也可以定义在外部类的方法体中,在方法体外面定义的内部类的访问类型可以是public,protecte,默认的,private4种类型,在方法体内部不可以有访问控制符

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

可以,当内部类为静态的时候,只可以访问外部类中的静态属性

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

可以继承其他类或实现其他接口

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

不是,基本数据类型是byteintcharlongfloatdoublebooleanshort

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

没有改变,只是重新声明了一块内存空间

32、是否可以继承String? 

String类是final修饰的类,不可以被继承

34、String StringBuffer的区别

String值不可变,Stringbuffer值可变,String修改后是重新声明一块内存空间进行储存,原空间的值不变,Stringbuffer改变是直接在原空间里面修改值

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

数组没有length()方法,有length属性,Stringlength()方法

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

一共创建”a”,”b”,”c”,”d”,”abcd”五个对象

40、final, finally, finalize的区别。 

Final修饰属性,属性不可变,修饰方法,不可被重写,修饰类,不可被继承

Finally是异常,在finally里面的语句必定被执行

Finalizejava垃圾处理机制里面的

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

运行时是在运行之后报的错,像除数为零这样的异常,一般异常是写代码时遇到的代码报的错误,需要捕获处理的

42、errorexception有什么区别? 

Error是程序异常不可恢复的异常,如内存溢出等异常,exception是程序可恢复的异常,如下标越界等异常

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

java遇到异常会产生一个异常对象,生成的异常对象传递给JRE的过程叫做抛出异常,

JRE得到异常会先寻找解决此异常的代码,JRE会把异常对象交给这个方法来处理,这个过程叫做捕获异常,如果找不到捕获异常的方法,JRE会停止运行

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

数组下标越界异常(ArrayIndexOutOfBoundsException),算数异常(ArithmeticException),空指针异常(NullPointerException),类转换异常(ClassCastException),文件找不到异常(FileNotFoundException),方法找不到异常(NoSuchMethodException)

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

throws捕获并向外抛出异常
throw抛出异常
try catch是内部捕获异常并做自定义处理
finally是无论是否有异常都会被处理的语句

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

有两种实现方法,分别是继承Thread类与实现Runnable接口通过start()方法启动

synchronized关键字修饰同步方法

反对使用stop(),是因为它不安全,suspend()方法容易发生死锁

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

Sleep()方法是让当前线程停止运行一定时间,让出cpu

wait():使一个线程处于等待状态,并且释放所持有的对象的lock

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

如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。

当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。

 

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

多线程有两种实现方法,分别是继承Thread类与实现Runnable接口

同步的实现方面有两种,分别是synchronized,waitnotify

wait():使一个线程处于等待状态,并且释放所持有的对象的lock

sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。

notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。

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

启动一个线程是调用start()方法

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

1.其他方法前是否加了synchronized关键字,如果没加,则能。

2.如果这个方法内部调用了wait,则可以进入其他synchronized方法。

3.如果其他个方法都加了synchronized关键字,并且内部没有调用wait,则不能。

4.如果其他方法是static,它用的同步锁是当前类的字节码,与非静态的方法不能同步,因为非静态的方法用的是this

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

线程就是程序中的一条执行线索,每个线程上都关联有要执行的代码

状态:就绪,运行,synchronize阻塞,waitsleep挂起,结束。wait必须在synchronized内部调用。

 

54、简述synchronizedjava.util.concurrent.locks.Lock的异同 ? 

相同点:Lock能完成synchronized所实现的所有功能

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

 

 

原创粉丝点击