一、Object类中有哪些方法
1.clone()方法:实现对象的浅复制。
2.getClass()方法
3.toString()方法
在我们直接使用输出语句输出对象名的时候,其实通过改对象调用了其toString()方法。
4.finalize方法:该方法用于释放资源。
5.equals方法:在object类中equals与==两者是一样的。
6.hashcode方法:方法用于hash查找重写equals方法一般都要重写hashcode方法。
7.wait方法:线程等待。
8.notify方法:唤醒等待某个的线程。
9.notifyAll()方法:唤醒所有等待的线程。
二、equals与 ==的区别
1.==是判断两个变量或实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是相同;
2.==是指引用是否相同,equals()指的是值是否相同。
修改:基本数据类型通常用==比较,引用数据类型通常用equals比较。
object中的equals方法默认比较的是两个对象的地址值,String 类重写的equals方法,所以可判断值是否相等。
三、什么是深拷贝、浅拷贝
浅拷贝:拷贝的对象和被拷贝的对象是指向同一个内存地址,但是值不同。
深拷贝:拷贝的对象和被拷贝的对象是独立的,深拷贝就是把这个对象的所有信息克隆一遍。
修改:深拷贝浅拷贝都是基于原有对象拷贝一个新的对象,区别在于对原有对象的成员变量的拷贝机制不同。
浅拷贝:将原对象的基本类型成员变量复制其值,引用类型变量复制其地址值,及原对象引用类型的变量与拷贝对象的引用类型变量实际指向的是一个对象。
深拷贝:将原对象的基本类型成员变量复制其值,引用类型变量复制其值并创建一个新对象,及原对象引用类型的变量与拷贝对象的引用类型变量实际指向的是两个对象。
四、String、StringBuilder、StringBuffer的区别
1.运算速度比较:StringBuilder > StringBuffer >String;
2.String为字符串常量,被final修饰的,值是不能改变的;StringBuilder和StringBuffer是字符串变量,只能通过构造函数来建立对象,StringBuilder和StringBuffer都是可以改变的;
3.StringBuilder是线程不安全的,适用于单线程下;StringBuffer是线程安全的,适用于多线程下。
五、抽象类与接口的区别:
1.抽象类用abstract修饰符修饰,abstract类不能创建实例化对象;接口有关键字interface修饰,接口不能被实例化。
2.抽象类可以有构造方法;接口中不能有接口方法。
3.抽象类中可以有普通成员变量;接口中没有普通成员变量。
4.抽象类中可以包含非抽象类的普通方法;接口中的所以方法都必须是抽象的,不能有非普通的抽象方法。
5.抽象类中的抽象方法的访问类型可以是public、protected;但是接口中的抽象方法之呢个是public类型的,并且默认为public abstract类型。
6.抽象类中可以包含静态方法;接口中不能包含静态方法。
7.抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意;但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
8.一个类可以实现多个接口;但是只能继承一个抽象类。
9.接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约;而抽象类在代码实现方面发挥作用,可以是实现代码的重用。(模板方法设计模式,是抽象类的一个典型应用)
六、final、finally、finallize的区别
1.final
(1)final类不能被继承,没有子类,final类中的方法默认是final的。
final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类。
(2)final方法不能被子类的方法覆盖,但是可以被继承。
如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。 使用final方法的原因有二:
1.把方法锁定,防止任何继承类修改它的意义和实现。
2.高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效。
(3)final的成员变量表示常量,只能被赋值一次,复制后值不再改变。
1.用final修饰的成员变量表示常量,值一旦给定就无法改变!
2.final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。
final变量定义的时候,可以先声明,而不给初值,这中变量也称为final空白,无论什么情况,编译器都确保空白final在使用之前必须被初始化。
(4)final不能用于修饰构造方法。
2.finally
finally是关键字,在异常处理中,try子句中执行需要运行的内容,catch子句用于捕获异常,finally子句表示不管是否发生异常,都会执行。finally可有可无。但是try…catch必须成对出现。
3.finalize()
finalize() 方法名,Object类的方法,Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象进行调用。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的子类覆盖 finalize() 方法以整理系统资源或者执行其他清理操作。
七、创建对象的方法有哪些
1.使用new关键字创建对象
例:Admin admin1 = new Admin();
2.使用反射的方式创建对象
例:1.使用Class类的newInstance方法
Admin admin2 = Admin.class.newInstance();
2.使用Constructor类的newInstance方法
Constructor
Admin admin3= constructor.newInstance();
3.使用clone方法
例:Admin admin4= (Admin) admin3.clone();
4.使用反序列化
例:当我们序列化和反序列化一个对象,jvm会给我们创建一个单独的对象。在反序列化时,jvm创建对象并不会调用任何构造函数。
为了反序列化一个对象,我们需要让我们的类实现Serializable接口。
ObjectInputStream in = new ObjectInputStream(new FileInputStream(“data.obj”));
Admin admin3= (Admin) in.readObject();
