1、一个“java”源文件中是否可以包括多个类(不是内部类)?有什么限制?
可以,但只能有一个public类,类的名字需要和文件名字一致。
2、Java有没有goto?
有goto关键词,但是不能使用。
3、说说&和&&的区别。
&是位运算符,&&是逻辑运算符。
&&又被称为短路运算符,当第一个条件不成立时不判断第二个条件。
4、在java中如何跳出当前的多重嵌套循环?
break 。
5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
byte可以,long不行,jdk1.7后String可以。(byte可隐性转换为int)
6、short s1 = 1;s1 = s1 +1;有什么错?short s1 = 1; s1 +=1;有什么错?
需先将1强行转换成short类型。
7、char 型变量中能不能存储一个中文汉字?为什么?
可以,char型变量用来储存Unicode编码的字符,Unicode编码的字符包含汉字。
8、用最有效率的方法算出2乘以8等于几?
2<<3 , 移位运算。
9、请设计一个一百亿的计算器
1)注意边界值关系,int最大值约为21亿(2的31次方)。
2)具备一定的面向对象的设计能力。
10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
引用的对象可以修改,引用不能变。
11、"=="和equals方法究竟有什么区别?
== : 比较两边数据引用是否相等。(通常用于8种基本类型)
equals : 比较两边数据的内容是否相等。(object类,如String)
12、静态变量和实例变量的区别?
语法上,静态变量需添加static关键词。
在程序运行时,使用实例变量先得创建实例对象,静态变量可直接通过类名引用。
13、是否可以从一个static方法内部发出对非static方法的调用?
不可直接调用,因非static方法必须通过对象调用。如果想要强行调用,需要在static方法内部初始化非static方法的实例。
14、Integer和int的区别?
Integer是包装类,int是基础类型。Integer常用于数据类型转化。
15、Math.round(11.5)等于多少? Math.round(-11.5)等于多少?
12,-11(long型)
ceil:向上取整。 floor:向下取整, round:四舍五入(算法为Math.floor(x+0.5),即Math.round(-11.6)的结果是-12)。
16、 请说出作用域public,private,protected 以及不写时的区别。
当前类 | 同一package | 子孙类 | 其他package | |
public | √ | √ | √ | √ |
protected | √ | √ | √ | |
friendly | √ | √ | ||
private | √ |
不写时默认frendly。
17、Overload 和 Override的区别。Overloaded的方法是否可以改变返回值的类型?
Overload:重载,方法名必须相同,其他至少有一样不同,可以改变返回至的类型。
Override:重写,方法名,参数,返回值都需要一样,修饰符不能比父类小。
18、构造器Constructor是否可被override?
不能被重写,但是可以被overload。
19、接口是否可继承接口?抽象类是否可实现接口?抽象类是否可继承具体类?抽象类中是否可以有静态的main方法?
接口可以继承接口,抽象类可以实现接口,抽象类可以继承具体类,抽象类可以有静态的main方法。
抽象类和普通类的唯一区别就是不能创建实例对象和允许有abstact方法。
20、写clone()方法时,通常都有一行代码,是什么?
super.clone(),因clone有缺省行为。
21、面向对象的特征有哪些方面?
抽象、继承、多态、封装。
22、java中实现多态的机制是什么?
关键词:override,overload,动态绑定。
23、abstract class 和 interface有什么区别?
语法上:- 抽象类表现出的是继承关系,一个类只能使用一次继承关系。一个类可以实现多个接口
- 抽象类可以有自己的数据成员,可以有非abstract方法。接口中只能有static final成员,所有方法也必须是abstract的。
设计上:抽象类更表现出继承的关系,而接口更像扩展关系。
24、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
abstract方法不能是static,native,synchronized和final。
25、什么是内部类?Static Nested Class 和 Inner Class的不同。
内部类是指一个外部类内部再定义一个类,类名可以与文件名不同。
Static 可通过外部类,内部类直接访问,Inner Class不能被外部类直接访问。
26、内部类可以引用它的包含类的成员吗?有没有什么限制?
可以,如果不是静态内部类那没限制。
如果是静态内部类,那只能访问包含类的静态成员。
27、Anonymous Inner Class(匿名内部类) 是否可以extends其他类,是否可以implements interface?
可以,而且要实现方法。
28、String是基本的数据类型么?
不是,8种基本数据类型是:byte,short,int,long,char,float,double,boolean。
29、String s = "Hello";s=s+"world!";这两行代码执行后,原始的String对象中的内容到底变了没有?
原始的String对象中的内容没变,但是s的引用已经变了。
30、是否可以继承String类?
String类是final类所以不能被继承。
31、String s = new String("xyz");创建了几个String Object?两者之间有什么区别?
1个或2个,当之前已经创建过xyz的对象时,那就是一个。如果没有,那就是2个。
xyz创建在常量池中,而s则创建作为引用引用至xyz。
32、String 和 StringBuffer的区别
String 不是数据基本类型,是不可变对象,是final类不可被继承。
StringBuffer是可变对象,只能通过构造函数对他进行赋值。
33、如何把一段逗号分隔的字符串转换成一个数组?
可以使用String类中的split方法,也可以使用StringTokenizer类的方法。
34、数组有没有length()这个方法?String有没有length()这个方法?
数组没有length()的方法,只有length的属性。String有length()的方法。
35、下面这个语句一共创建了多少个对象?String s="a"+"b"+"c"+"d";
一个对象。"a"+"b"+"c"+"d" 在编译时字符串常量相加已优化,无需等到运行期处理。
36、try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候执行,return前还是后?
运行,return后。
37、下面程序代码的输出结果是?
public class SmallT{
public int get(){
try{return 1;}
finally{return 2;}
}
public void static main(String args[]){
SmallT s = new SmallT();
int b = s.get();
System.out.println(b);
}
}
返回的结果是2。try中的函数先于finally中的函数,所以返回结果为2。
38、final,finally,finalize的区别?
final是类型,finally是异常处理结构的一部分,finalize是Object类的一个方法。
39、运行时异常和一般异常有何异同?
分为runtime exception和checked exception,runtime exception及运行时抛出的异常,如空指针异常。checked exception及编译时就需要处理的异常,如IO异常以及数据库异常。
40、java中的异常处理机制的简单原理和应用。
异常指java运行期间(非编译)所发生的非正常情况或错误。java对异常进行了分类,所有异常的根类为Throwable,Throwable派生出2个子类:Error和Exception。Error表示应用程序本身无法克服和恢复的问题,如内存溢出和线程死锁。Exception表示程序能克服和恢复的问题,其中又分为系统异常和普通异常。系统异常如:空指针异常,数组越界异常,类转换异常。普通异常是运行环境变化所导致的问题,如网络断线,硬盘空间不足。
java为系统异常和普通异常提供了不同就解决方案,编译器强制普通异常必须try,catch处理或throws声明抛给上层调用方法处理,所以普通异常也被称为checked异常。
41、请写出你最常见的5个runtime expection
类转换异常:ClassCastException。
空指针异常:NullPointerException。
数组越界异常:StringIndexOutOfBoundsException。
42、java异常处理关键词中,throws,throw,try,catch,finally分别代表什么含义?在try块中可以抛出异常么?
throw:抛出异常。
throws:捕获并抛出异常。
try catch:内部捕获异常并自定义处理。
finally:无论是否捕获异常都运行程序块。
在try块中可以用throw抛出异常。
43、java中有几种方法可以实现一个线程?用什么关键词修饰同步方法?stop()和suspend()方法为何不推荐使用?
继承Thread类型,实现runable接口。
使用synchronized关键词。
stop()不安全,会解除所有线程的锁定。suspend()容易发生死锁。
44、sleep()和wait()有什么区别?
进入同步锁后,Sleep()不会释放当前锁。而wait()会暂时释放当前锁等待唤醒。
45、同步和异步有何异同,什么情况下分别使用他们?
如果数据在线程间共享,那需要同步。
通常使用异步。
46、多线程有几种实现方法,同步有几种实现方法?
多线程:继承Thread类或实现Runnable接口。
同步:Synchronized,wait,notify。
47、启动一个线程用run()还是start()?
用start()。
48、当一个线程进入一个对象的一个Synchronized方法后,其他线程是否可进入此对象的其他方法?
(1)、其他方法前是否加了Synchronized关键词,如果没加则能。
(2)、如果这个方法内部调用了wait,则可以。
49、线程的基本概念、基本状态以及状态之间的关系。
一个程序有多条执行线索,一个线程就是一个执行线索。
状态:就绪,运行,未运行/阻塞/睡眠,
50、简述synchronized和java.util.concurrent.locks.Lock的异同?
相同点:Lock能完成synchronized所实现的功能。
不同点:Lock有比synchronized更精确的线程语义和更好的性能。