- 父类变量需要序列化时,父类需要实现Serializable接口么?
答:需要,父类也需要实现Serializable接口,因为父类的变量还是属于父类,不属于子类。 - transient关键字的作用?
答:使用transient关键字可以阻止变量被序列化。而在反序列化后,transient关键字修饰的变量会被设置为其对应类型的初始值。比如int基础数据类型的初始值就是0,引用类型的初始值就是null。 - 注解是什么?
答:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。可以把注解理解成一个用来声明包、类、字段、方法、局部变量、方法参数的标签,它不是代码的一部分。 - 描述一些你开发中常见的注解和作用?
答:
@Override:标记方法是否覆盖父类中声明的元素,同时告诉编译器要检查这个方法是否是实现父类的方法,如果不是,编译器会给出错误提示。
@Deprecated:用来标记过时的元素。
@SuppressWarnings:消除一些特定的警告信息。
@SafeVarargs:参数安全类型注解。
@FunctionalInterface: Java 1.8 版本引入的新特性,指定某个接口是函数式接口。
@RestController:表示这是控制器类,需要被注入spring容器,同时数据以json格式返回 - 说说几个元注解和它们的作用?
答:
元注解 | 作用 |
@Target | 标记注解所修饰的对象范围,比如类,方法等 |
@Retention | 标记注解被保留的级别,或者可以理解成注解的存活期 |
@Documented | 标记注解可以被javadoc工具记录,可以文档化 |
@Inherited | 标记注解可以被继承,子类可以继承父类中被@Inherited修饰的注解 |
@Repeatable | 表明标记的注解可以多次应用于相同的声明或类型,Java8引入的,具体应用可参考@Scheduled注解 |
- 列举一些Target的具体取值类型和作用?
答:
名词 | 修饰目标 |
TYPE | 表示此注解可以用在类或接口上 |
FIELD | 表示此注解可以用在域上 |
METHOD | 表示此注解可以用在方法上 |
PARAMETER | 表示此注解可以用在参数上 |
CONSTRUCTOR | 表示此注解可以用在构造方法上 |
LOCAL_VARIABLE | 表示此注解可以用在局部变量上 |
ANNOTATION_TYPE | 表示此注解可以用在注解类型上 |
PACKAGE | 用于描述包 |
TYPE_PARAMETER | 对普通变量的声明 |
TYPE_USE | 能标注任何类型的名称 |
- 列举一些Retention的具体取值类型和作用?
答:
名称 | 作用 |
SOURCE | 注解只在源码阶段被保留,即只在源文件中存在 |
CLASS | 注解只在编译阶段有效,即只在Class文件中被保留 |
RUNTIME | 注解在运行时有效,所以会被加载到JVM中,可以通过反射的获取调用 |
- 怎么自定义一个注解?
答:注解定义和接口有点像,就是前面多了个@。示例代码如下:
public @interface Person {}
- 注解类中可以定义哪些对象类型? 答:返回类型必须是基本类型,String,Class,Enum或数组类型之一。示例代码如下: