java基础面试
1.java中存在的9种数据类型以及他们 的封装类型?
java 要确定每种基本数据类型所占存储空间的大小,他们的大小不像其他大多数语言那样随机器硬件架构的变化而变化,这种存储空间大小的不变性是java程序比用其他大多数语言编写的程序更具有可移植性的原因之一。
基本类型 | 大小 | 最小值 | 最大值 | 包装器类型 |
---|---|---|---|---|
boolean | - | - | - | Boolean |
byte | 8bits(1字节) | -128 | +127 | Byte |
short | 16bits(2字节) | −215 | +215−1 | Short |
int | 32bits(4字节) | −231 | +231−1 | Integer |
long | 64bits(8字节) | −263 | +263−1 | Long |
float | 32bits(4字节) | IEEE754 | IEEE754 | Float |
double | 64bits(4字节) | IEEE754 | IEEE754 | Double |
char | 16bits(2字节) | unicode 0 | unicode 216−1 | Integer |
void | - | - | - | Void |
2.Switch能否用string做参数?
java7之前无法用String作为Switch作为参数,现在是可以的,包括枚举类型和boolean类型都是可以的。唯独浮点类型不可以。
3. equals与==的区别。
(1)==
a. 用于基本数据类型的比较
b. 判读引用是否指向内存的同一块地址
(2)equals
用于判断两个变量是否是对同一个对象的引用,即堆中的内容是否相同,返回值为布尔类型
4. Object有哪些公用方法?
Object是所有类的父类,任何类都默认继承Object。
-clone:保护方法,实现对象的浅复制。
-equals:该方法是非常重要的一个方法。一般equals和==是不一样的,但是在Object中两者是一样的。子类一般都要重写这个方法。
-hashCode:该方法用于哈希查找,可以减少在查找中使用equals的次数,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。
一般必须满足obj1.equals(obj2)==true。可以推出obj1.hash- Code()==obj2.hashCode(),但是hashCode相等不一定就满足equals。不过为了提高效率,应该尽量使上面两个条件接近等价。
wait:wait方法就是使当前线程等待该对象的锁当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。
调用该方法后当前线程进入睡眠状态,直到以下事件发生。
(1)其他线程调用了该对象的notify方法。
(2)其他线程调用了该对象的notifyAll方法。
(3)其他线程调用了interrupt中断该线程。
(4)时间间隔到了。
此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。
notify方法:该方法唤醒在该对象上等待的某个线程。
notifyAll方法:该方法唤醒在该对象上等待的所有线程。
getClass:final方法,获取运行时类。
toString: 转为字符串
finalize:用于释放资源。
5.Java的四种引用。
强引用、软引用、弱引用、虚引用的概念
强引用(StrongReference)
程序代码中普遍存在的引用:
String str="hello"
只要某个对象有强引用与之关联,JVM必定不会回收这个对象,即使在内存不足的情况下,JVM宁愿抛出OutOfMemory错误也不会回收这种对象
软引用(SoftReference)
软引用是用来描述一些有用但并不是必需的对象,在Java中用java.lang.ref.SoftReference类来表示。对于软引用关联着的对象,只有在内存不足的时候JVM才会回收该对象。因此,这一点可以很好地用来解决OOM的问题,并且这个特性很适合用来实现缓存:比如网页缓存、图片缓存等。
import java.lang.ref.WeakReference;
public class Main {
public static void main(String[] args) {
WeakReference<String> sr = new WeakReference<String>(new String("hello"));
System.out.println(sr.get());
System.gc(); //通知JVM的gc进行垃圾回收
System.out.println(sr.get());
}
}
弱引用
弱引用也是用来描述非必需对象的,当JVM进行垃圾回收时,无论内存是否充足,都会回收被弱引用关联的对象。
在java中,用java.lang.ref.WeakReference类来表示
虚引用
虚引用和前面的软引用、弱引用不同,它并不影响对象的生命周期。在java中用java.lang.ref.PhantomReference类表示。如果一个对象与虚引用关联,则跟没有引用与之关联一样,在任何时候都可能被垃圾回收器回收。
应用场景
(1)强引用,我们平时在编写代码时经常会用到
(2)软引用适合用来进行缓存,当内存不够时能让JVM回收内存
(3)弱引用能用来在回调函数中防止内存泄露
6. Hashcode的作用。
hashcode方法返回该对象的hash码值。
hashCode的常规协定是:
在 Java 应用程序执行期间,在同一对象上多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是对象上 equals 比较中所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。