1.wait(),notify()和notifyAll()的作用是什么?
- wait():使当前线程停止,直到另一个线程调用notify()方法或notifyAll()方法.。
- notify():唤醒这个对象的监视器上等待的一个线程。
- notifyAll():将引发wait()状态的所有的线程变为就绪状态,所有的线程继续执行。这些线程将基于优先级以及基于JVM选择来执行。
- 注意:这三个方法在被调用之前必须获得对象的锁。
2.File类与RandomAccessFile类之间的区别是什么?
基于操作系统的文件系统服务,比如文件、文件夹的创建,权限的核实,改变文件名等,都由java.io.File类提供。java.io.RandomAccessFile类提供对文件的随机访问。使用这个类同样可以读、写,操作数据,同时更为方便的是,这个类可以读写基本类型,这有助于以结构化的方式处理数据文件。
3.什么是同步方法和同步代码块?
同步方法用于控制在多线程下对对象的访问。获得对象的锁后,线程才能执行同步方法。
同步代码块是类似于同步方法。不同之处在于同步方法是类的一部分,并明确地被另外一个方法调用。而一个同步代码块是由其被包含的方法执行,而这个包含同步代码块的方法还要被另外一个方法调用。
4.什么是Java类加载器?什么又是动态类加载?
类可以被JVM访问并通过名称来引用。JVM启动后,这些类被JVM读取。
所有的类加载器以一定的层次关系被JVM识别。第一个被加载的类是所谓的“初始化类”,也就是包含main方法的类。这个类是由JVM本身加载。所有其他后续类,按照它们在 ‘class chaining’中出现的顺序被加载。每一个类加载器都会创建一个命名空间来唯一识别它们。每个JVM至少包含一个引导类加载器。
5.抽象类和接口之间的区别是什么?什么时候使用抽象类?什么时候使用接口?
一个抽象类除了具体方法外还有一个或多个抽象方法。所有抽象方法必须被它的子类覆盖。一个抽象类可以没有抽象方法。而接口只包含方法签名。
默认情况下,一个接口中的的所有方法都是public的和abstract的。需要的时候应该为接口中的方法提供访问说明符。接口的实现类必须提供所有接口中声明的方法的实现。
抽象类的声明以关键字abstract开始,接口以interface开始。
一个接口可以继承任意数量的接口,一个抽象类只能继承一个抽象类。
接口的成员变量都是public static 的,抽象类的成员变量可以有任意声明。
当一个类继承自另一个类后,它还可以实现多个接口。当一个类需要实现接口所有的方法时,接口就很有用。
覆盖抽象类的具体方法不是强制要求的。当值需要实现若干方法,并想利用继承的优势的时候,就可以使用抽象类
6.ArrayList和Vector的主要区别?HashMap和HashTable的主要区别?
ArrayList和Vector的区别:
Vector是同步的,ArrayList不是。
Vector默认大小为10,ArrayList没有默认大小。
Vector有一个方法,可以指定Vector的大小,ArrayList不行。
Vector扩容的时候成倍增长,而ArrayList以50%增长。
HashMap和Hashtable的区别:
Hashtable是同步的,Hashmap不是。
Hashtable的值不能为空,Hashmap可以。
HashMap不能保证map中元素的顺序不变。
HashMap通过Map接口来实现。哈希表通过继承Dictionary 类实现。
7.解释Java集合框架?Java集合框架带来什么好处?
集合是由一组对象组成的一个对象。集合框架,让应用程序更有效率,更少的硬编码,不同的对象由类似的实现。使用集合框架,主要是为了集合框架的标准性和简单性。
集合框架的又一个好处是,一组对象,没有顺序或类型类型也可以通过一个单一的对象来表示。
Java集合框架提供了以下好处:
•减少编程工作量
•提高程序的速度和质量
•允许无关的API之间协同工作
•减少学习和使用的成本
•不要去设计新的API
•促进软件重用
8.对象的浅克隆和深克隆的主要区别?
Shallow cloning and deep cloning in Java – April 02, 2009 at 17:00 PM by Vidya Sagar
浅克隆只克隆了对象的引用。
深克隆克隆对象本身。
两者的区别用Java实例不好理解,但如果用数据库来想会更好理解:
如果实体需要“级联删除”被删除那就就要深克隆。如果“级联删除”是没有必要删除就需要浅克隆。
Shallow cloning and deep cloning in Java – July 31, 2009 at 14:00 PM by Amit Satpute
当对象被浅复制的时候,结果是复制的结果和原来的引用指向相同的对象。由于这个原因,原来的引用对对象的改变会映射到复制的结果。
当对象被深克隆时,对象的值也被复制,由于两个对象维持独立的引用,对对象的改变不会相互影响。
9.final,finally finalize()的区别?
Final, finally and finalize() in Java – April 02, 2009 at 17:00 PM by Vidya Sagar
• final
final成员变量的值不能被改变。
final方法不能被重写。
final类不能被继承。
这是一个语句块,咱try /catch块后这个语句块一定会被执行。
当对象要被GC回收时,这个方法会执行。
Final, finally and finalize() in Java – April 02, 2009 at 17:00 PM by Vidya Sagar
• finally – 除了try块调用了System.exit(0), finally块总是与try和catch块一起。这是确保在发生error/exception的情况下,finally块都能执行。finally不仅用于异常处理,还可以用于清理代码,比如返回值,continue或break语句的使用,I/O流的关闭等,在finally块中执行清理代码是一种良好的编程习惯。
10.什么是类型转换?什么是向上转型和向下转型?什么情况下会抛出ClassCastException异常?
Type casting and down casting in Java – April 02, 2009 at 17:00 PM by Vidya Sagar
“类型转换”:把对象从一种类型转换为另一种类型的表达式。
向上转型是把子类转换成父类,例如把子类的引用赋予父类的引用。
向下转型是把父类转换为子类,例如把父类的引用赋予子类的引用。
无效的类型转换会抛出ClassCastException。它表示该应用程序试图将对象转换为子类,但这个子类而不是对象的实例。当试图向容器中插入不兼容的对象时也会抛出这个异常。
Type casting and down casting in Java – July 31, 2009 at 14:00 PM by Amit Satpute
将类型的值从一种类型到另一种类型叫做类型转换。
如:
1 | int i = 10 ; |
2 | float x = ( float ) i; |
向上和向下转型和类有关。
如:
Parent p = new Child();
11.有几种内部类,分别是什么?
Different types of inner classes in Java – April 02, 2009 at 17:00 PM by Vidya Sagar
有4种类型的内部类 – 成员内部类,局部内部类,静态内部类和匿名内部类。
1.成员内部类-类(外部类)的成员。
2.局部内部类-这是一个块中定义的内部类。