首页 > 其他分享 >反射_Class对象功能_获取Constructor与注解_概念

反射_Class对象功能_获取Constructor与注解_概念

时间:2022-10-13 16:22:30浏览次数:62  
标签:String 配置文件 age Class Constructor 注解 public name

反射_Class对象功能_获取Constructor

案例:

  需求:写一个“框架”,不能改变该类的任何代码的前提下,可以帮我们创建任意类的对象,并且执行其中任意方法

      实现: 

        1.配置文件;

        2.反射;

      步骤:

        1.将需要创建对象的全类名和需要执行的方法定义在配置文件中

        2.在程序中加载读取配置文件

        3.使用反射技术来加载类文件进内存

        4.创建对象

        5.执行方法

package day01.Demo01_Day017.ZhuYao;
 
public class Person {
    private String name;
    private int age;
 
    public String a;
    protected String b;
    String c;
    private String d;
 
 
    public Person() {
    }
 
    public Person(String name, int age) {
 
        this.name = name;
        this.age = age;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
 
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", a='" + a + '\'' +
                ", b='" + b + '\'' +
                ", c='" + c + '\'' +
                ", d='" + d + '\'' +
                '}';
    }
 
 
    public void eat(){
        System.out.println("eat...");
    }
 
    public void eat(String food){
        System.out.println("eat..."+food);
    }
}

 

className=day01.Demo01_Day017.ZhuYao.Student
methodName=sleep

 

package day01.Demo01_Day017.zhong;

import day01.Demo01_Day017.ZhuYao.Person;
import day01.Demo01_Day017.ZhuYao.Student;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;

/*
        框架类
     */
public class ReflectTest {
        public static void main(String[] args) throws Exception {
            //可以创建任意类的对象,可以执行任意方法
            /*
                前提不能改变该类的任何代码。可以创建任意类的对象,可以执行任意方法
             */
           /*Person person = new Person();
            person.eat();*/
           /* Student stu = new Student();
            stu.sleep();*/

            //加载配置文件
               //1.1创建Properties对象
                Properties pro = new Properties();
                //1.2加载配置文件,转换为一个集合
                //1.2.1获取class目录下配置文件方式
                ClassLoader classLoader = ReflectTest.class.getClassLoader();
                InputStream is = classLoader.getResourceAsStream("pro.properties");
                pro.load(is);
               //2.获取配置文件中定义的数据
                String className = pro.getProperty("className");
                String methodName = pro.getProperty("methodName");

              //3.加载该类进内存
                Class aClass = Class.forName(className);

              //4.创建对象
                Object o = aClass.newInstance();

              //5.获取方法对象
                Method method = aClass.getMethod(methodName);
              //6.执行方法
                method.invoke(o);



        }
}

注解_概念

  注解:说明程序的。给计算机看的

   注释:用文字描述程序的。给程序员看的

定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个

层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

* 概念描述:

    * JDK1.5之后的新特性

    * 说明程序的

    * 使用注解:@注解名称

* 作用分类:
    ①编写文档:通过代码里标识的注解生成文档【生成文档doc文档】
    ②代码分析:通过代码里标识的注解对代码进行分析【使用反射】
    ③编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【Override】

JDK中预定义的一些注解

  自定义注解

  在程序中使用(解析)注解

注解javadoc演示

1.打开你的程序的存放地址

 

 

2.打开cmd系统命令窗口

 

 

 3.输入javadoc 程序类名.java

 

 

 4查看文件夹

 

 

 5.会发现你的程序和apl文档一样

 

 

 其中报乱码不要慌右键改成GBk,因为java的编码默认的是UTF-8

 

 

 

完成

 

 

 

 

 

不能改变该类的任何代码。可以创建任意类的对象,可以执行任意方法

标签:String,配置文件,age,Class,Constructor,注解,public,name
From: https://www.cnblogs.com/x3449/p/16787987.html

相关文章