JavaSE基础面试题

1、面向对象的特征有哪些方面?

封装:最常见的是把属性私有化封装在一个类里面,只能通过方法去访问。

继承:子类继承父类,从而继承父类的方法和属性。

多态:多态分操作符的多态和类的多态。类的多态是父类引用子类的对象,并且有继承、重写。

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

String是类类型(引用数据类型),不是基本数据类型。

基本类型有四类八种:整型(4种):byte、short、int、long
									字符型(1种):char
									浮点型(2种):float、double
									布尔型(1种):boolean

3、int和integer有什么区别?

								int是基本数据类型(32位)长度的整数
								
								integer是引用数据类型,是int的封装类。
								
								int和integer之间可以通过***自动装箱***和***自动拆箱***互相装换。

4、String、StringBuffer、StringBuilder有什么区别?
String 字符串常量不可变使用字符串拼接时会开辟新空间。

StringBuffer 字符串变量可变线程安全字符串拼接直接在字符串后追加

StringBuilder 字符串变量可变非线程安全字符串拼接直接在字符串后追加

(注意:StringBuilder执行效率依次高于StringBufer和String

5、运行时异常(RuntimeException)和一般异常(CheckedException)有什么区别?

运行时异常:IndexOutOfBoundsException 索引越界异常

					 ArithmeticException:数学计算异常
					   					   
					  NullPointerException:空指针异常
					  						
					 ArrayOutOfBoundsException:数组索引越界异
					 						
					 ClassNotFoundException:类文件未找到异常
										    
					  ClassCastException:造型异常(类型转换异常)

(注意:这些异常是不检查异常(UncheckedException),程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的。

一般异常 :IOException、文件读写异常

					FileNotFoundException:文件未找到异常
	
					EOFException:读写文件尾异常
											
					MalformedURLException:URL 格式错误异常
											
					SocketException:Socket 异常
											
					SQLException:SQL 数据库异常

(注意:一般异常又叫非运行时异常,从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。

6、ArrayList,Vector, LinkedList的存储性能和特性的区别?

ArrayList和Vector的区别:
										两者都继承了抽象类AbstractList,但是Vector是线程安全的,而ArrayList是非线程安全的。

ArrayList和LinkedList的区别:
											ArrayList 是数组结构,所以定位很快,但是插入和删除很慢。
											LinkedList 是双向链表结构,所以插入和删除很快,但是定位很慢。

7、Collection 和 Collections的区别?

Collection: 是接口,是List和Set的父接口。

Collections: 是工具类,提供了排序,混淆等等很多实用方法

(注意:千万不能说成了英文的单复数形式

8、&和&&的区别?

& :有两个作用,分别是 位与 和 逻辑与

&&: 就是逻辑与
作为逻辑与, & 和 && 分别表示长路与和短路与
长路与 两侧,都会被运算
短路与 只要第一个是false,第二个就不进行运算了

9、HashMap和Hashtable的区别?

相同点:HashMap和Hashtable都实现了map接口,都是键值对保存数据的方式。

不同点1:
HashMap可以存放null(空值)
Hashtable不可以存放null(空值)
不同点2:
HashMap不是线程安全的类
Hashtable是线程安全的类

10、final、finally、finalize的区别/

final:
修饰类:表示该类不能被继承。

	 修饰方法:表示该方法不能被重写。
						
						修饰基本类型变量:表示该变量只能被赋值一次。
						
						修饰引用:表示该引用只有一次指向对象的机会。

finally:用于异常处理的场面,无论是否有异常抛出,都会执行

finalize:finalize是Object的方法,所有类都继承了该方法。 当一个对象满足垃圾回收的条件,并且被回收的时候,其finalize()方法就会被调用

11、重载(Overload)和重写(Override)的区别?

重载(两同一不同):同一个类中

									方法名相同
											
									参数列表不同(个数,列表,类型)
											
									和返回值无关		

重写::子类和父类,子类继承了重写了父类的方法

			 方法名和参数列表必须和父类完全一致
					    
			 返回值类型相同

12、Error和Exception有什么区别?

相同点:
Error和Exception都实现了Throwable接口

不同点:
Error指的是JVM层面的错误,比如内存不足OutOfMemoryError

		  Exception 指的是代码逻辑的异常,比如下标越界OutOfIndexException

13、abstract class(抽象类)和interface(接口)有什么区别?

使用方式:
抽象类只能通过继承被使用

				接口必须通过实现被使用

实现方法:
抽象类不仅可以提供抽象方法,还可以提供实现方法。

				接口只能提供抽象方法,不能提供实现方法。但是在java8版本开始,接口可以提供实现方法了,前提是要在方法面前加一个dedefault修饰符。

14、栈(stack)和 堆(heap)得区别?

存放内容不同:栈:是存放基本数据类型、引用(对象地址)、方法调用

								堆:是存放对象

存取方式不同:栈:是固定大小的,遵循先入后出的顺序,并且存取的速度比较快

		 				 堆:是自动增加大小额,所以不需要指定大小,但是存取相对较慢

15、GC是什么?为什么要有GC?

GC:是Garbage Collection的缩写,即垃圾回收。

这里所谓的垃圾,指的是那些不再被使用的对象,JVM的垃圾回收机制使得开发人员从无聊、容易犯错的 , 手动释放内存资源的过程中解放出来。开发人员可以更加专注的进行业务功能的开发,而资源回收的工作交由更加专业的垃圾回收机制自动完成。

16、short s1 = 1; s1 = s1 + 1;有什么错?

short s1 = 1; 这一句没有错误,编译器会自动把1这个整数处理为short.

s1 = s1 + 1; 右侧的表达式会返回一个Int类型的整数,再把这个int类型的整数赋给short类型的s1的时候,就会出现强制转换错误

17、Math.round(11.5)等于多少? Math.round(-11.5)等于多少?

Math.round 的意思是+0.5 取整数
所以 Math.round(11.5) 即 11.5+0.5 = 12
Math.round(-11.5) 即 -11.5+0.5 = -11

18、String s = new String(“xyz”);创建了几个String Object?

String s = new String(“xyz”);
首先构造方法 new String(“xyz”); 中的"xyz" 这本身就是一个字符串对象
然后 new 关键字一定会创建一个对象
所以总共创建了两个String对象

19、Java有没有goto?

有,goto是关键字,但是是保留字,并不具备功能性。

20、接口(interface)是否可继承()接口? 抽象类(abstract class)是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

接口是否可继承接口?

可以,比如List就继承了接口Collection

抽象类是否可实现接口?

可以,比如 MouseAdapter鼠标监听适配器 是一个抽象类,并且实现了MouseListener接口

抽象类是否可继承实体类(concrete class)?

可以,所有抽象类,都继承了Object

21、List, Set, Map是否继承自Collection接口?

List 和 Set 继承了Collection接口

但是Map和Collection之间没有继承关系,因为一个是键值对容器,一个是单值容器,无法兼容。

在这里插入图片描述

22、abstract的method是否可同时是static,是否可同时是synchronized?

		都不可以(网上可查)

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

		数组获取长度的手段是 .length 属性
		
		String获取长度的手段是 length()方法
		
		集合获取长度的手段是 size()方法
		
		文件获取长度的手段是 length()方法

24、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?

以HashSet为例,判断重复的逻辑是:

						1. 首先看hashcode是否相同,如果不同,就是不重复的
						2. 如果hashcode一样,再比较equals,如果不同,就是不重复的,否则就是重复的。

25、构造器Constructor是否可被override(重写)?是否可以继承String(字符串)类?

		子类不能继承父类的构造方法,所以就不存在重写父类的构造方法。
		
		(注: *super() 表示子类调用父类的构造方法,这不能被叫做继承父类的构造方法*)

		String是final修饰的,所以不能够被继承

26、switch 是否能作用在byte上,是否能作用在long上,是否能作用在String上?

		switch 可以作用在 byte,short,int String,Enum(枚举) 上,但是不能作用在long上面
		
	(注:*switch 作用在String上从JDK1.7开始支持,实质是编译时将字符串替换为了其对应的hash值*)

27、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

		try里的return 和 finally里的return 都会执行,但是当前方法只会采纳finally中return的值

28、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

	因为hashCode()方法和equals()方法都可以通过自定义类重写,是可以做到equals相同,但是hashCode不同的
	但是,在Object类的equals()方法中有这么一段话
	* Note that it is generally necessary to override the {@code hashCode}
	* method whenever this method is overridden, so as to maintain the
	* general contract for the {@code hashCode} method, which states
	* that equal objects must have equal hash codes.
	* 翻译如下:通常来讲,在重写这个方法的时候,也需要对hashCode方法进行重写,以此来保证这两个方法的一  		致性——当equals返回true的时候,这两个对象一定有相同的hashcode.

	
	两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
	所以这个题的答案应该是否定的,但是得搞清楚里面的原委
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值