首页 > 编程语言 >Java-10注解与反射

Java-10注解与反射

时间:2024-02-05 19:33:53浏览次数:35  
标签:lang 10 java int reflect 注解 Java public

注解

  • 注解(Annotation)也被称为元数据(Metadata),用于修饰包、方法、属性、构造器、局部变量等数据信息。

  • 注解不影响程序逻辑,但注解可以被编译或运行。

  • 在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替JavaEE旧版中所遗留的繁冗代码和XML配置等。

常用注解

  • @Override: 限定某个函数必须重写其他函数,该注解只能用于函数。函数名和参数列表必须相同。

  • @Overload: 限定某个函数必须重载其他函数,该注解只能用于函数。函数名必须相同,参数列表必须不同。

  • @Deprecated:用于表示某个程序元素(类、函数)已过时

  • @SuppressWarnings:抑制编译器警告

元注解

修饰其他注解的注解,就被称为元注解。
  • Retention:指定注解的作用范围

  • Target:指定注解可以用在哪些地方

  • Document:注定注解是否出出现在javadoc中

  • Inherited:子类会继承父类的注解

反射

  • 反射:动态引入类、动态调用实例的成员函数、成员变量等。

常用API

  • java.lang.Class

  • java.lang.reflect.Method

  • java.lang.reflect.Field

  • java.lang.reflect.Constructor


package org.yxc;

public class Calculator {
    public String name;

    public Calculator() {}

    public Calculator(String name) {
        this.name = name;
    }

    public int add(int a, int b) {
        return a + b;
    }
}


package org.yxc;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Main {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
        Class<?> cls = Class.forName("org.yxc.Calculator");
        Object o = cls.newInstance();

        Method method = cls.getMethod("add", int.class, int.class);
        int res = (int)method.invoke(o, 3, 4);
        System.out.println(res);

        Field field = cls.getField("name");
        field.set(o, "My Calculator!");
        System.out.println(field.get(o));

        Constructor<?> constructor = cls.getConstructor(String.class);
        Object new_o = constructor.newInstance("New Calculator!");
        System.out.println(new_o);
    }
}

优缺点

  • 优点:可以动态创建和使用对象,使用灵活

  • 缺点:执行速度慢

标签:lang,10,java,int,reflect,注解,Java,public
From: https://www.cnblogs.com/han-fei/p/18008698

相关文章

  • [office] Excel2010删除批注教程
    现在,很多人在使用excel2010的时候,经常会对其进行批注,但是过一段时间后,如果Excel2010工作表中的单元格批注失去存在的意义,用户可以将其删除。那么,Excel2010怎么删除批注?今天,小编就为大家带来Excel2010删除批注教程。Excel2010打开Excel2010工作表窗口,右键单击含有批注的单......
  • P10125 「Daily OI Round 3」Simple 题解
    题目传送门简单模拟,主要考察字符串。首先输入一个char类型的数组,然后直接遍历每一位是否为Acoipp或Svpoll即可。//Simple//codeby:cq_irritater//time:2024/02/04#include<bits/stdc++.h>usingnamespacestd;chara[10];intmain(){//freopen("c......
  • JAVA线程池
    线程池中的四种拒绝策略通常是指:AbortPolicy(默认策略):这是默认的拒绝策略。当线程池无法接受新任务时,它会抛出RejectedExecutionException异常。CallerRunsPolicy:在这种策略下,当线程池无法接受新任务时,会使用提交任务的线程来执行该任务。这样做的目的是为了降低新任务的提交......
  • java 内存布局
    面试题:初始化创建的对象有多大?答案:16字节Objecta=newObject();16字节String[]b=newString[2]();16字节/24字节对象的内存布局主体内容包括:对象头:MarkWord、指针、数字长度(数组对象才有)数据体:对象的数据,初始化一般为空数据对齐:要求对象大小,为8的倍数,而......
  • java lambda 求分组内最大值
    可以使用lambda表达式,比较方便,这里主要想说下思路问题,之前一个时受到数据库的影响,一个是对api理解程度不够的原因,实现方式见方式一;后来有种恍然大悟的感觉,改成了方式二的实现;方式一:先分组,组内过滤每一条数据Map<String,List<UserLog>>collect=list.stream().collect(Collec......
  • Proxmox 7.4 使用vgpu_unlock,为GTX1060开启vGPU支持
    本文在2021年发布的博客《Proxmox5.4使用vgpu_unlock,为GTX1060开启vGPU支持》,介绍了ProxmoxVE5.4上部署vGPUunlock的操作步骤。 后续有发布了在 ProxmoxVE7.x上支持vGPU的博客《Proxmox7.2部署DoraCloud桌面云,支持vGPU》,实现了通过3个脚本完成vGPU的配置。 ......
  • 32-Java中字符串、json、map之间的互相转换
    Java中字符串、json、map之间的互相转换 1.map转String、jsonObject对象packagemap;importjava.util.HashMap;importjava.util.Objects;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONObject;publicclassMapDemo3{publicstatic......
  • 打开java语言世界通往字节码世界的大门——ASM字节码操作类库
    一、ASM介绍1、ASM是什么ASM是一个通用的Java字节码操作和分析框架。它可以用于修改现有类或直接以二进制形式动态生成类。ASM提供了一些常见的字节码转换和分析算法,可以从中构建定制的复杂转换和代码分析工具。ASM提供了与其他Java字节码框架类似的功能,但侧重于性能。由于它的......
  • Java 将PDF转为PowerPoint (2行代码)
    通过编程实现PDF转PPT的功能,可以自动化转换过程,减少手动操作的工作量,并根据需要进行批量转换。将PDF文件转换为PPT文档后,可以利用PPT的丰富功能和动画效果,达到更好的演示效果。在Java中,我们可以使用第三方库Spire.PDFforJava来将PDF转换为PowerPoint文档。以下示例包含将PDF转......
  • docker中调试java代码
    以shiro550为例子在vulhub/shiro/CVE-2016-4437启动环境docker-composeup-d然后看一下当前容器启动的命令是java-jar/shirodemo-1.0-SNAPSHOT.jar将容器内的jar包复制出来dockercp容器id:/shirodemo-1.0-SNAPSHOT.jar.然后ijidea新建项目,并且解压jar包到项......