Java基础的面试题(我面试的总结)

JAVA基础的面试题

1.&和&&的区别?
答:&和&&表示逻辑运算符,表示逻辑与(and),当两边结果为true时,结果就为true。
&&还具备短路功能,如果第一个为false,则不会继续执行下去,eg:if(str != null && str.equals(“”))的表达式,当str为null的时候,后面表达式不会执行,所以不会引发NullPointerException,如果&&换成&的时候,则会抛出空指针异常。

2.Override和Overload的区别?
答:Overload为方法重载,在同一个类里面,方法名相同,形参不同。
Override:方法重写,方法名和形参相同,访问权限比父类更大,抛出的异常跟父类相同或是父类的子类,返回值类型跟父类一样,或是比父类小。

3.String和StringBuffer和StringBuilder的区别?
答:String是不可变的对象,每次操作都会产生新的String对象,而StringBuffer和StringBuilder可以在原有对象的基础上进行操作,所以在经常改变字符串的情况下不要使用String。
StringBuffer和StringBuilder的区别在与,StringBuffer是线程安全的,StringBuilder是非线程安全的,但效率比StringBuffer快,单线程使用StringBuilder,多线程使用StringBuffer。

4.String类常用什么方法?
答:indexOf():返回指定字符的索引。
charAt():返回指定索引处的字符。
repalce():字符串替换。
trim():去除字符串两端的空白。
split():分割字符串,返回一个分割后的字符串数字。
getBytes():返回字符串的byte类型数组。
length():返回字符串长度。
toLowerCase():将字符串转成小写字母。
toUpperCase():将字符串转成大写字母。
substring():截取字符串。
equals():字符串比较

5.怎么将字符串反转?
答:使用StringBuffer或者StringBuilder的reverse()方法。

6.Final,finally和finalize方法的区别?
答:final是常量声明(可以声明类,方法,属性,常量)
finally是处理异常的
finalize是帮助进行垃圾回收的

7.throw和throws有什么区别?
答:throws是用来声明一个方法可能抛出的所有异常信息。throws是将异常声明但是不处理,而是将异常往上传,谁调用我就谁处理。
throw则是抛出一个具体的异常类型。(在try catch进行捕获)

8.==和equals()的区别?
答:对与基本类型和引用类型==的作用效果是不一样的,
基本类型:比较的是值是否相同
引用类型:比较的是引用是否相同
equals默认比较两个对象的内容。

9.error和Exception的区别?
答:error表示恢复不是不可能但很困难的情况下的一种严重问题,比如内存溢出。
exception表示一中设计或实现问题。也就是说,它表示如果程序运行正常,从不会出现这样的事情。

10.Int和Integer的区别?
答:Integer是int的包装类,int是java的基本类型;
Integer必须实例化后才能使用,而int变量不需要。
Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象,而int则是直接存储数据值。
Integer默认值为null,int默认值为0;

11.静态变量和实例变量的区别?
答:语法定义:静态变量前面加上static,实例变量不用。
程序运行:实例变量是属于某个对象的属性,必须创建实例对象,其中的实例变量才会分配空间,才可以使用实例变量。静态变量不属于某个实例变量,属于类,不用创建对象就会分配空间,静态变量就可以使用了。实例变量必须通过创建对象才可以通过这个对象使用,而静态变量可以直接用类名。

12.private,protected,public,不写的区别?
答:public公共访问,最大
protected可以给子类访问
不写(default)可以给同一个包访问
private只能在本类访问
面向对象
a.面向对象的五大成分?
答:成员变量,方法,代码块,构造器,内部类

b.你怎么理解变量?
答:变量是一块命名的内存区域,以便程序进行访问。变量用来存储数据,随着程序的执行,存储的数据也可能跟着改变。
c.static的理解?
答:可以定义方法为static,不用对象就可以调用此方法,
方法用static的限制:
1.只能调用其他的static方法
2.只能方法static的数据
3.不能以任何的形式用this,super

d.面向对象的特征?
答:封装:把描述一个对象的属性和行为封装成一个类,把具体的业务逻辑功能实现封装成一个方法,封装的好处只能通过规定的方法访问数据。隐藏类的实例细节,方便修改和实现。
继承:实现代码的复用,所有的子类所公共的属性和方法抽取成一个父类,所有的子类继承该类可具备父类的属性和行为,继承具有单一性和传递性。
多态:程序中定义的引用类型变量所指向的具体类型和调用的具体方法在程序编译阶段无法确定,而是在运行期才能确定该引用类型变量指向具体那个对象而调用在那个类中声明的方法。
抽象:
e.java中的多态的机制是什么?
答:1.编译时指定的是要求调用父类的方法
2. 如果父类不存在该方法,编译时就报错。
3.但是运行时调用的并不是父类的该方法,而是调用了子类重写的该方法,这一变态行为称为多态。

