栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java学习:反射

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java学习:反射

java学习:反射
    • 1.通过反射使用一个类
    • 2.反射:获取类构造方法:并使用:
    • 3.反射:获取构造方法并使用案例
    • 4.反射:获取成员变量并使用:
    • 5.反射获取成员方法并使用:

1.通过反射使用一个类

获取Class对象:

Class c1=student.class;

c1:就是student类的对象
返回值:class com.cn.student// student类的包名

student s=new student();
Class c3=s.getClass();//也是

Class c4= Class.forName(“com.cn.student”);//也是

都可以返回类的:对象

package com.cn;

public class Dome2 {


    public static void main(String[] args) throws ClassNotFoundException {

        Class c1=student.class;
        System.out.println(c1);

Class c2=student.class;
System.out.println(c2);
System.out.println("----------");


student s=new student();

Class c3=s.getClass();
System.out.println(c3==c1);
        System.out.println("----------");


Class c4= Class.forName("com.cn.student");
System.out.println(c4);


    }



}

结果:

控制台输出了:

2.反射:获取类构造方法:并使用:

Class c1=Class.forName(“com.cn.student”);
Constructor[] cons=c1.getConstructors();//获取类的对象中:public:的构造方法,cons:类:构造方法数组

Constructor[] conu=c1.getDeclaredConstructors();//
获取所有构造方法

package com.cn;

import java.lang.reflect.Constructor;

public class Dome3 {


    public static void main(String[] args) throws ClassNotFoundException {




Class c1=Class.forName("com.cn.student");


        Constructor[] cons=c1.getConstructors();
        for(Constructor con:cons){//遍历Constructor对象数组
System.out.println(con);//con:数组中的元素
        }
        

    }
}

结果:返回public 公共的

补充:获取所有构造方法

 Constructor[] conu=c1.getDeclaredConstructors();//返回所有构造方法:私有,公共都能

        for(Constructor con1:conu){//遍历Constructor对象数组
            System.out.println(con1);
        }
3.反射:获取构造方法并使用案例

Constructor con= c1.getConstructor(String.class,int.class,String.class);//获取类特定的构造方法

Object obj=con.newInstance(“我是谁”,30,“北京”);
//创建object对象,并且
newInstance();//c创建对象

其中类:

 public student(String name,int age,String address)
    {
        this.name=name;
        this.age=age;
        this.address=address;


    }

    @Override
    public String toString() {
        return "student{" +
                "age=" + age +
                ", name='" + name + ''' +
                ", address='" + address + ''' +
                '}';
    }
}
package com.cn;

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

public class rtkfl {


    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {





        Class c1=Class.forName("com.cn.student");

Constructor con= c1.getConstructor(String.class,int.class,String.class);


Object obj=con.newInstance("我是谁",30,"北京");
System.out.println(obj);
    }



}

结果:

4.反射:获取成员变量并使用:

Field[] fields=c1.getDeclaredFields();//获取类成员变量(所有)

Field addressfild=c1.getField(“address”);//获取类特别一个成员变量

Constructor con=c1.getConstructor();//getConstructor后面无s ,创建类对象
Object obj=con.newInstance();//创建object对象

addressfild.set(obj,“西安”);//给成员变量赋值

package com.cn;

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

public class weryv {


    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {



        Class c1=Class.forName("com.cn.student");


        Field[] fields=c1.getDeclaredFields();//Field获取类的成员变量,getDeclaredFields()返回所有:成员变量:公共的,私有的
        for(Field con:fields){  //for循环

            System.out.println(con);

        }

     System.out.println("--------------");

        Field addressfild=c1.getField("address");
       System.out.println(addressfild);
        System.out.println("--------------");

        Constructor con=c1.getConstructor();//getConstructor后面无s

       Object obj=con.newInstance();

       System.out.println(obj);

addressfild.set(obj,"西安");//赋值:给成员变量,
System.out.println(obj);




    }
}

结果:

5.反射获取成员方法并使用:

Method[] methods=c1.getMethods();//获取类成员方法:public:公共的,数组

Method c2= c1.getMethod(“ass”);//获取类中某一个成员方法

Constructor aaa=c1.getConstructor();//创建对象
Object obj=aaa.newInstance(); //利用object,创建object对象,
c2.invoke(obj);// 有指定参数的指定对象上调用此方法

package com.cn;

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

public class Dome4 {


    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {



        Class c1=student.class;//创建反射对象


        Method[] methods=c1.getMethods();//获取类成员方法:public:公共的,数组

        for(Method con:methods){  //遍历methods数组

            System.out.println(con);
        }
System.out.println("--------------");


Method c2= c1.getMethod("ass");//获取类中某一个成员方法

System.out.println(c2);


        Constructor aaa=c1.getConstructor();//创建对象
        Object obj=aaa.newInstance();  //利用object,创建object对象,


       c2.invoke(obj);//        获取的成员方法进行使用,invoke();是object中的一个方法:
        //具有指定参数的指定对象上调用此方法

    }







}

结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/439380.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号