您的位置:首页 > 编程语言 > Java开发

Java基础知识总结

2014-03-12 11:11 211 查看
1、
面向对象的特征有哪些方面

(1)     抽象:忽略一个主题中与当前目标无关的那些方面,以便更充分的注意与当前目标有关的那些方面。

(2)     继承:允许类的重用,子类继承父类的方法和实例变量,子类可以修改或增加新的方法。

(3)     封装:隐藏对象的属性及实现细节,对外仅提供接口可见。

(4)    多态性:从相同的基类派生出来的多个派生类可被当作同一个类型对待,由于多态性,一个父类的引用变量可以指向不同的子类对象,并且在运行时根据父类引用变量所指向对象的实际类型执行相应的子类方法。

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

基本数据类型包括byte、int、char、long、float、double、boolean和short。

java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类。

3、
String 和StringBuffer的区别?int
和 Integer 有什么区别?

String类提供了数值不可改变的字符串,StringBuffer类提供的字符串可以修改。

Int是java的原始数据类型,Integer是java为int提供的封装类。

4、
运行时异常与一般异常有何异同?error和exception有什么区别?

一般异常就是我们经常遇到的IO异常、SQL异常等,需要我们手动的写try,catch来处理。

运行时异常是我们可以不处理,当出现这些异常时,总是由虚拟机接管,如空指针异常。

Error表示一种严重的问题,比如内存溢出。

Exception是一种实现问题,如果程序运行正常,就不会发生的情况。

5、
说出Servlet的生命周期,并说出Servlet和CGI的区别?

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。

与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

6、
说出ArrayList,Vector, LinkedList的存储性能和特性?

ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

7、
Collection 和 Collections的区别?

Collection是集合类的上级接口,继承与他的接口主要有Set 和List.

Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

8、&和&&的区别。

&和&&都可以用作逻辑与的运算符,表示逻辑与(and),&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,而&会计算第二个表达式,并且&还可以用作位运算符。

9、HashMap和Hashtable的区别?

他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。

10、final, finally, finalize的区别?

final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

finally是异常处理语句结构的一部分,表示总是执行。

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法。

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

sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

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

方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

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

     接口是特殊的抽象类,接口有一些抽象类没有的优势,就是多继承。但接口不可以有实现,而抽象类里面可以有方法的实现。

14、forward
和redirect的区别?

    forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。

    
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL。

 forward可以共享request里面的数据,而redirect不能共享数据.

15、short s1 = 1; s1 = s1 + 1;有什么错?
short s1 = 1; s1 += 1;有什么错?
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

    short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)

short s1 = 1; s1 += 1;(可以正确编译)

    Math.round(11.5)==12

Math.round(-11.5)==-11

16、String s = new String("xyz");创建了几个String
Object?

2个String Object, xyz编译的时候就存在于常量池,另一个new的时候产生。

17、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。

public class ThreadTest1{

private int j;

public static void main(String args[]){

ThreadTest1 tt=new ThreadTest1();

Inc inc=tt.new Inc();

Dec dec=tt.new Dec();

for(int i=0;i<2;i++){

Thread t=new Thread(inc);

t.start();

t=new Thread(dec);

t.start();

}

}

private synchronized void inc(){

j++;

System.out.println(Thread.currentThread().getName()+"-inc:"+j);

}

private synchronized void dec(){

j--;

System.out.println(Thread.currentThread().getName()+"-dec:"+j);

}

class Inc implements Runnable{

public void run(){

for(int i=0;i<100;i++){

inc();

}

}

}

class Dec implements Runnable{

public void run(){

for(int i=0;i<100;i++){

dec();

}

}

}

}

18、应用服务器有那些?

WebLogic、WebSphere、jBoss、Tomcat。

19、说出数据连接池的工作机制是什么?

    J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。

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

    数组没有length()这个方法,有length的属性。String有有length()这个方法。

21、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

   
switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。

22、请说出你所知道的线程同步的方法?

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

    sleep():使一个正在运行的线程处于睡眠状态。

    notify():唤醒一个处于等待状态的线程。

    Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

23、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?

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

同步的实现方面有两种,分别是synchronized,wait与notify。

24、JSP的内置对象及方法?

    request表示HttpServletRequest对象。

    response表示HttpServletResponse对象。

    out对象是javax.jsp.JspWriter的一个实例。

    pageContext表示一个javax.servlet.jsp.PageContext对象。

    session表示一个请求的javax.servlet.http.HttpSession对象。

    applicaton 表示一个javax.servle.ServletContext对象。

    config表示一个javax.servlet.ServletConfig对象。

    page表示从该页面产生的一个servlet实例。

25、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?

     JSP是Servlet技术的扩展,本质上是Servlet的简易方式,Servlet和JSP最主要的不同点在于,JSP侧重于视图,Servlet主要用于控制逻辑。

26、XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?

     两种形式 dtd schema。

     本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发展schema的根本目的)。

     有DOM,SAX。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java基础知识