f.接口和抽象类的区别?
相同点:
1.都可以拥有抽象方法
2.都不能创建属于自己的对象。
3.都是为了派生子类(抽象类是为了被继承,接口是为了被实现)
不同点:
1.抽象类除了抽象方法,还可以拥有构造器,实例成员。
2.抽象类是单继承的,接口是多继承多实现的。
g.接口和抽象类的好处?
答:接口:规范,扩展,回调
抽象类:1.为其他子类提供一个公共的类型。
2.封装子类中重复定义的内容。
3.定义抽象方法,子类虽然有什么不同的实现,但是定义时一致的。
h.抽象类作用?
1. 定义抽象方法
2. 派生子类:被继承
3.定义成员变量,方法
4. 调用static修饰的成员
5.设计模板模式:

抽象类可以实现一个设计模式:
模板模式:在很多时候,程序中存在一些相同的格式模板代码。
参见代码!

抽象类
public abstract class Zuowen_03
{
	private String name ;

	public Zuowen_03(String name){
		this.name = name ;
	}
    
	// 模板方法!!!
	// 写作文的模板 
	public void writerComposition(){
		// 子类都有作文的标题
		System.out.println("\t\t\t\t\t\t\t时间\t"+this.name);
		System.out.println("\t第一段,第一段,第一段,第一段,第一段,第一段,第一段。");

		// 正文:模板无法搞定,继承模板的人自己来写正文。
		// 抽象方法就是为被子类重写,当一个模板不确定一个功能应该怎么实现
		// 同时这个功能是由子类确定的话,就应该把这个功能定义成抽象方法
		// 交给子类来实现。
        System.out.println(this.newZhengwen());  

		// 总结 
		System.out.println("\t最高段,最高段,最高段,最高段,最高段,最高段,最高段,最高段.");
			
	}

	// 正文:抽象方法,这个抽象方法是被子类来重写。
	// 子类发挥的方法
	public abstract String newZhengwen() ;

}
子类
public class XleiZW_03 extends Zuowen_03
{
	public XleiZW_03(){
		super("   ");
	}
    
	// 子类
	@Override
	public String newZhengwen(){
		return "\t\t";
	}

	public static void main(String[] args) 
	{
		XleiZW_03 li = new XleiZW_03();
		li.writerComposition();  // 写作文!
	}
}

集合

A.集合中有那些?
答:1、Collection:代表一组对象,每一个对象都是它的子元素。
2、Set:不包含重复元素的Collection。
3、List:有顺序的collection,并且可以包含重复元素。
4、Map:可以把键(key)映射到值(value)的对象,键不能重复。
B.ArrayList和LinkedList的区别?
答:ArrayList实现了List接口,以数组的方式来实现的,因此对于快速的随机取得对象的需求,使用ArrayList实现执行效率上会比较好。
LinkedList是采用链表的方式来实现List接口的,因此在进行insert和remove动作时效率要比ArrayList高。适合用来实现Stack(堆栈)与Queue(队列)。
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
C.ArrayList和Vector的区别?
答:Vector和ArrayList在使用上非常相似,都可用来表示一组数量可变的对象应用的集合,并且可以随机地访问其中的元素。

  1. Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。
  2. 当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。
    D.HashMap和Hashtable的区别?
    答:HashMap可以接受key和value为null
    HashMap的key和value不为null
    HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。

由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。
HashMap不能保证随着时间的推移Map中的元素次序是不变的。
E.List和Map的区别?
答:List是有顺序的 可重复的
Map是通过键值对进行取值的 key和value是一一对应的
F.Set和List的区别?
答:1、List,Set都是继承自Collection接口
2、List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,(元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的,加入Set 的Object必须定义equals()方法 ,另外list支持for循环,也就是通过下标来遍历,也可以用迭代器,但是set只能用迭代,因为他无序,无法用下标来取得想要的值。)
3.Set和List对比:
Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变
G.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是还是equals()?他们有什么区别
答:Set 里的元素是不能重复的,元素重复与否是使用 equals()方法进行判断的。
equals()和
方法决定引用值是否指向同一对象 equals()在类中被覆盖,为的是当两个
分离的对象的内容和类型相配的话,返回真值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值