java,
java,
1 String 和StringBuffer的区别
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。String类提供的数值不可改变的字符串。StringBuffer类提供的字符串进行修改。当知道字符数据要改变的时候你就可以使用StringBuffer,可以使用StringBuffers来动态构造字符数据。
2 说出Servlet的生命周期,并说出Servlet和CGI的区别。
(1)Servlet被服务器实例化后,容器运行其init方法
(2)请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,
(3)当服务器决定将实例销毁的时候调用其destroy方法。
与cgi的区别在于servlet处于服务器进程中,它通过
(1)多线程方式运行其service方法,一个实例可以服务于多个请求 而CGI对每个请求都产生新的进程,
(2)servlet其实例一般不会销毁,CGI服务完成后就销毁,所以效率上低于servlet。
3 HashMap和HashTable区别
(1)HashMap允许一个null键,多个null值; HashTable的键和值均不允许为null。当get()方法返回null值时,即可以表示HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判断
(2)都实现Map接口,HashTable是Dictionary的子类。
(3)HashTable是同步的;HashMap通过Collections的同步方法得到同步。Map Collections.synchronizedMap(Map m)
这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。
4 线程状态(http://lavasoft.blog.51cto.com/62575/27069)
1、新建状态(New):新创建了一个线程对象。
2、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。
3、运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。
4、阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:
(一)、等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入等待池中。
(二)、同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。
(三)、其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
5、死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。
5 Overload和Override的区别
(1)Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
(2)如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
6 抽象类和接口的区别
1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。
2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。
3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。
4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。
7.接口中的方法默认都是 public,abstract 类型的。
7 Static Nested Class 和 Inner Class的区别?
8 switch (exp) exp的类型可以是 byte, short, char,int 和枚举类型,long 和 String 不可以。
9 short s1 = 1; s1 = s1 + 1;有什么错?
short s1 = 1; s1 += 1;有什么错? short s1 = 1; s1 = s1 + 1;
(s1+1运算结果是int型,需要强制转换类型)
short s1 = 1; s1 += 1;(可以正确编译)
10 float型float f=3.4是否正确? 答:不正确。精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4
11 方法名是否可以与构造器的名字相同? 答案:可以。
public class Test {
public Test(String iceboy) {
System.out.println(iceboy);
}
public void Test(String iceboy) {
System.out.println(iceboy);
}
public static void main(String[] args) {
Test a = new Test("abc");// 输出“abc”
a.Test("iceboy");// 输出“iceboy”
}
}
12 选择语句case中,允许使用的值有哪些? 答案:int,short,char,byte(都在int范围之内,且是整数)
13 if(-0.0 == 0.0)是相等还是不等? 答案:相等。
if (new Float(-0.0).equals(new Float(0.0))) // 不相等
if (new Float(0.0).equals(new Float(0.0))) // 相等
14 一个抽象类是否可以没有抽象方法? 答案:可以。
15
相关文章
- 暂无相关文章
用户点评