1、a.hashCode() 有什么用?与 a.equals(b) 有什么关系?
作用:当我们向Set这样存储元素不可重复的集合中存入大量元素时,为判断元素是否相等需要大量的调用equals()方法,而.hashCode()方法存在就会大大减少equals()方法的使用频率,从而提高效率
equals与hashcode的关系:equals相等两个对象,则hashcode一定相等。但是hashcode相等的两个对象不一定equals相等。
2、字节流与字符流的区别
字节流是最基本的,采用ASCII编码主要用在处理二进制数据,它是按字节来处理的,主要处理音频文件、图片、歌曲等文件;
字符流采用Unicode编码,适合处理纯文本文件
字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串;
字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以
3、什么是java序列化,如何实现java序列化?
序列化:把Java对象转换为字节序列的过程。
反序列化:把字节序列恢复为Java对象的过程。
对象的序列化主要有两种用途:
1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
2) 在网络上传送对象的字节序列。
被序列化的类必须实现Serializable接口
4、描述一下JVM加载class文件的原理机制?
Java中的所有类,必须被装载到JVM中才能运行,这个装载工作是由JVM中的类装载器(ClassLoader)完成的,类装载器所做的工作实质是把类文件从硬盘读取到内存中,作用就是在运行时加载类。
顺便说一下JVM加载字节码文件的步骤 :
(1)装载:查找和导入class文件
(2)连接:
检查:检查载入class文件的正确性
准备:为类的静态变量分配内存空间
解析:将符号引用转换为直接引用
(3)初始化:初始化静态变量、静态代码块
5、GC是什么?为什么要有GC?
GC是指垃圾回收机制,当一个对象不能再被后续程序所引用到时,这个对象所占用的内存空间就没有存在的意义了,java虚拟机会不定时的去检测内存中这样的对象,然后回收这块内存空间。
GC的存在让程序员不再担心内存管理,最大化内存的使用;同时GC也可以有效的防止内存的泄露。
6、垃圾回收的优点和原理。并考虑2种回收机制。
优点:垃圾回收机制可以有效的防治内存泄露,有效的使用可以使用的内存
原理:垃圾回收器通常作为一个单独的低级别的线程运行,在不可预知的情况下对内存堆中已经死亡的或很长时间没有用过的对象进行清除和回收
垃圾回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。
7、垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
可以。
System.gc()。Runtime.getRuntime().gc()
8、Java 中,throw 和 throws 有什么区别
throws出现在方法头;而throw出现在方法体
throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常对象。
9,说说java中的Object类及其常用方法。
Object类是java默认的提供的一个类,Object类是所有类的父类,也就是说任何一个类的定义的时候如果没有明确的继承一个父类的话,那么它就是Object的子类
toString():以字符串的形式返回对象信息,通常都是“该字符串由类名 +@ + 此对象哈希码的无符号十六进制”组成
clone():实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。
getClass():final方法,返回运行时类对象。
finalize():该方法用于释放资源
equals():比较对象是否相同,即引用地址是否指向同一个对象
hashCode():获得对象的哈希码
wait(long timeout):使线程进入等待,设定一个超时间隔,如果在规定时间内没有获得锁就返回
调用该方法后当前线程进入睡眠状态,直到以下事件发生。
(1)其他线程调用了该对象的notify方法。
(2)其他线程调用了该对象的notifyAll方法。
(3)其他线程调用了interrupt中断该线程。
(4)时间间隔到了。
notify():唤醒在该对象上等待的某个线程。
notifyAll():唤醒在该对象上等待的所有线程。