首页 > 注解有错请指出谢谢大哥们!!
头像
社交牛逼一号
发布于 2021-08-24 11:45
+ 关注

注解有错请指出谢谢大哥们!!

注解

元注解

@Target:用于描述注解的使用范围(被描述的注解可以在什么地方使用)

@Retention:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(SOURCE<CLASS<RUNTIME)

@Document:该注解被包含在javadoc中

@Inherited:该子类可以继承父类中该注解

自定义注解

使用@interface自定义注解 自动继承java.lang.annotion.Annotation接口



public class test2 {      @Annonation(age = 15,name1 = {"清华大学","湘潭"})     public void test(){      }       @Annonation1("靓仔")     public void test1(){      }      //可以在方法和类上使用     @Target({ElementType.TYPE,ElementType.METHOD})     @Retention(RetentionPolicy.RUNTIME)     @interface Annonation{         //注解中的参数格式  参数名(); 不是方法         String name() default "我是注解";         int age();         String[] name1();     }      @Target({ElementType.TYPE,ElementType.METHOD})     @Retention(RetentionPolicy.RUNTIME)     @interface Annonation1{         String value();//默认写value     } }        @Annontation2()     public void test(){      }      @Target({ElementType.METHOD,ElementType.TYPE})     @Retention(RetentionPolicy.RUNTIME)     @interface Annontation2{         // -1默认为没有         int value() default -1;     } } 

反射机制 java Reilection

java反射机制能提供的功能

在运行时判断任意一个对象所属的类

在运行时构造任意一个类的对象

在运行时判断任意一个类所具备的成员变量和方法

在运行时获取泛型信息

在运行时用任意一个对象的成员变量和方法

在运行时处理注解

生成动态代理

.....

优点:可以实现动态代理创建对象和编译 很灵活

缺点:对性能有很大影响,使用反射基本上上时一种解释操作,告诉JVM 我们希望什么并且满足我么的要求,这类操作总是慢于直接执行相同的操作

一个类在内存中只有一个class对象

public static void main(String[] args) throws ClassNotFoundException {         //通过反射获取类的class对象         Class clazz = Class.forName("com.test.User");         System.out.println(clazz);          //一个类在内存中只有一个class对象         //一个类被加载后,类的整个结构都会被封装在class对象中         Class clazz1 = Class.forName("com.test.User");         Class clazz2 = Class.forName("com.test.User");         Class clazz3 = Class.forName("com.test.User");                  System.out.println(clazz == clazz1);       }

Class类

所有的子类都继承了 public final Class getClass()

返回的是一个Class类,这是反射的源头。就是通过对象反射求出类的名称

static ClassforName(String name) 返回指定类名name的class对象

Object newInstance() 调用缺省构造函数,返回Class对象的一个实例

getName()返回此Class对象所表示的实体(类,接口,数组类或void)的名称

CLass getSuperClass()返回当前Class对象的父类Class对象

Class[] getinterfaces() 获取当前Class对象的接口

ClassLoader getClassLoader()返回该类 的类加载器

Constructor[] getConstructors() 返回一个包含某些Contructor对象的数组

Method getMothed(String name,Class .. T) 返回一个Method对象,此对象的形参类型为paramType

Field[] getDeclaredFields() 返回Filed对象的一个数组

获取Class类的实例

一直具体的类,通过类的class属性获取,该方法最为安全可靠,程序性能最高

已知具体的类,通过类的class属性获取,该方法最为安全可靠,程序性能最高 Class clazz = Person.class;  已知某个类的实例,调用该实例的getcLASS()方法获取CLass对象 class clazz = person.getClass();  一直一个类的全类名,且该类在类路径下,可通过CLass类的静态方法forName()获取,肯抛出ClassNotFoundException class clazz = Class.forNameException("demo01,student");  内置基本数据类型可以直接用类名.Type 还可以利用ClassLoader.. 

class 类,interface 接口,[] 数组,enum 枚举,annotation 注解@interface ,primitive type 基本数据类型,void 都是有class对象的

元素类型与维度一样,他们就是同一个对象


全部评论

(0) 回帖
加载中...
话题 回帖

相关热帖

近期热帖

近期精华帖

热门推荐