java--注解和类加载器--学习笔记

注解–Annotation

定义

注解Annotation是一种引用数据类型,编译之后也是xxx.class文件。
语法格式: @注解类型名

自定义注解

【修饰符列表】 @interface 注解类型名{ } -----可自定义注解

//自定义注解1
public @interface MyAnno {
//    String name() ;                //注解中的 属性必须赋值,或者指定默认值,
    String name() default "";       //默认值为空。
    String color() ;
    int age() default 25;
}
//自定义注解2
public @interface Anno2 {
    String value() ;
}

注解可以出现在类上,属性上,方法上,变量上等…还可以出现在注解类型上。

//注解样例代码2
//  注解可以放置的位置:若无元注解特殊要求   可以出现在类上,属性上,方法上,变量上等...
public class AnnotationTest {
    @Override
    @MyAnno(color = "")
    public String toString() {
        return "tostring";
    }
    @Anno2("heh")
    public static void main(String[] args) {
        int i;
        @MyAnno(color = "")
        int k;
    }
}

注解的属性

注解当作如果有属性,必须给属性赋值。
注解当中的属性类型可以是:byte,short,int,long,float, double, boolean, char, String, Class, 枚举类型,以及以上的每一种数组形式。

//注解样例代码1
//      注解的若只有value属性 则注解时可省略 value=
public class Annotation02 {
    public static void main(String[] args) {
        Annotation02 a=new Annotation02();
        a.doSome();
        a.doOther();
    }
    @Deprecated
    @MyAnno(color = "ss")       //注解color未指定默认值,不可以省略color =
    
    public static void doSome(){
        System.out.println("do something!");
    }
    @Deprecated

    @Anno2("不多说,指定好吧")      //注解如果是value属性 且只有一个value属性则可以省略 则 ”value= “ 可以省略,否则不能
    public static void doOther(){
        System.out.println("do Other...");
    }
}

JDK内置的注解

java.lang包下有: Deprecated,Override
Deprecated 用@Deprecated注释的程序元素,不鼓励程序员使用这样的元素,可用在某方法或者某类上,表示该方法或者该类 已过时。 (这个注解只是提醒作用)
Override 表示一个方法声明打算重写超类中的方法声明。Override 只能注解方法,这个注解是给编译器参考的,和运行阶段没有关系,但是如果这个方法不是重写父类,则编译器报错。

元注解

元注解:用来标注“注解类型”的“注解”,成为元注解。(注解上面的注解为元注解)
常用的元注解:Target,Retention
Target 用来标注 “注解” 指定注解可以出现的位置。
Retention 指定注解的保存位置。
@Rentention(RetentionPolicy.SOURCE):表示该注解只被保留在java源文件中。
@Rentention(RetentionPolicy.CLASS):表示该注解会保留在Class文件中。
@Rentention(RetentionPolicy.RUNTIME):表示该注解被保存至class文件所读取。

使注解可以被反射:+元注解 @Taget({ElementType.FIELD})

反射机制判断存不存在注解

Class sc=Class.forName("java.lang.String");
sc.isAnnotationPresent(MyAnnotation.class));

反射机制判断访问注解属性

MyAnnotation m=(MyAnnotation)sc.getAnnotation(MyAnnotation.class);
m.属性		即可调属性接口。

类加载器

JDK中的类加载器: 专门负责加载类的命令/工具。 (ClassLoader)

JDK中的类加载器

JDK中自带了三个类加载器:启动类加载器、扩展类加载器、应用类加载器。
启动类加载器 专门加载: C:\Program Files\Java\jdk1.8.0_101\jre\lid\rt.jar
扩展类加载器 加载:    C:\Program Files\Java\jdk1.8.0_101\jre\lid\ext.jar
应用类加载器 专门加载: classpath 中的jar 包 (即自己定义的类)

JAVA的双亲委派机制

一段代码在开始执行前,会将所需要的类全部加载到JVM中。
首先通过 启动类加载器 加载。
如果启动类加载器找不到某个类,那么通过扩展类加载器加载。
如果扩展类加载器没有加载到,会通过应用类加载器加载。 这便是 java中的双亲委派机制。
(这样做保证了首先从java自带的类中加载,保证了程序的安全性。)

最后,附上npy沙雕的日常。
爱你

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值