Java面试08|Java重要的类和相关的方法

时间:2021-12-26 08:50:50

1、深入理解Class类及其中的方法

获取Class类的方法:

1、调用Object类的getClass()方法来得到Class对象,这也是最常见的产生Class对象的方法。
2、使用Class类的中静态forName()方法获得与字符串对应的Class对象。例如:

Class c2=Class.forName("MyObject")  // MyObject必须是接口或者类的名字

3、获取Class类型对象的第三个方法非常简单。如果T是一个Java类型,那么T.class就代表了匹配的类对象。例如

Class cl1 = Manager.class;
Class cl2 = int.class;  // 注意这个
Class cl3 = Double[].class;

注意:Class对象实际上描述的只是类型,而这类型未必是类或者接口。例如上面的int.class是一个Class类型的对象。由于历史原因,数组类型的getName方法会返回奇怪的名字。

getClass()

clone()

hashCode()

equals()

notify()、notifyAll()、wait()

finalize() 在垃圾收集器删除对象之前对这个对象调用的

toString()

会对这几个问题有无数的小问题,如下:

1、为什么要覆写hashCode()方法,默认的不行吗?

2、深克隆与浅克隆?

3、何时需要重写equals()?

4、如何覆写equals()和hashCode()?

5、当改写equals()的时候,总是要改写hashCode()

6、两个对象如果equals那么这两个对象的hashcode一定相等,如果两个对象的hashcode相等那么这两个对象是否一定equals?

  

2、如何在运行时确定对象类型?

(1)使用instance of关键字 不过有个缺点,该类继承的基类和实现的接口也都能够被识别为true

(2)每个类都会有且只有一个对应Class的对象,我们正是用这个Class对象来实例化该类的所有对象的,也就是Class中的newInstance()方法。可以通过比较这个Class对象,如下:

 Object i = new Integer(7);
	    if (i.getClass().equals(Integer.class)) {
	        System.out.println("Integer i is a Integer");
	    }

	    if (i.getClass() == Integer.class) {
	        System.out.println("Integer i is a Integer");
	    } 

	    if(Integer.class.isInstance(i)){
	    	System.out.println("Integer i is a Integer");
	    }

也可以直接通过getClass()方法的getName()来输出名称。

3、关于随机数生成的类Random

public int nextInt(int n)

该方法的作用是生成一个随机的int值,该值介于[0,n)的区间,也就是0到n之间的随机int值,包含0而不包含n。

4、SimpleDateFormat在并发量高的环境下访问会有什么问题?

会有多线程问题,可能造成异常、线程挂起等,主要原因就是使用了成员变量而引起的资源争用。

解决的办法就是使用ThreadLocal。