学习心得
注解和反射的学习中,看出来反射也可以创建对象,在一个注解里可以写方法,加一些东西。实现类里面直接写个注解,就直接加进去了。

心情😅😅
英文课啊这是,好好学英语有大用。反射注解里面存在的单词好多,但是有注解真的会很清晰
掌 握 情 况:多读多看才能记住
注解和反射:
注解:Annotation ,java标注,JDK5引入的一种机制
Java中类,方法,变量,参数,包都可以被标注。
元注解:专门给注解加的注解
我们发现注解中可以有方法,
1.定义方法的格式:比如 String name();
2.可以有默认值,也可以没有,如果没有默认值,必须在填写的时候对应的值。如果需要有默认值,使用default 指定默认值。
3.如果想在使用的时候不指定具体的名字。如果不学习反射,注解没有用!!
在Java的整个的注解体系中,有三个非常重要的主干类
1.Annotation :接口,定义一些常用的方法
2.ElementType:枚举,指定注解类型,意思就是我的注解要用到哪里。
3.RetentionPolicy:枚举。它用来指定注解的策略,不同类型的策略指定的注解的作用域不同。
- (1)SOURCE:注解仅存在于编译期处理期间,编译器处理完之后,这个注解就没用了。
- (2)CLASS:注解在 . class文件中依然有效。
- (3)RUNTIME:编译期是不起作用的,只有在运行期才由JVM读取。
Java自带的注解:
10个,四个注解在Java.lang.annotation。六个注解在java.lang
作用在代码上的注解:
1.@Override:检查该方法是否是重写方法。如果返现其父类,或者是引用的接口中没有该方法,会报错
2.@Deprecated:标记的方法,过时的方法。
3.@SuppressWarnings:编译期去忽略警告
4.@@SafeVarargs,JDK7支持忽略任何使用参数为泛型变量的方法或构造器产生的警告。
5.@FunctionalInterface:JDK8开始支持,表示一个接口为函数式接口
6.@Repeatable:JDK8之后开始支持的,标识某个注解可以在同一个声明使用多次。
- all:忽略所有警告
- boxing:忽略装箱、拆箱警告
- rawtypes:使用生成时没有指定数据类型
- unchecked:忽略没有进行类型检查操作的警告
- unused:忽略没有使用的警告
元注解:
1.@Retention:表示这个注解作用域
2.@Documented:标记这个注解是否包含在用户文档中
3.@Target:这个注解可以修饰哪些信息,类,方法,常量一大堆大写
4.@Iherited:如果一个类用上了这个注解,它的子类也会继承
反射:
Class类
public class Ch02 { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException { // 获取类对象 // 1.直接使用类名.class Class<Dog> clazz = Dog.class; // 对类对象操作 // 获取类的名字 System.out.println(clazz.getName()); // 获取类的加载器 ClassLoader classLoader = clazz.getClassLoader(); System.out.println(classLoader); // 获取资源 URL resource = clazz.getResource(""); // 获取父类 System.out.println(clazz.getSuperclass()); // 判断一个类是不是接口,数组 System.out.println(clazz.isArray()); System.out.println(clazz.isInterface()); // 重点,使用class类对象实例化一个对象 @SuppressWarnings("all") Dog dog = clazz.newInstance(); // clazz.getDeclaredConstructor().newInstance(); // 2.使用全类名 // Class aClass = Class.forName("com.jsoft.morning.Dog"); // 3.使用对象 // Dog dog = new Dog(); // Class aClass1 = dog.getClass();
Dog
@Bean public class Dog { public String type; private String name; private String color; public Dog() { } private Dog(String name){ this.name = name; } public Dog(String name, String color) { this.name = name; this.color = color; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } @MyAnnotation(value = 20,age=10) public void show(String str) { System.out.println("show方法..." + str); } public String info() { return "info方法"; } private void fun() { System.out.println("私有的fun方法
Bean 自己写的注解
import java.lang.annotation.*; @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface Bean { }
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
面试可能问的:
数组的length和字符串的length()区别?
答:数组的lenth是数组的属性,字符串的length()是String的一个方法
基本数据类型和包装器类型区别?
答:基本数据类型是有默认值的,int0 double0.0 boolean false..
包装器类型默认值为null
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
浙公网安备 33010602011771号
你点我就回上面去了ヾ(≧O≦)〃嗷~