java面试宝典.docx
《java面试宝典.docx》由会员分享,可在线阅读,更多相关《java面试宝典.docx(17页珍藏版)》请在冰豆网上搜索。
java面试宝典
1、get请求和post请求有什么区别?
(1)get是从服务器获取数据,post是向服务器提交数据
(2)get将数据按照variable=value的形式,加在URL的后面,中间用“?
”连接,各个变量之间用“&”连接,而post不是
(3)post安全性比get要高
(4)get比post执行效率要高
2、重定向redirect和转发forward有什么区别?
(1)forward是服务器内部重定向,程序收到请求后重新定向到另一个程序,客户机并不知道;redirect则是服务器收到请求后发送一个状态头给客户,客户再请求一次,所以多了两次网络通信的来往
(2)forward后地址栏显示的信息不改变,redirect后开始了一个新的Http请求,因此地址栏是redirect后的地址
(3)forward保存了相关的状态信息,而redirect不保存信息
3、整理出JSP页面的9大内置对象。
(1)请求对象:
request
(2)相应对象:
response
(3)页面上下文对象:
pageContext
(4)会话对象:
session
(5)应用程序对象:
application
(6)输出对象:
out
(7)配置对象:
config
(8)页面对象:
page
(9)例外对象:
exception
4、int和Integer有什么区别?
(1)int是基本数据类型,Integer是引用类型
(2)int是Java的原始数据类型,Integer是Java为int提供的封装类
(3)int的变量不需要实例化,Integer的变量需要实例化
(4)int的默认值为0,Integer的默认值为null
(5)int一般做数值参数,Integer一般做类型转换
(6)Map的key与value,List与Set的element若要保存数值信息要把int包装成Integer使用
(7)int不适合作为web层的表单数据类型
5、方法重写和方法重载有什么区别?
(1)方法重载发生在同一个类的内部方法内,方法重写发生在继承关系中,子类重写父类的方法
(2)方法重载不要求方法的返回类型是否一致,方法重写要求方法的返回类型必须一致
(3)方法重载要求方法的参数签名不能一致,方法重写要求方法的参数签名必须一致
(4)方法重载对方法的修饰符权限没有限制,方法重写要求子类方法的修饰符权限不能小于父类
6、error和exception有什么区别?
Error表示系统级的错误和程序不必处理的异常
Exception表示需要捕捉或者需要程序进行处理的异常
7、接口和抽象类的区别
(一)
1)抽象类可以提供某些方法的部分实现,而Java接口不可以(就是interface中只能定义方法,而不能有方法的实现,而在abstractclass中则可以既有方法的具体实现,又有没有具体实现的抽象方法)
2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是publicstaticfinal类型的;
3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。
5)在抽象类中,如果方法没有具体实现(就是方法后面没有{}),那么必须加上abstract来声明这个方法,而接口中不需要使用abstract来声明。
8、面向对象的特点
(二)就记着几个词就行,剩下的念念
(1)抽象:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。
抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。
抽象包括两个方面,一是过程抽象,二是数据抽象。
(2)继承:
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。
对象的一个新类可以从现有的类中派生,这个过程称为类继承。
新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。
派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
(3)封装:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。
面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
(4)多态性:
多态性是指允许不同类的对象对同一消息作出响应。
多态性包括参数化多态性和包含多态性。
多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
9、String能不能被继承?
为什么?
(三)
String不能被继承。
原因:
(1)String是作为基本数据类型设计的,就像int什么的一样,并且是final类型的。
(2)String是传值的而不是传引用,如果可以继承,在处理传值传引用问题和副本构
造等问题的时候就会造成不必要的麻烦。
比方String是传值的,你构造了一个类,是String的子类,按道理用户自
定义类都是传引用的,但是你的父类确是传值,矛盾。
10、String和StringBuffer有什么区别?
(四)
String和StringBuffer的区别?
String:
(1)提供数值不可改变的字符串
(2)String是final类,不可被继承
(3)对于已经存在的String对象的修改,需要重新创建一个新对象,然后将新的值保存进去
StringBuffer:
(1)是可变的字符序列
(2)修改时通过构造函数来建立
11、ArrayList、LinkedList和Vector有什么异同(五)
答:
(1)内部实现机制
Vector和ArrayList的数据结构是基于数组的,数组是可变长度的,如果集合中的元素的数目大于目前集合数组的长度时,vector会自动增长原来一倍的数组长度,而arraylist增长率为目前数组长度的50%;LinkedList是基于链表结构的。
(2)同步性(线程安全性)
Vector是同步的,线程安全;ArrayList和LinkedList是不同步的,线程不安全。
(3)查找和增删数据
三者相比较下,ArrayList查找速度快,增删速度慢;Vector的情况与ArrayList情况类似,适合用于查找;LinkedList增删速度快,查找速度慢,适合用于增删数据。
12、HashMap和HashTabel有什么异同(六)
答:
相同点:
HashMap和Hashtable都实现了Map接口;
不同点:
主要的区别有:
线程安全性,同步,速度;
1.HashMap可以接受为null的键值(key)和值(value),而Hashtable则不行;
2.HashMap是非synchronized,而Hashtable是synchronized;
3.Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢;
4.HashMap不能保证随着时间的推移Map中的元素次序是不变的。
13、如何创建一个线程类(七)
1、第一种方法
定义一个线程类,它继承类Thread并重写其中的方法run()。
启动线程:
(1)、创建线程类的对象
(2)、对象.start();启动线程
2、第二种方法
提供一个实现接口Runnable的类作为线程的目标对象[线程体],在初始化一个Thread类或者Thread子类的线程对象时,把目标对象传递给这个线程实例,由该目标对象提供线程体。
启动线程:
(1)、创建线程类对象
(2)、创建Thread对象并将线程类对象当罪参数传入
(3)、Thread对象.start(),启动线程对象。
14、final都可以修饰什么?
不可以和什么修饰符一起使用?
(八)
final可以修饰什么?
答:
1、final修饰类,类不能被继承,没有子类,final类中的方法默认是final的。
2、final修饰方法,方法不能被子类的方法覆盖,但可以被继承。
3、final修饰变量,变量表示常量,只能被赋值一次,赋值后值不再改变。
4、当函数参数为final类型时,你可以读取使用该参数,但是无法改变该参数的值。
5、final不能用于修饰构造方法。
final不可以和什么修饰符一起使用?
答:
1、final不能与abstract修饰符一起使用,abstract修饰的类或者方法都是抽象的,需要子类继承,和在子类中重写其抽象方法,与final用法冲突
15、static关键字要注意什么?
(九)
1).静态方法
通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法
声明为static的方法有以下几条限制:
·它们仅能调用其他的static方法。
·它们只能访问static数据。
·它们不能以任何方式引用this或super。
2).静态变量
声明为static的变量实质上就是全局变量。
当声明一个对象时,并不产生static变量的
拷贝,而是该类所有的实例变量共用同一个static变量。
静态变量与静态方法类似。
所
有此类实例共享此静态变量,也就是说在类装载时,只分配一块存储空间,所有此类的
对象都可以操控此块存储空间,当然对于final则另当别论了
3).静态类
通常一个普通类不允许声明为静态的,只有一个内部类才可以。
这时这个声明为静态的内部类可以直接作为一个普通类来使用,而不需实例一个外部类。
4).static和final一块用表示什么
staticfinal用来修饰成员变量和成员方法,可简单理解为“全局常量”!
对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
对于方法,表示不可覆盖,并且可以通过类名直接访问。
5).static对象可以在它的任何对象创建之前访问,无需引用任何对象.
6.)static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用
7).因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。
2015-10-14
16、抽象类为什么不能被创建对象?
(十)
不能。
因为:
(1)抽象类不可以直接实例化,只可以用来继承;
(2)抽象类中拥有抽象方法,只有声明,没有定义;
17、static方法中为什么不能使用非静态变量和对象?
(十一)
答:
static方法是静态方法,是属于类的,不是属于对象;
静态方法可以在没有创建实例时使用,而申明为非静态的成员变量时一个对象属性,它只有在对象存在时引用,因此如果在对象为创建实例时我们在静态方法中调用了非静态成员方法自然是非法的。
18、一个".java"源文件中是否可以包括多个类(不是内部类)?
有什么限制?
可以,但是只能有一个类用public修饰,并且用public修饰的类名与文件名要一致
19、&和&&的区别。
&和&&都可以用作逻辑与;
&&还具有短路功能,即如果第一个表达式的结果为false,则不再计算第二个表达式;
&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作。
20、Java有没有goto?
java中的保留字,现在没有在java中使用。
21、在JAVA中,如何跳出当前的多重嵌套循环?
break+变量控制与return
22、switch是否能作用在byte(拜特)上,是否能作用在long上,是否能作用在String上?
Switch可以作用在int上,而byte可以隐式转换为int所以能作用在byte上