黑马程序员------Java的注解与类加载器
来源:互联网 发布:苹果电脑删除不了软件 编辑:程序博客网 时间:2024/06/08 13:09
---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
了解注解的应用
注解相当于一种标记,在程序中加入了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器
开发工具和其他程序可以用反射来了解你的子类及各种元素上有无何种标记。看你有什么标记,就去干相应的事。标记就可以
加在包、类、字段、方法的参数以及局部变量上。
根据java.lang包,可知JDK中提供的最基本的annotation为:@SuppressWarnings,@Deprecated,@Override
一个注解就是一个类,注解就相当于一个你的源程序中要调用一个类,要在源程序中应用某个注解,得先准备好了这个注解类。
就像你要调用某个类,得先开发好这个类。
注解的定义与反射调用
package com.lee.demo;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;//元注解RetentionPolicy.SOURCE,RetentionPolicy.CLASS,RetentionPolicy.RUNTIME分别对应//java源文件-->class文件-->内存中的字节码。@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD,ElementType.TYPE})public @interface LeeAnnotation {String color()default "blue";String value();int[] arrAttr() default{1,2,3};EnumTest1.TrafficLamp lamp() default EnumTest1.TrafficLamp.RED;MetaAnnotation annotationAttr() default @MetaAnnotation("dog");}
package com.lee.demo;public @interface MetaAnnotation {String value();}
package com.lee.demo;import com.lee.demo.EnumTest1.TrafficLamp;//arrAttr 这里属性只有一个元素,可以直接写arrAttr=1@LeeAnnotation(value = "xyz",arrAttr=1,lamp=TrafficLamp.YELLOW, annotationAttr = @MetaAnnotation("cat"))public class AnnotationTest {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubif(AnnotationTest.class.isAnnotationPresent(LeeAnnotation.class)){LeeAnnotation lee = AnnotationTest.class.getAnnotation(LeeAnnotation.class);System.out.println(lee);//以方法调用的方式取值System.out.println(lee.color());//已经指定默认值System.out.println(lee.value());//取数组的长度System.out.println(lee.arrAttr().length);//枚举类型System.out.println(lee.lamp());//枚举的枚举System.out.println(lee.annotationAttr().value());}}}
类加载器
java虚拟机中可以安装多个类加载器,系统默认三个主要的类加载器,每个类加载器负责加载特定位置的类
BootStrap,ExtClassLoader,AppClasLoder
类加载器也是java类,因为其他是java类的类加载器本身也要被类加载器加载,显然必须有一个类加载器
不是java类,这正是BootStrap。
1.首先当前线程的类加载器去加载线程中的第一个类。
2.如果A中引用了类B,Java虚拟机将使用加载类A的类装载器来加载类B
3.还可以直接调用ClassLoader.loadClass()方法来指定某个类加载器去加载某个类。
委托机制:
当所有祖宗类加载器没有加载到类,回到发起者类加载器,还加载不了,则抛出ClassNotFoundException,
不再去找加载器的儿子,因为没有getChild方法。
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详情请查看:http://edu.csdn.net
- 黑马程序员------Java的注解与类加载器
- 黑马程序员--JAVA之内省、注解与类加载器
- 黑马程序员java高新技术篇----类加载与注解
- 黑马程序员 高新技术<四>--->内省、注解与类加载器
- 黑马程序员---內省、注解与类加载器
- 黑马程序员---內省、注解与类加载器
- 黑马程序员——Ⅱjava基础加强之注解与类加载器(14)
- 黑马程序员 -java基础 类加载器注解内省
- 黑马程序员 java高新技术之注解,泛型,类加载器
- 黑马程序员--Java基础--14JavaBean,注解,类加载器
- Java基础---内省、注解、类加载器 (黑马程序员)
- 黑马程序员----java内省--注解--类加载器
- 黑马程序员 Java加强 注解 泛型 类加载
- 黑马程序员-java的注解
- 黑马程序员---java动态代理与类加载器
- "黑马程序员"张老师Java高新技术学习(注解、类加载器)
- 黑马程序员—Java提高3(注解,类加载器,代理)
- 黑马程序员——Java高新_内省、注解、类加载器
- DWORD变量在内存中和纯单引号的串在内存中存储顺序
- 新浪微博SSO授权以及分享(实战)
- OpenCV 2 学习笔记(22): 腐蚀与膨胀
- 今晚的恒大比赛
- Linux命令(2):ls命令
- 黑马程序员------Java的注解与类加载器
- 由斐波那契数列引发的问题。
- MAX232(MAX3232)电平转换芯片的工作原理
- java中基本类型占用字节数
- 求第K小/大的数(树状数组解法)
- 内存中数据如何分配
- HDU 1052 Tian Ji -- The Horse Racing
- hdu 1254推箱子(两次bfs)
- javascript面向对象(属性和方法应注意的问题)