目录
4.三个字符串String StringBuffer StringBuilder的区别 :
14.HashSet和LinkedHashSet和 TreeSet 三者的对比:
17.当有哈希冲突时,HashMap是如何查找并确认元素的?
25.volatile有什么用?能否用一句话说明下volatile的应用场景?
26. synchronized和 volatile的区别是什么?
33.Java反射API(反射 API 用来生成 JVM 中的类、接口或则对象的信息)
38. final、finally、finalize有什么区别?
39.是否可以从一个static方法内部发出对非static方法的调用?
41.abstract的方法是否可同时是static、native和synchronized?
42. Math.round(11.5)等于多少?Math.round(-11.5)等于多少?
44. Java 中堆(heap)和栈(stack)有什么区别?
47.Java线程池中submit()方法和execute()方法有什么区别?
57.通常一个mapper.xml文件,都会对应一个Dao接口,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?
58.Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?
随时学,随时加
1.throws和throw的区别:
throws:在方法后边声明异常,其实就是自己不想对异常做出任何的处理,告诉别人自己可能出现的异常,交给别人处理,然别人处理
package com.xinkaipu.Exception;
class Math{
public int div(int i,int j) throws Exception{
int t=i/j;
return t;
}
}
public class ThrowsDemo {
public static void main(String args[]) throws Exception{
Math m=new Math();
}
}
throw: 就是自己处理一个异常,有两种方式要么是自己捕获异常try...catch代码块,要么是抛出一个异常(throws 异常)
package com.xinkaipu.Exception;
public class TestThrow
{
public static void main(String[] args)
{
try
{
//调用带throws声明的方法,必须显式捕获该异常
//否则,必须在main方法中再次声明抛出
throwChecked(-3);
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
//调用抛出Runtime异常的方法既可以显式捕获该异常,
//也可不理会该异常
throwRuntime(3);
}
public static void throwChecked(int a)throws Exception
{
if (a > 0)
{
//自行抛出Exception异常
//该代码必须处于try块里,或处于带throws声明的方法中
throw new Exception("a的值大于0,不符合要求");
}
}
public static void throwRuntime(int a)
{
if (a > 0)
{
//自行抛出RuntimeException异常,既可以显式捕获该异常
//也可完全不理会该异常,把该异常交给该方法调用者处理
throw new RuntimeException("a的值大于0,不符合要求");
}
}
}
2.代码块执行顺序:
代码块执行顺序:静态代码块——> 构造代码块 ——> 构造函数——> 普通代码块
继承中代码块执行顺序:父类静态块——>子类静态块——>父类代码块——>父类构造器——>子类代码块——>子类构造器
3.try ... catch、finally执行顺序:
finally永远是在最后执行的
如果在try ... catch语句中有return,
catch可以写多个异常(可以捕获多个异常)
顺序问题:先写小的,再写大的
4.三个字符串String StringBuffer StringBuilder的区别 :
5.抽象类与接口的区别:
- 抽象类是半抽象的,接口时完全抽象的
- 抽象类中有构造方法,接口没有构造方法
- 接口与接口之间支持多继承,类与类之间只支持单继承
- 一个类可以实现多个接口,但一个抽象类只能继承一个类
- 接口中只允许有常量和抽象方法(java7之前)
6.this和super的区别:
1.属性的区别:
this访问本类中的属性,如果本类没有此属性则从父类中继续查找。super访问父类中的属性。
2.方法的区别:
this访问本类中的方法,如果本类没有此方法则从父类中继续查找。super访问父类中的方法。
3.构造的区别:
this调用本类构造,必须放在构造方法的首行。super调用父类构造,必须放在子类构造方法首行。
4.其他区别:
this表示当前对象。super不能表示当前对象
A、this. 变量和super.变量
this.变量 调用的当前对象的变量;
super.变量 直接调用的是父类中的变量。
B、this(参数)和super(参数)方法
this(参数) 调用(转发)的是当前类中的构造器;
super(参数) 用于确认要使用父类中的哪一个构造器。
7.方法重载和方法重写的区别:
区别点 | 重载方法 | 重写方法 |
---|---|---|
参数列表 | 必须修改 | 一定不能修改 |
返回类型 | 可以修改 | 一定不能修改 |
异常 | 可以修改 | 可以减少或删除,一定不能抛出新的或者更广的异常 |
范围 | 在一个类中 | 发生在继承类中 |
8.Thread和Runnable的区别:
如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。
实现Runnable接口比继承Thread类所具有的优势:
1):适合多个相同的程序代码的线程去处理同一个资源
2):可以避免java中的单继承的限制
3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立
4):线程池只能放入实现Runable或callable类线程,不能直接放入继承Thread的类
9.sleep和wait的区别:
二者都会让线程进入阻塞状态,有以下区别:
- wait是Object的方法 sleep是Thread的方法
- wait会立即释放锁 sleep不会释放锁
- wait后线程的状态是Watting sleep后线程的状态为 Time_Waiting
- sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常(终端异常
5.
- Thread.sleep只会让出CPU,不会导致锁行为的改变
- Object.wait不仅让出CPU,还会释放已经占有的同步资源锁
10. Collection和Map接口的区别:
Map没有继承Collection接口
Collection接口,包含list和set子接口
Collection和Map接口之间的主要区别在于:Collection中存储了一组对象,而Map存储关键字键值对。
在Map对象中,每一个关键字最多有一个关联的值。
11.ArraysList和LinkedList的区别:
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 (LinkedList是双向链表,有next也有previous)
2.对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。
12.ArrayList和Vector的区别:
1. ArrayList 是线程不安全的,Vector 是线程安全的
2.ArrayList 使用默认构造器创建对象时是在调用 add()
方法时对 ArrayList 的默认容量进行初始化的,Vector 在调用构造器时就对容量进行了初始化
3. ArrayList 存储数据的 Object 数组使用了 transient
关键字,Vector 的 Object 数组没有
4. ArrayList 和 Vector 的扩容机制不同
13.List和Set的区别:
(1)重复对象
list方法可以允许重复的对象,而set方法不允许重复对象
(2)null元素
list可以插入多个null元素,而set只允许插入一个null元素
(3)容器是否有序
list是一个有序的容器,保持了每个元素的插入顺序。即输出顺序就是输入顺序,而set方法是无序容器,无法保证每个元素的存储顺序,TreeSet通过 Comparator 或者 Comparable 维护了一个排序顺序
14.HashSet和LinkedHashSet和 TreeSet 三者的对比:
1、HashSet、LinkedHashSet 和 TreeSet 都是 Set 接口的实现类,都能保证元素唯一,并且都不是线程安全的。
2、HashSet、LinkedHashSet 和 TreeSet 的主要区别在于底层数据结构不同。
HashSet 的底层数据结构是哈希