欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

JAVA基础面试知识点

时间:2023-06-19

一.JAVA异常分类及处理

1.1 异常分类

Error: Error 类是指 java 运行时系统的内部错误和资源耗尽错误。应用程序不会抛出该类对象。如果出现了这样的错误,除了告知用户,剩下的就是尽力使程序安全的终止。
Exception(RuntimeException、CheckedException): Exception 又 有 两 个 分 支 , 一 个 是 运 行 时 异 常 RuntimeException ,如 : NullPointerException 、 ClassCastException ; 一个是CheckedException;如 I/O 错误导致的 IOException、SQLException。 RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。 如果出现 RuntimeException,那么一定是程序员的错误.

2.异常的处理方式

throw:方法内部,后面跟对象;
throws: 作用于方法上,用于声明,不一定会发生此异常;
系统自动抛出异常。

二.JAVA反射

2.1 概念
动态语言,程序运行时可以改变其结构,运行时,任意一个类都能知道这个类所有的属性和方法,并对于任意一个对象,都能调用它的任意一个方法;

2.2 反射API
用于生成JVM中的类、接口或者对象的信息:
Class 类:反射的核心类,可以获取类的属性,方法等信息。
Field 类:Java.lang.reflec 包中的类,表示类的成员变量,可以用来获取和设置类之中的属性值。
Method 类: Java.lang.reflec 包中的类,表示类的方法,它可以用来获取类中的方法信息或者执行方法。
Constructor 类: Java.lang.reflec 包中的类,表示类的构造方法

2.3 获取 Class 对象的 3 种方法

2.3.1调用某个对象的 getClass()方法
Person p=new Person();
Class clazz=p.getClass();
2.3.2调用某个类的 class 属性来获取该类对应的 Class 对象
Class clazz=Person.class;
2.3.3使用 Class 类中的 forName()静态方法(最安全/性能最好)
Class clazz=Class.forName(“类的全路径”);

2.4 创建对象的两种方法

Class 对象的 newInstance()
2.4.1、使用 Class 对象的 newInstance()方法来创建该 Class 对象对应类的实例,但是这种方法要求
该 Class 对象对应的类有默认的空构造器。
调用 Constructor 对象的 newInstance()
2.4.2、先使用 Class 对象获取指定的 Constructor 对象,再调用 Constructor 对象的 newInstance()
方法来创建 Class 对象对应类的实例,通过这种方法可以选定构造方法创建实例

三.JAVA注解

3.1 概念

Annotation(注解)是 Java 提供的一种对元程序中元素关联信息和元数据(metadata)的途径和方法。Annatation(注解)是一个接口,程序可以通过反射来获取指定程序中元素的 Annotation对象,然后通过该 Annotation 对象来获取注解中的元数据信息。

3.2 元注解

@Target说明了Annotation所修饰的对象范围: Annotation可被用于 packages、types(类、接口、枚举、Annotation 类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch 参数)。在 Annotation 类型的声明中使用了 target 可更加明晰
其修饰的目标
@Retention 定义 被保留的时间长短Retention 定义了该 Annotation 被保留的时间长短:表示需要在什么级别保存注解信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效),取值(RetentionPoicy)由:
 SOURCE:在源文件中有效(即源文件保留)
 CLASS:在 class 文件中有效(即 class 保留)
 RUNTIME:在运行时有效(即运行时保留)

@ documented 用于描述其它类型的 annotation 应该被作为被标注的程序成员的公共 API,因此可以被例如 javadoc 此类的工具文档化。

@Inherited 元注解是一个标记注解,@Inherited 阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited 修饰的 annotation 类型被用于一个 class,则这个 annotation 将被用于该class 的子类。

四、JAVA 泛型

4.1 概念

泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

4.2 泛型方法

public static < E > void method( E[] param )

4.3 泛型类

<? extends T>表示该通配符所代表的类型是 T 类型的子类。<? super T>表示该通配符所代表的类型是 T 类型的父类。

public class Test {private T t;public void add(T t) {this.t = t;}public T get() {return t;}

4.4 类型擦除

Java 中的泛型基本上都是在编译器这个层次来实现的。在生成的 Java 字节代码中是不包含泛型中的类型信息的;如在代码中定义的 List和 List等类型,在编译之后都会变成 List。JVM 看到的只是 List,而由泛型附加的类型信息对 JVM 来说是不可见的。

五、JAVA序列化

5.1 概念

保存(持久化)对象及其状态到内存或者磁盘,序列化对象以字节数组保持-静态成员不保存。

5.2 Serializable 实现序列化

在 Java 中,只要一个类实现了 java.io.Serializable 接口,那么它就可以被序列化。ObjectOutputStream 和 ObjectInputStream 对对象进行序列化及反序列化通过 ObjectOutputStream 和 ObjectInputStream 对对象进行序列化及反序列化;
writeObject 和 readObject 自定义序列化策略在类中增加 writeObject 和 readObject 方法可以实现自定义序列化策略;
序列化 ID
虚拟机是否允许反序列化,不仅取决于类路径和功能代码是否一致,一个非常重要的一点是两个类的序列化 ID 是否一致(就是 private static final long serialVersionUID)。

Transient 关键字阻止该变量被序列化到文件中

在变量声明前加上 Transient 关键字,可以阻止该变量被序列化到文件中,在被反序列化后,transient 变量的值被设为初始值,如 int 型的是 0,对象型的是 null。过滤敏感信息。

六、JAVA复制

6.1 直接复值复制

A a1 = a2;

6.2 浅复制

创建一个新对象,然后将当前对象的非静态字段复制到该新对象,如果字段是值类型的,那么对该字段执行复制;如果该字段是引用类型的话,则复制引用但不复制引用的对象。因此,原始对象及其副本引用同一个对象。

6.3 深复制

深拷贝不仅复制对象本身,而且复制对象包含的引用指向的所有对象。
实现Cloneable 接口,重写clone 方法,新声明一个对象,将clone的值返回到新建的对象,序列化即是深拷贝实现的。

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。