1.简述线程、程序、进程的概念以及它们有什么区别或关系?
线程是程序执行的最小单位,是进程中的一个实体,一个进程可以包含多个线程,多个线程可以同时执行,共享进程的资源和内存空间。
程序是一组指令的集合,是计算机执行任务的静态描述。程序通常保存在磁盘上,并在需要执行时被载入内存中。
进程是操作系统中的一种资源分配单位,是程序执行的一个实例,包含了程序所需的内存空间、系统资源和处理器等信息。
总体而言,程序是静态的,是指令的集合,需要进程来支持其执行;进程是动态的,是程序执行的实例,可以包含多个线程来同时执行不同的任务。线程是执行任务的最小单位,共享进程的资源和内存空间,可以通过线程间通信来实现协作操作。
2.Java序列化中如果有的字段不想进行序列化,应该如果操作?
可以使用transient关键字来标记这些字段。
transient关键字的作用是:阻止实例中那些用此关键字修饰的的变量序列化;当对象被反序列化 时,被 transient 修饰的变量值不会被持久化和恢复。transient 只能修饰变量,不能修饰类和方 法。
3.Object有哪些常用方法?大致说一下每个方法的作用?
clone方法
保护方法,实现了对象的浅拷贝,只有实现了Cloneable接口才能调用该方法。深拷贝也需要实现Cloneable接口,同时其成员变量为引用类型的也需要实现Cloneable,然后重写clone方法。
equals方法
用于比较两个对象是否相等。默认情况下,equals方法比较两个对象的引用地址,如果两个对象的引用地址相同,则放回true,否则返回false。
hashCode方法
用于获取对象的hashCode值,hashcode值是一个整数,是对象的一个标识,如果两个对象相等,则它们的hashCode值也必须相等。
getClass方法
用于获取对象的类对象,返回的是Class对象,也可以用于获取类名、类的修饰符、类的父类的信息。
wait()、notify()、notifyAll()
用于实现线程中的协作,wait方法会让当前线程等待,直到其他线程调用该对象的notify方法或者notifyAll方法。notify方法用于唤醒其中一个等待线程,notifyAll方法用于唤醒所有等待线程。
finalize方法
该方法和垃圾收集器有关,判断一个对象是否可以被回收的最后一步就是判断是否重写了该方法,默认情况下,finalize方法不执行任何操作。
4.获取一个类的Class对象有哪些方法?
第一种:通过类的getClass方法来获取
第二种:通过类的静态成员表示,每个类都有隐含的静态成员class
Class<?> clazz = String.class;
第三种:通过Class类的静态方法forName方法获取
Class<?> clazz = Class.forName("java.lang.String");