自定义注释和反射

本文详细介绍了Java中的注解、元注解、自定义注解的使用,包括注解的生命周期和作用范围。同时,讲解了反射的概念,如何获取Class对象,以及如何操作枚举类型,包括迭代枚举元素、打印枚举信息和实现抽象方法。此外,还涉及到了初始化块的执行。
摘要由CSDN通过智能技术生成

注释

注释是给读代码的人看的,注解是给编译器“看”的

元注解

public class Test02 extends Object{
    //Override  重写的注释
    @Override
    public String toString(){
        return super.toString();
    }
    //Deprecated 不推荐程序员使用,但可以使用,或者存在更好的方式
    @Deprecated
    public static void  test(){
        System.out.println("Deprecated");
    }
    //镇压警告
    @SuppressWarnings("all")
    public void mm(){
        ArrayList list = new ArrayList();
    }
    public static void main(String[] args) {
        test();
    }
}
//Target  表示我们的注解可以用在哪个地方   可以用在方法上 或者其他位置,继续加就是
@Target(value =ElementType.METHOD,...); 
//Retention 描述注解的生命周期 (Retention >class >Source)
@Retention 
//Document 表示是否将我们的注解生成在JAVAdoc中
@Document
//Inherited 子类可以继承父类的注解
@Inherited

自定义注解

public class test01 {
    //注解可以显示赋值,如果没有默认值,我们就必须给注解赋值
    @Myannotation1(age = 6,school = {"one","two"})
    @Myannotation2("mmm")
    public void test(){
    }
}
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface Myannotation1{
    //注解的参数:参数类型+参数名()
    String name() default ""; //取默认值
    int age() default 0;
    int id() default -1;  //如果设置成默认值-1,表示不存在 相当于indexof:如果找不到就返回-1
    String[] school();
}

@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@interface Myannotation2{
    String value();   //如果只有一个参数,这里就直接写成value
}

反射

反射简介:

主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。

https://www.kuangstudy.com/bbs/1375299928716247042

获得Class文件的方式

//方法1 _通过对象获得
Class c1 = person.getClass();
//方法2 _通过forname
Class c2 = Class.forname("com.kuang.reflection.Student");
//方法3 _通过类名.class
Class c3 = Student.class;
//通过父类也能获得
Class c4 = c1.getSuperclass();

成员内部类

需要注意的是不是static 静态变量,需要如下定义
其次注意在类里面函数与类有无(static),调用是不一样的

StringDemo.Inner inner=StringDemo.new Inner();

枚举enum

public class Test
{
    enum Color
    {
        RED, GREEN, BLUE;
    }
 
    // 执行输出结果
    public static void main(String[] args)
    {
        Color c1 = Color.RED;
        System.out.println(c1);
    }
}

迭代枚举元素

enum Color
{
    RED, GREEN, BLUE;
}
public class MyClass {
  public static void main(String[] args) {
    for (Color myVar : Color.values()) {
      System.out.println(myVar);
    }
  }
}

打印枚举类型

enum Color
{
    RED, GREEN, BLUE;
 
    // 构造函数
    private Color()
    {
        System.out.println("Constructor called for : " + this.toString());
    }
 
    public void colorInfo()
    {
        System.out.println("Universal Color");
    }
}
 
public class Test
{    
    // 输出
    public static void main(String[] args)
    {
        Color c1 = Color.RED;
        System.out.println(c1);
        c1.colorInfo();
    }
}

枚举类中的抽象方法实现

enum Color{
    RED{
        public String getColor(){//枚举对象实现抽象方法
            return "红色";
        }
    },
    GREEN{
        public String getColor(){//枚举对象实现抽象方法
            return "绿色";
        }
    },
    BLUE{
        public String getColor(){//枚举对象实现抽象方法
            return "蓝色";
        }
    };
    public abstract String getColor();//定义抽象方法
}

public class Test{
    public static void main(String[] args) {
        for (Color c:Color.values()){
            System.out.print(c.getColor() + "、");
        }
    }
}

初始化块的执行

只有大于1的代码块才会被 执行

public class HelloNative
{   public void init()
    // 下面定义一个初始化块
    {
        int a = 6;
        if (a > 4)
        {
            System.out.println("Appliction初始化块:局部变量a的值大于4");
        }
        System.out.println("Appliction的初始化块");
    }
    // 定义第二个初始化块
    {
        System.out.println("Appliction的第二个初始化块");
    }

    // 定义第san个初始化块
    {
        System.out.println("Appliction的第san个初始化块");
    }
    // 定义无参数的构造器
    //public HelloNative()
    {
        System.out.println("Appliction类的无参数构造器");
    }
    public static void main(String[] args)
    {
        new HelloNative();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值