枚举 & 注解 & 反射

 

1、枚举

1.1、简介

JDK1.5引入了新的类型——枚举。

在JDK1.5 之前,我们定义常量都是: public static fianl.... 。很难管理。

枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。

用于定义有限数量的一组同类常量,例如:

错误级别:

低、中、高、急

一年的四季:

春、夏、秋、冬

商品的类型:

美妆、手机、电脑、男装、女装...

在枚举类型中定义的常量是该枚举类型的实例。

1.2三种定义枚举方法

方法一
public class Text1 {
    //类名.
    public static final Text1 LOW = new Text1(1);
    public static final Text1 MEDNUM = new Text1(50);
    public static final Text1 HIGH = new Text1(100);
    private int levelValue;
    // 私有封装,防止别人改级别
    private Text1(int levelValue){
        this.levelValue = levelValue;
    }

    public int getLevelValue() {
        return levelValue;
    }

    public void setLevelValue(int levelValue) {
        this.levelValue = levelValue;
    }
}
方法二
public enum Text2{
    LOW(1),MEDNUM(50),HIGH(100);

    private int levelValue;

    private Text2(int levelValue){
        this.levelValue = levelValue;
    }

    public int getLevelValue() {
        return levelValue;
    }

    public void setLevelValue(int levelValue) {
        this.levelValue = levelValue;
    }
}
方法三
public enum Text3 {
    LOW,MEDNUM,HIGH;
}

1.3枚举类的主要方法

2、注解

2.1、简介

Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。

(给机器看的注释机制,原先的注释在java文件中,在class就没了,而注解可以)

Java 语言中的类、方法、变量、参数和包等都可以被标注。和注释不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。 当然它也支持自定义 Java 标注。

主要用于:

1.编译格式检查

2.反射中解析

3.生成帮助文档

4.跟踪代码依赖等

2.2、内置注解(系统已经存在的注解)

2.3、元注解

作用在其他注解的注解

2.4.2、有哪些?

3、反射

3.1、概述

JAVA反射机制是在运行状态中,获取任意一个类的结构 , 创建对象 , 得到方法,执行方法 , 属性 !;

这种在运行状态动态获取信息以及动态调用对象方法的功能被称为java语言的反射机制。

3.2、得到Class的几种方式

1. 如果在编写代码时, 指导类的名称, 且类已经存在, 可以通过

   包名.类名.class 得到一个类的 类对象

 2. 如果拥有类的对象, 可以通过

   Class 对象.getClass() 得到一个类的 类对象

 3. 如果在编写代码时, 知道类的名称 , 可以通过

   Class.forName(包名+类名): 得到一个类的 类对象

上述的三种方式, 在调用时, 如果类在内存中不存在, 则会加载到内存 ! 如果类已经在内存中存在, 不会重复加载, 而是重复利用 !

(一个class文件 在内存中不会存在两个类对象 )

特殊的类对象

 基本数据类型的类对象:

   基本数据类型.clss

   包装类.type

 基本数据类型包装类对象:

   包装类.class

 public static void main(String[] args) throws ClassNotFoundException {
        //第一种加载到内存的方法,通过包名.类名.class来加载类
        Class<Person8> c1 = Person8.class;
        System.out.println(c1);
        //第二种方式,通过类的对象获取类的信息
        Person8 p = new Person8() ;
        Class<Person8> c2 = (Class<Person8>) p. getClass();
        System . out. println(c2);

        //第三种方式 可以在类不存在的时候使用(动态编程)必须保证在运行之前代码类已经存在了
        Class<Person8> person8Class = (Class<Person8>) Class.forName("com.kaikeba.text4_9.Person8");
        System. out . println(person8Class);
        System . out . println((c1 == c2) & (c1 == person8Class));

    }

3.3获取constructor

3. 获取所有权限的单个构造方法

getDeclaredConstructor(参数类型的class对象数组)

4. 获取所有权限的构造方法数组

getDeclaredConstructors();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值