注解、反射、枚举

JAVA反射

——反射机制

——反射作用:

java的反射机制就是增加程序的灵活性,避免将程序写死到代码里

反射的一些基本使用

获取类的一些方法

1、通过类名.class获取类

 ReflectDemo d = new ReflectDemo();
        Class c = ReflectDemo.class;

2、通过 Class.forName()传入全类名获取

ReflectDemo d = new ReflectDemo();
 try {
     Class c = Class.forName("ReflecctDemo.ReflectDemo");
     System.out.println(c);
     } catch (Exception e) {
     e.printStackTrace();
     }

3、通过对象实例 instance.getClass() 获取

ReflectDemo d = new ReflectDemo();
 Class c = d.getClass();
 System.out.println(c);

4、通过类加载器 ClassLoader.loadClass() 传入类路径 获取

 ReflectDemo d = new ReflectDemo();
  try {
      Class c = ClassLoader.getSystemClassLoader().loadClass("ReflecctDemo.ReflectDemo");
      System.out.println(c);
  } catch (Exception e) {
     e.printStackTrace();
  }

获取类名

1.获取完整类名:包名+类名

getName()String name = UserClass.getName();

2、.获取简单类名:不包括包名 getSimpleName()

String simpleName = UserClass.getSimpleName();获取属性

3、获取所有公有属性public 修饰

getFields()Field[] fields = UserClass.getFields();

4、获取单个公有属性 getField("属性名")

Field field = UserClass.getField("hobby");

5、获取所有属性:公有+私有 getDeclaredFields()

Field[] fields0 = UserClass.getDeclaredFields();

6、获取单个属性:公有或者私有getDeclaredField("属性名")

Field nameField = UserClass.getDeclaredField("name");

构造方法

1、获取所有公有构造方法

getConstructors()Constructor[] constructors = UserClass.getConstructors();

2、获取与参数类型匹配的构造方法 getConstructor(参数类型)

Constructor constructor = UserClass.getConstructor(String.class,int.class,String.class,String.class);

成员方法

1.获取所有公共方法 getMethods() ;

Method[] methods = UserClass.getMethods();

2、获取某个公共方法 getMethod("方法名", 参数类型);

Method method = UserClass.getMethod("setName", String.class);

3、获取所有方法:公有+私有 getDeclaredMethods()

Method[] declaredMethods = UserClass.getDeclaredMethods();

4、执行成员方法 invoke(object,"方法参数") ;

Mothod method = Userclass.getDeclaredMethod("dododo");

User user = new User();

method.invoke(user);

创建类的实例

1.通过 Class 实例化对象 Class.newInstance();

User user4 = (User)UserClass.newInstance();

2.通过构造方法实例化对象 constructor.newInstance(参数值)

Constructor constructor = UserClass.getConstructor (String.class,int.class);

User user = (User)constructor.newInstance("aaa",18);

System.out.println("姓名:"user.getName()+"年龄"+user.getAge());

枚举

——枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数。

颜色实例:

 public enum ColorEnum {
     Red("红色"),Blue("蓝色"),Black("黑色"),Yellow("黄色"),Green("绿色");
     private String color;
     //枚举类的构造函数是私有的
     private ColorEnum(String color){
         this.color = color;
     }
     public String a(){
         return "(颜色是:"+color+")";
     }
 }
 ​
 public class TaskMain {
     public static void main(String[] args) {
         for (ColorEnum e:ColorEnum.values()) {
             System.out.println(e.a());
         }
         System.out.println(ColorEnum.valueOf("Red").a());
     }
 }
 (颜色是:红色)
 (颜色是:蓝色)
 (颜色是:黑色)
 (颜色是:黄色)
 (颜色是:绿色)
 (颜色是:红色)

注解

——注解可以放置在:类上面、属性上面、方法上面、构造方法上面、参数前面。

分类注解含义
文档相关@Description表明类或方法的描述
@author标明开发该类模块的作者,多个作者之间使用,分割
@version表明该类模块的版本
@date表明开发日期
@param对方法中某参数的说明,如果没有参数就不能写
@return对方法返回值的说明,如果方法返回值类型是void就不用写
编译时进行格式检查@Override限定重写父类方法,该注释只能用于开发
@Deprecated用于表示所修饰的元素(类,方法等)已过时,通常是因为所修饰的结构危害或存在更好的选择
@SuppressWarings抑制编译器警告
事务相关@Transactional事务处理

自定义注解

——@interface定义一个新的注解类型

注解的写法接口非常类似* ​ ●可以描述public static final的属性(但是比较少见,因为final修饰了 就没法修改了,而我的l解携带信息的时候需要传值)●可以描还public abstract的方法, 但促注解的方法要求必须有返回值,返回值的炎型只能是八种基本数据类型、String类型、 Class类型、enum类型、Annotation类型、 以上所有类型的数组。●如果定义的注解里面有方法,那么在使用汪解的时候,方法是必须传递参数的。如果想不传参数也可以的话,需要给一个默认的值 ​ 。例如: String value() default "摩卡"*

——@Target 描述当前的这个注解可以修饰哪些程序元素

——@Retention 描述当前的这个注解存在什么作用域中的@Inherited 描述当前这个注解是否能被子类对象继承,写了就可以被继承

——@Document 描述当前这个注解是否能被文档所记录,写了就可以被记录

——@Override:限定父类方法,强制一个之类必须覆盖父类的方法。

——@Deprecated:标示某个类或方法已过时。当其他程序使用已过时的类、方法时,编译器会警告。

——@SuppressWarnings:抑制编译器警告。被标记的元素以及所有子元素都不会发出编译警告。

——@SafeVarargs:Java 7 提供的专门用于抑制 ”堆污染“ 警告。

——@FuncationalInterface:Java 8 提供的专门用于标识函数式接口的注解(只能标注接口)

实例:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值