首页 > 编程语言 >Java_10 注解与反射

Java_10 注解与反射

时间:2024-02-22 12:33:22浏览次数:40  
标签:lang 10 java int reflect 注解 Java public

title:(在线学习平台) link:(https://www.acwing.com/) cover:(https://cdn.acwing.com/media/activity/surface/log.png)

1 注解

(1) 注解(Annotation)也被称为元数据(Metadata),用于修饰包、方法、属性、构造器、局部变量等数据信息。
(2) 注解不影响程序逻辑,但注解可以被编译或运行。
(3) 在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等。在JavaEE中注解占据了更重要的角色,例如用来配置应用程序的任何切面,代替JavaEE旧版中所遗留的繁冗代码和XML配置等。

1.1 常用注解

(1) @Override: 限定某个函数必须重写其他函数,该注解只能用于函数。函数名和参数列表必须相同。
(2) @Overload: 限定某个函数必须重载其他函数,该注解只能用于函数。函数名必须相同,参数列表必须不同。
(3) @Deprecated:用于表示某个程序元素(类、函数)已过时
(4) @SuppressWarnings:抑制编译器警告

1.2 元注解

修饰其他注解的注解,就被称为元注解。

(1) Retention:指定注解的作用范围
(2) Target:指定注解可以用在哪些地方
(3) Document:注定注解是否出出现在javadoc中
(4) Inherited:子类会继承父类的注解


2 反射

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

2.1 常用API

(1) java.lang.Class
(2) java.lang.reflect.Method
(3) java.lang.reflect.Field
(4) 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);
    }
}

2.2 优缺点

优点:可以动态创建和使用对象,使用灵活
缺点:执行速度慢

标签:lang,10,java,int,reflect,注解,Java,public
From: https://www.cnblogs.com/jia-ming/p/18027067

相关文章

  • java xmx 和 xx:permsize 合理配置
    JVM虚拟机选项:XmsXmxPermSizeMaxPermSize区别java虽然是自动回收内存,但是应用程序,尤其服务器程序最好根据业务情况指明内存分配限制。否则可能导致应用程序宕掉。举例说明含义:-Xms128m表示JVMHeap(堆内存)最小尺寸128MB,初始分配-Xmx512m表示JVMHeap(堆内存)最大允许的......
  • Win10电脑桌面便签设置指南,让你的工作更高效
    在我的工作中,随手记录各类工作事项是非常有必要的。不论是紧急会议的要点、项目的进度安排,还是临时灵感的捕捉,每一项都需要及时记录,以免遗忘。这时候,如果有一款便签软件能够一直悬浮在电脑桌面上显示,无疑会大大提高我的工作效率。为了实现这个目的,我花费了几天时间,寻找和尝试了多......
  • 【JAVA】函数式接口示例
     Java的函数式接口提供了更简洁和声明性的方式来处理数据。以下是一些使用Predicate<T>、Function<T,R>、Consumer<T>和Supplier<T>的代码示例 Predicate(谓词语句)importjava.util.function.Predicate;publicclassPredicateExample{publicstaticvoidmain(Str......
  • Javamis 监控管理 - 服务监控模块开发过程详述(超详细图文说明)
    文章目录一、第一章、为什么要研发[服务监控]功能模块二、第二章、[服务监控]功能模块开发过程2.1.、引入依赖包2.2、开发过程2.2.1、实体类2.2.2、控制层类2.2.3、页面展示   前言    本来想着等待javamis低......
  • JAVA 学习路线
    1.首先是java基础(常用类,集合和IO)2.其次就是GUI编程3.学习网络编程和多线程基础4.对注解和反射进行了解5.有兴趣可以学习JVM(JUC并发编程以后再看)6.html5和CSS3和JS适当了解7.MYSQL数据库重点 Javaweb基础一定打好 这两个非常重要8.mybatis框架spring5和springmvc框......
  • 【Java】反应式编程 之 Mono.defer与Mono.just
    Mono.defer方法创建数据源属于懒汉型,Mono.just方法创建数据源属于恶汉型,下面看一个例子:packagecom.example.demo;importorg.junit.jupiter.api.Test;importorg.springframework.boot.test.context.SpringBootTest;importreactor.core.publisher.Mono;importjava.util......
  • 05-JavaScript基础语法
     <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>JS-基础语法</title></head><body></body><script>//输出语句//1.alert()弹出警告框aler......
  • java中Helloworld!
    java第一个程序,“你好世界”建立第一个程序文件名为:HelloWorld.java如下展示点击查看代码publicclassHelloWorld{ publicstaticvoidmain(String[]args){ system.out.print("HelloWorld!"); }}注意:java类名必须和文件名一致,然后进行文件编译和运行在DOS窗口运......
  • Android里使用AspectJ实现双击自定义注解
    创建注解首先创建一个双击注解。importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;​/***<pre>*desc:双击*author:刘金*......
  • [洛谷P3503][POI2010][BZOI2086]Blocks
    先看数据范围,n≤1e7,k≤1e9,暴力显然行不通,只能考虑单调栈;首先题目中说每一个数都要大于k,那么我们可以在初始化时就将每一个数都减去k,将问题转化为从正数中取出数加到负数里;然后维护一个前缀和,来判断一个区间是否符合要求;显然,当sum[j]-sum[i]≥0时,区间[i+1,j]符合题意,......