第一:
1.String是最基本的数据类型么?
答:不是。基本的数据类型包括:byte,int,char,long,float,double,boolean和short.
java.lang.String类是final类型的,因此不可以继承这个类,不能修改这个类。
2.静态变量和实例变量的区别?
答:static i = 10 ;//常量
class A a; a.i = 10 //可变
3.是否可以从一个static方法内部发出对非static方法的调用?
答:不可以。不能保证对象的初始化。
4.描述一下JVM加载class文件的原理机制?
答:JVM就是JAVA虚拟机。相当于JAVA语言和用户平台交互的接口。JVM里中类的装载是用ClassLoder和它的子类来实现的。这个类是java运行中的一个重要组件。负责运行时装载类文件和查找功能。
5.&与&&的区别?
答:&是位运算符,表示按位与运算;
&&是逻辑运算符,表示逻辑于。
6.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
答:不能作用在long和String,能作用在byte上。swtich(exprl)中,exprl是一个整数表达式。因此传递给switch和case语句的参数应该是int,shot,char或者byte。也就说谁可以和int相互转换,那么就可以用它。
7.Math.round(11.5)等于多少?Math.round(-11.5)等于多少?
答:12 和 -11.
8.heap和stack有什么区别?
答:栈是一种线性集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。堆是栈的一个组成元素。(栈一般存放一些固定大小的元素,比如基本数据类型。堆里面放对象,数组等可变的元素。)
9.怎样用最有效率的方法算出2乘以几等于16?
答:2<<3.或者16>>1.
10.简述逻辑操作(&,|,^)与条件操作(&&,||)的区别?
答:两点:a.条件操作只能操作布尔型,而逻辑操作不仅可以操作布尔型,而且可以操作数值型。b逻辑操作不会产生短路。
11.String s = new String("xyz");创建了几个String Object?
答:两个对象。new String() 和 "xyz";
12.short sl = 1; sl = sl + 1; 有什么错?short sl = 1; sl + = 1 ; 有什么错?
答:数据类型转换问题。sl+1运算结果是int型,需要强制转换。否则出错。而第二个可以正确编译。
13.写clone()方法时,通常都有一段代码,是什么?
答:clone()有缺省行为,super.clone();它负责产生正确大小的空间,并逐位复制。
14.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
答:可以。必须只有一个类名与文件名相同。
15.在java中,如何跳出当前的多重嵌套循环?
答:用break ,return,加标号。
16.int 和 Integer有什么区别?
答:int是8种数据类型中的一种;而Integer是一个封装类。JDK1.6以后Integer可以自动转换成int。
17.char型变量中能不能存储一个中文汉字?为什么?
答:可以。因为JAVA中是以unicode编码,一个char占16字节,而一个中文占2字节。
18.数组有没有length()这个方法?String有没有length()这个方法?
答:数组中没有这个方法,只有length属性。String有这个方法。
19.String 和 StringBuffer的区别?
答:区别是String类提供了数值不可改变的字符串。而StringBuffer类提供的字符串是可变的。也就可以动态构造字符数据。同时也稍微提升了效率并且节省了空间。
第二:
1. 是否可以继承STRING类?
答:不可以。因为String类是final类型的。
2. 说出一些常用的类、包、接口。请各举5个常用的类:
答:类:BufferedReader BufferedWriter FileReader FileWriter String Integer
包:java.lang java.awt java.io java.util java.sql
接口:Remote List Map Document NodeList
3. ERROR和EXCEPTION有什么区别?
答:error是不可恢复的严重问题,程序没办法处理。比如说内存溢出。Exception是设计或者实现的问题。程序正常的话不会出现。
4. 运行时异常与一般异常有何异同?
答:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的一场,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行异常,但是并不要求必须声明抛出。
5. 给我一个你最常见到的RUNTIME EXCEPTION。
答:
ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
6. TRY {}里有一个RETURN语句,那么紧跟在这个TRY后的FINALLY {}里的CODE会不会被执行,什么时候被执行,在RETURN前还是后?
答:会。在return前执行。
7. JAVA中的异常处理机制的简单原理和应用。
答:当java程序违反了java 的语义规则时,java虚拟机就会将发生的错误表示一个异常。违反语义规则包括2种情况。一种是java类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException,访问null的对象时会引发NullPointerException。另一种情况是java允许程序员扩张这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。防止内存泄露。
8. 说出ARRAYLIST,VECTOR, LINKEDLIST的存储性能和特性
答:ArrayList Vector 都是使用数组方式存储数据,此数组元素大于实际存储的数据以便增加和插入元素,他们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以所以索引数据快而插入数据慢,Vector由于使用了线程安全,所以性能较差。
LinkedList使用双向链表变现存储,按序号索引数据需要进行前向和后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
(数组方式存储数据在内存中的空间是连续的。而双向链表存储数据空间是随便的。可以从查找数据方面入手,比较它们的不同:检索数据时候ArrayList Vector的方式很快。而LinkedList查找数据不方便,但是插入,删除等操作时很快,可以自己思考一下。)
9. COLLECTION 和 COLLECTIONS的区别?
答:Collection是结合类的上级接口,继承与它的接口主要有set和list。
Collection是针对结合类的一个帮助类,或叫工具类。它提供了一系列的静态方法实现对各种集合的搜索,排序,线程安全化等操作。
10. LIST, SET, MAP是否继承自COLLECTION接口?
答:list , set 是。而map不是。(map和collection是同级的接口)
11. LIST、MAP、SET三个接口,存取元素时,各有什么特点?
答:List以特定次序来持有元素,可以有重复元素。Set无法拥有重复元素,内部排序。Map保存key-value值,value可多值。(key和value都是object类型的)
12. 你所知道的集合类都有哪些?主要方法?
答:最常用的集合类是List Set和 Map 。List 的具体实现包括ArrayList 和 Vector,它们是可变大小的列表,比较适合构建,存储和操作任何类型对象的元素列表。List使用于按数值索引访问元素的情形。Map提供了一个更通用的元素存储方法。Map集合类用于存储元素对(称作"键"和"值"),其中每个键映射到一个值。
13. 请说一下ARRAYLIST和VECTOR的区别。
答:一 同步性:Vector是线程安全的,同步的。而ArrayList是线程不安全的。
二 数据增长:当需要增长时,Vector默认增长为原来一倍,而ArrayList是原来的一半。如果涉及到堆栈,队列等操作,应该考虑用Vector,如果需要快速随机访问元素,应该使用ArrayList。
14. HASHMAP和HASHTABLE的区别。
答:HASHMAP是HASHTABLE的轻量级实现(非线程安全的实现),它们都实现了MAP接口,主要却别在于HASHMAP允许空键值,效率比HASHTABLE高。HASHMAP允许将null作为一个entry的key或者value,而HASHTABLE不允许。HASHMAP把HASHTABLE的contains方法去掉了,改成containsvalue和containsKey了。HASHTABLE继承自Dictionary类,而HASHMAP是java1.2引进的Map interface的一个实现。
15. 请说一下HASHMAP和HASHTABLE的区别。
答:1.Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类。
2.HashTable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。
3.在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。
16. 两个对象值相同(X.EQUALS(Y) == TRUE),但却可有不同的HASH CODE,这句话对不对?
答:不对。有相同的hash code。
17. JAVA中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
答:两种。字节流和字符流。字节流继承自InputStream OutputStream ,字符流继承自InputStreamReader OutputStreamWriter。
18. SET里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是EQUALS()? 它们有何区别?
答:用iterrator()方法来区分重复与否。equals()是判断两个Set是否相等。
(equals()和==方法决定引用值是否指向同一对象。equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。)
19. 线程的基本概念、线程的基本状态以及状态之间的关系?
答:线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身。
20. JAVA线程中有哪四种状态?
答:运行,就绪,等待,结束。
21. 多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?
答:两种。一种是:继承Thread;还有是实现Runnable接口。同步的实现有两种,分别是:synchronized(关键字),wait(等待)与notify(唤醒)。
第三:
1.当一个线程进入一个对象的一个synchronized方法后,其他线程是否可以进入此对象的其他方法?
答:不可以。一个对象的一个synchronized方法只能有一个线程访问。
2.请说出你所知道的线程同步的方法?
答:wait()使一个线程处于等待状态,并且释放所持有的对象的lock。
sleep()让一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉interruptedException异常。
notify()唤醒一个处于等待状态的线程,注意的是用在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个县城,而且不是按优先级。
Allnotify()唤醒所有处于等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。
3.JAVA中用什么关键字修饰同步方法?stop()和suspend()方法为什么不推荐使用?
答:用synchronized关键字修饰同步方法。
stop()方法不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯的状态,那么其他线程就能检查和修改它们。结果很难检查出问题所在。
suspend()方法会导致"死锁"。它使目标线程停下来,但却依然持有这之前的锁定。此时,其他线程不能访问锁定的资源,除非被"挂起"的线程恢复运行。对任何线程来说,如果它们像恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成"死锁"。
所以不应该用suspend(),而应在自己的Thread类中置入一个标志,指出线程应该活动还是挂起。若标志指出线程应该挂起,那么就用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。
4.sleep()和wait()有什么区别?
答:sleep()是线程类Thread的方法。此方法作用是:线程暂停并可以指定时间,把执行机会给其他线程,但是监控状态保持,到时间就自动恢复。调用此方法不会释放对象锁。
wait()是Object类的方法,对此对象调用wait方法会导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或者notifyAll)后本线程进入对象锁定池准备获得对象锁进入运行状态。
5.final finally finalize的区别?
答:final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finnaly是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾回收器执行的时候会被调用此方法。
6.overload 和 override的区别是?overloaded的方法是否可以改变返回值的类型?
答:overload是重载,override是重写。都是java多态性的不同表现。重写是父类与子类之间的多态表现,重载是一个类中多态的表现。如果子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写。子类的对象使用这个方法时,将调用子类中的定义。如果一个类中定义了多个同名的方法,它们有着不同的参数列表,那么称为方法的重载。重载的方法是可以改变返回值的类型。
7.abstract class 和 interface 有什么区别?
答:前者是抽象类,后者是接口。抽象类是可以被继承的,但是要把所有的方法都实现。
8.anonymous inner class(匿名内部类)是否可以extends(继承)其他类?是否可以implements (实现)interface(接口)?
答:都是可以的。
9.static nested class 和 inner class 的不同?
答:static nested class 是声明为静态的内部类。
10.接口是否可继承接口?抽象类是否可实现接口?抽象类是否可继承实体类(concrete class)?
答:可以。可以。可以(所有的类都继承Object类)。
11.请用递归编写的函数来计算N的阶乘?
答:public class Test {
public static void main(String[] args) {
int n = 5;
System.out.println(method(n));
}
public static int method(int n) {
int re = 1;
if(n <= 1) {
return 1;
} else {
return n*method(n-1);
}
}
}
12.构造器constructor是否可被override?
答:构造器不可以被重写,继承。但是可以重载。
13.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
答:值传递。java中只有值传递。
14.写一个single。
答:第一种方法:
class TestSingle{
private static final TestSingle single = new TestSingle();
public static TestSingle getSingle(){
return single;
}
private TestSingle(){}
}
第二种方法:
public class Singleon{
private static Singleton instance = null;
public static synchronized Singleton getIntance(){
if(instance==null){
instance = new Singleton();
return instance;
}
}
private Singleton(){}
}
15.GC是什么?为什么有GC?
答:GC是垃圾收集的意思(Gabage Collection),java提供的GC功能可以自动检测对象是否超过作用域,从而达到自动回收内存的目的。
16.垃圾回收的优点和原理。并考虑两种回收机制?
答:java语言中一个显著的特点就是引入垃圾回收机制。使得java程序员在编写程序的时候不需要考虑内存管理。java中的对象不再有"作用域"的概念,只有对象的引用才有"作用域"。垃圾回收机制可以有效的防止内存泄露,有效使用内存。通常它作为一个单独的低级别的线程运行,不可预知情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时调用垃圾回收机器对某个对象回收。(回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收)
17.垃圾回收机制可以马上回收内存么?有什么办法主动通知虚拟机进行垃圾回收呢?
答:不可以。垃圾回收机制在java中不保证什么时候一定会执行。它的线程级别很低,只能不定时的回收。程序员可以通过System.gc()通知JVM的GC运行,同样不保证一定执行。
18.java语言如何进行异常处理,关键字:throws throw try catch finally分别代表什么意义?在try块中可以抛出异常么?
答:throws用来声明一个函数可能抛出各种异常。
throw语句用来明确抛出一个异常。
try.....catch finally是一段捕捉异常的代码块。try来指定一段程序,如果有异常,会在catch里捕捉到。而finally是缺省处理。为了确保一段代码不管发生什么都执行的。
19.java中实现多态的机制是什么?
答;多态表现在重写(Overriding)和重载(OverLoading)。重写是父类与子类之间的多态表现。重载是一个类的多态表现。
20.面向对象的特征有哪些方面?
答:
a. 抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
b. 继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增 加新的方法使之更适合特殊的需要。
c. 封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
d. 多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。