美文网首页
三、Java中级--4、java反射

三、Java中级--4、java反射

作者: cybeyond | 来源:发表于2018-04-27 16:46 被阅读0次

1、什么是反射

动态的加载类,在使用的时候加载进内,通过Class.forName("")将其加载。

示例1:


结构

Person类:

package javastudy;

public class Person {
    int age;
    String name;
    public void display(){
        String s=String.format("姓名=%s,年龄=%d",name,age);
        System.out.println(s);
    }
}

Testit:

package javastudy;

public class Testit {

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        // TODO Auto-generated method stub
        Class<?> c=Class.forName("javastudy.Person");  //将Person类加载进进来(内存),此时c相当于是Person;<?>是泛型,理解为通配符
        Person zhang=(Person)c.newInstance();//新建对象,将object转换为Person
        zhang.name="jack";
        zhang.age=20;
        zhang.display();
    }
}

2、反射的其他作用

  • 获得这个类实现了哪些接口 getInterfaces
  • 得到其父类 getSuperclass
  • 得到所有的构造函数 getConstructors
    示例2:得到构造函数


    结构

    Person类

package javastudy;

public class Person {
    int age;
    String name;
    public void display(){
        String s=String.format("姓名=%s,年龄=%d",name,age);
        System.out.println(s);
    }
    public Person(){
        
    }
    public Person(String name,int age){
        this.name=name;
        this.age=age;
    }
}

Testit类

package javastudy;

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

public class Testit {

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        // TODO Auto-generated method stub
        Class<?> c=Class.forName("javastudy.Person");  //将Person类加载进进来(内存),此时c相当于是Person;<?>是泛型,理解为通配符
//      Person zhang=(Person)c.newInstance();//新建对象,将object转换为Person
//      zhang.name="jack";
//      zhang.age=20;
//      zhang.display();
        Constructor<?>[] cons=c.getConstructors();  //数组形式存放Person存在的构造函数,可能包含有多个
        Person wang=(Person) cons[1].newInstance("jerry",30);//取数组中的[1]第2个函数,因此要将Person中定义为public
        wang.display();
    }
}

示例3:得到此类实现了哪些接口
新增加一个interface


结构

Animal接口

package javastudy;

public interface Animal {

}

Person类

package javastudy;
public class Person implements Animal{
    }

Testit类

package javastudy;

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

public class Testit {

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        // TODO Auto-generated method stub
        Class<?> c=Class.forName("javastudy.Person");  //将Person类加载进进来(内存),此时c相当于是Person;<?>是泛型,理解为通配符
        Class<?>[] inter=c.getInterfaces();
        for(int i=0;i<inter.length;i++){
            System.out.println(inter[i].getName());
        }
    }
}

执行结果

相关文章

  • 三、Java中级--4、java反射

    1、什么是反射 动态的加载类,在使用的时候加载进内,通过Class.forName("")将其加载。 示例1: P...

  • 博客地址

    java注解-01、java注解-02、Git面试资源java反射-01、java反射-02、java反射-03为...

  • Java反射机制入门

    Java反射机制入门 一、什么是反射 JAVA反射机制(The JAVA reflection mechanism...

  • Java基础之反射

    Java基础之—反射(非常重要)Java中反射机制详解Java进阶之reflection(反射机制)——反射概念与...

  • 【阿里P8大牛教你Android入门之路(java篇)】——Ja

    一、前言 本部分内容主要包含以下: Java集合 Java反射 Java注解 Java反射 Java IO 其他面...

  • b04-2 spring容器相关java知识-反射(精通Spri

    本篇内容: 1、java反射实现 2、java类加载器ClassLoader 3、java反射机制 一、java反...

  • 反射之一

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • 反射之二

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • Java 反射机制

    Java 反射机制 什么是反射 Java 反射是Java语言的一个很重要的特征,它使得Java具体了“动态性”。 ...

  • Java面试题之JavaSE高级

    一、Java中的反射 1.说说你对Java中反射的理解 java中的反射首先是能够获取到Java...

网友评论

      本文标题:三、Java中级--4、java反射

      本文链接:https://www.haomeiwen.com/subject/eqsplftx.html