JAVA基础面试知识点

java基础

一.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<T> {
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的值返回到新建的对象,序列化即是深拷贝实现的。

七.数据类型

7.1 基本数据类型:Java 语言提供了 8 种基本类型,大致分为 4 类(8位=1字节)

整数型
byte - 1字节
short - 2字节
int - 4字节
long - 8字节,赋值时一般在数字后加上 l 或 L
浮点型
float - 4字节,直接赋值时必须在数字后加上 f 或 F
double - 8字节,赋值时一般在数字后加 d 或 D
字符型
char - 2字节,存储 Unicode 码,用单引号赋值
布尔型
boolean - 1字节,只有 true 和 false 两个取值

7.2 引用数据类型
简单来说,所有的非基本数据类型都是引用数据类型,除了基本数据类型对应的引用类型外,类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型都属于引用类型。

主要有以下区别:
1、存储位置
基本变量类型在方法中定义的非全局基本数据类型变量的具体内容是存储在栈中的
引用数据类型变量其具体内容都是存放在堆中的,而栈中存放的是其具体内容所在内存的地址
2、传递方式

基本数据类型是按值传递
引用数据类型是按引用传递

八.面向对象

封装:封装又叫隐藏实现。就是只公开代码单元的对外接口,而隐藏其具体实现。

其实生活中处处都是封装,手机,电脑,电视这些都是封装。你只需要知道如何去操作他们,并不需要知道他们里面是怎么构造的,怎么实现这个功能的。

2.如何实现封装

在程序设计里,封装往往是通过访问控制实现的。也就是刚才提到的访问修饰符。

3.封装的意义

封装提高了代码的安全性,使代码的修改变的更加容易,代码以一个个独立的单元存在,高内聚,低耦合。封装的设计使使整个软件开发复杂度大大降低。只需要使用别人的类,而不必关心其内部逻辑是如何实现的。我能很容易学会使用别人写好的代码,这就让软件协同开发的难度大大降低。封装还避免了命名冲突的问题。

继承:
继承的主要思想就是将子类的对象作为父类的对象来使用。拥有父类所有的属性和功能;

多态:
指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。 多态的条件:要有继承,要有重写,父类引用指向子类对象

九.访问修饰符

访问修饰符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值