Examples of class three implementation methods and reflection applications

 

An instantiated class

com.reflect Package; 

class X-{ 
    
} 

public class GetClassDemo01 { 
    public static void main (String [] args) { 
        Class C1 = null <?>; // specified generic 
        Class C2 = null <?>; 
        Class C3 <?> null =; 
        
        the try { 
            C1 = the Class.forName ( "com.reflect.X");.. 1 // most commonly used form of dynamic loading 
        } the catch (a ClassNotFoundException E) { 
            e.printStackTrace (); 
        } 
        C2 = X-new new () .getClass ();. // 2 by the object class instance of a method 
        c3 = X.class; // 3 .class by instantiating the class. 
        
        System.out.println (c1.getName ()); // get the class name  
        System.out.println (c2.getName ());
        System.out.println (c3.getName ()); 
    }
}
com.reflect.X 
com.reflect.X 
com.reflect.X

No reference configuration example of object:

com.reflect Package; 
// use newInstance () method instantiates objects of other classes, instances of the class must be guaranteed in the presence of a non-argument constructor 
class the Person { 
    Private String name; 
    Private int Age; 
    public String getName () { 
        return name ; 
    } 
    public void the setName (String name) { 
        this.name = name; 
    } 
    public int getAge () { 
        return Age; 
    } 
    public void the setAge (int Age) { 
        this.age = Age; 
    } 
    public String toString () { 
        return " name: "+ this.name +", Age: "+ this.age; 
        
    } 
} 
public class InstanceDemo { 
    public static void main (String [] args) {
        <?> Class c = null; // specified generic 
        the try { 
            C = the Class.forName ( "com.reflect.Person"); // incoming complete data packet to the class name of the class is instantiated. 
        } The catch (a ClassNotFoundException E) { 
            e.printStackTrace (); 
        } 
        
        the person per = null; // declare the person object 
        the try { 
            per = (the person) c.newInstance (); // instantiate an object class person 
        } the catch (Exception E) { 
            e.printStackTrace () ; 
        } 
        
        per.setName ( "YQ"); 
        per.setAge (18 is); 
        System.out.println (per); 
    } 

}
Name: YQ, Age: 18

There are examples of configuration parameters: Procedure:

1. The entire configuration made by the method of the present getConstructors class category class ()

2. The array of objects to pass a constructor, which contains the various parameters required constructor

3. After passing through the object instance Constructor

package com.reflect;

import java.lang.reflect.Constructor;

class Persons{
    private String name;
    private int age;
    
    public Persons(String name,int age){
        this.setName(name);
        this.setAge(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;
    }
    public String toString(){
        return "姓名:"+this.name+",年龄:"+this.age;
    }
}
public class InstanceDemo02 {
    public static void main(String[] args) {
        Class<?> c = null;
        try{
            c=Class.forName("com.reflect.Persons");
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }
        
        Persons per = null;
        Constructor<?> cons[] =null;                    //声明一个表示构造方法的数组
        cons=c.getConstructors();                       //通过反射取得全部构造
        try{
            per=(Persons) cons[0].newInstance("YQ",20); //向构造方法中传递参数,因为只有一个构造,所以数组下标为0
        }catch(Exception e){
            e.printStackTrace();
        }
        
        System.out.println(per);
    }

}
 
姓名:YQ,年龄:20

二、反射的应用:

Constructor:表示类中的构造方法

Field:表示类中的属性

Method:表示类中的方法

package com.getinterfac;

interface China { 
    public String NATIONAL="China";      //定义全局常量
    public String AUTHOR="YQ";
    public void sayChina();                           //定义无参抽象方法
    public String sayHello(String name,int age);      //定义有参抽象方法

}

 

package com.getinterfac;


public class Person1 implements China{
    private String name;
    private int age;
    
    public Person1(){
        
    }
    public Person1(String name,int age){
        this.setAge(age);
        this.setName(name);
    }
    
    public void setName(String name){
        this.name=name;
    }
    public String getName(){
        return this.name;
    }
    public void setAge(int age){
        this.age=age;
    }
    public int getAge(){
        return this.age;
    }
    
    public void sayChina(){
        System.out.println("作者:"+AUTHOR+",国家:"+NATIONAL);
    }
    public String sayHello(String name,int age){
        return name+",你好!我今年"+age+"岁了!";
    }
    
}

取得所实现的Person类全部接口:

package com.getinterfac;

import java.lang.reflect.Constructor;

public class GetInterfaceDemo {
    public static void main(String[] args) {
        Class<?> c = null;
        try{
            c=Class.forName("com.getinterfac.Person1");   //传入要实例化类的完整包.类名称
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }
        
        Class<?> c1[] = c.getInterfaces();                //取得实现的全部接口
        for(int i=0; i<c1.length; i++){
            System.out.println("实现的接口名称:"+c1[i].getName());
        }
        
        Class<?> c2 = c.getSuperclass();
        System.out.println("取得person父类接口名称:"+c2.getName());
        
        Constructor<?> con[] = c.getConstructors();
        for(int i=0 ;i<con.length;i++){
            System.out.println("取得person类中全部的构造方法:"+con[i]);
        }
    }

}
实现的接口名称:com.getinterfac.China
取得person父类接口名称:java.lang.Object
取得person类中全部的构造方法:public com.getinterfac.Person1()
取得person类中全部的构造方法:public com.getinterfac.Person1(java.lang.String,int)

取得一个类的全部构造方法:

package com.getinterfac;

import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;
//取得类中全部的构造方法
public class GetInterfaceDemo02 {
    public static void main(String[] args) {
        Class<?> c = null;
        try{
            c=Class.forName("com.getinterfac.Person1");
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }
        
        Constructor<?> cons[] = c.getConstructors();     //取得全部构造
        for(int i=0;i<cons.length;i++){                  //循环输出
            System.out.print("构造方法:");
            
            int mo = cons[i].getModifiers();
            System.out.print(Modifier.toString(mo)+"@ ");
            
            System.out.print(cons[i].getName());          //取出构造方法名称
            System.out.print("(");
            Class<?> p[] = cons[i].getParameterTypes();  //列出构造中的参数类型
            for(int j=0;j<p.length;j++){
                System.out.print(p[j].getName()+" arg"+i);//打印参数类型
                if(j<p.length-1){                         //判断是否输出
                    System.out.print(",");
                }
            }
            System.out.println("){}");
        }
    }

}
构造方法:public@ com.getinterfac.Person1(){}
构造方法:public@ com.getinterfac.Person1(java.lang.String arg1,int arg1){}

取得一个类全部方法定义:

package com.getinterfac;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class GetMethodDemo {
    public static void main(String[] args) {
        Class<?> c = null;
        try{
            c=Class.forName("com.getinterfac.Person1");
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }
        
        Method m[]= c.getMethods();          //取得全部的方法
        for(int i=0 ;i<m.length;i++){
            Class<?> r=m[i].getReturnType(); //得到方法的返回值类型
            Class<?> p[] = m[i].getParameterTypes();//得到全部的参数类型
            
            int xx=m[i].getModifiers();      //得到方法的修饰符
            System.out.print(Modifier.toString(xx)+" ");//还原修饰符
            System.out.print(r.getName()+" ");          //得到方法名称
            System.out.print(m[i].getName()+" ");     //取得方法名称
            System.out.print("(");
            for(int x=0;x<p.length;x++){
                System.out.print(p[x].getName()+" "+"arg"+x);//输出参数
                if(x<p.length-1){                         //判断是否输出
                    System.out.print(",");
                }
            }
            Class<?> ex[] = m[i].getExceptionTypes();      //得到全部的异常抛出
            if(ex.length>0){                                //判断是否有异常
                System.out.print(")throws ");
            }else{
                System.out.print(")");
            }
            for(int j=0 ;j<ex.length;j++){
                System.out.print(ex[j].getName());          //输出异常信息
                if(j<ex.length-1){                          //判断是否输出
                    System.out.print(",");
                }
            }
            System.out.println();
            
        }
        
    }

}
public java.lang.String getName ()
public void setName (java.lang.String arg0)
public void sayChina ()
public int getAge ()
public void setAge (int arg0)
public java.lang.String sayHello (java.lang.String arg0,int arg1)
public final void wait (long arg0,int arg1)throws java.lang.InterruptedException
public final native void wait (long arg0)throws java.lang.InterruptedException
public final void wait ()throws java.lang.InterruptedException
public boolean equals (java.lang.Object arg0)
public java.lang.String toString ()
public native int hashCode ()
public final native java.lang.Class getClass ()
public final native void notify ()
public final native void notifyAll ()

 取得person类中的全部属性:

package com.getinterfac;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

public class GetFieldDemo {
    public static void main(String[] args) {
        Class<?> c = null;
        try{
            c=Class.forName("com.getinterfac.Person1");
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }
        
        {
            Field f[] = c.getDeclaredFields();    //取得本类属性
            for(int i=0;i<f.length;i++){
                Class<?> r = f[i].getType();      //取得属性的类型
                
                int mo = f[i].getModifiers();     //得到修饰符数字
                String priv = Modifier.toString(mo);//取得属性的修饰符
                System.out.print("本类属性:"+priv+" ");//输出修饰符
                
                System.out.print(r.getName()+" ");//输出属性类型
                System.out.print(f[i].getName());//输出属性名称
                System.out.println(";");
            }
        }
        
        {
            Field f[] =c.getFields();
            for(int i=0;i<f.length;i++){
                Class<?> r = f[i].getType();      //取得属性的类型
                int mo = f[i].getModifiers();     //得到修饰符数字
                String priv = Modifier.toString(mo);//取得属性的修饰符
                System.out.print("公共属性:"+priv+" ");//输出修饰符
                System.out.print(r.getName()+" ");//输出属性类型
                System.out.print(f[i].getName());//输出属性名称
                System.out.println(";");
            }
        }
    }

}
本类属性:private java.lang.String name;
本类属性:private int age;
公共属性:public static final java.lang.String NATIONAL;
公共属性:public static final java.lang.String AUTHOR;

调用Person类中的sayChina()、sayHello()方法:

package test;

import java.lang.reflect.Method;

public class InvokeSayChina {
    public static void main(String[] args) {
        Class<?> c =null;
        try{
            c=Class.forName("test.Person1");
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }
        
        try{
            Method m = c.getMethod("sayChina");
            m.invoke(c.newInstance());
        }catch(Exception e){
            e.printStackTrace();
        }
        
        try{
            Method m2 = c.getMethod("sayHello", String.class,int.class);
            String s = null;
            s=(String) m2.invoke(c.newInstance(), "YQ",20);
            System.out.println(s);
        }catch(Exception e){
            e.printStackTrace();
        }
    }

}
作者:YQ,国家:China
YQ,你好!我今年20岁了!

调用person类中的setter、getter方法:

package com.getinterfac;

import java.lang.reflect.Method;

public class InvokeSetGetDemo {
    public static void setter(Object obj,String st,Object value,Class<?> type){
        try{
            Method m = obj.getClass().getMethod("set"+initStr(st), type);
            m.invoke(obj, value);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    
    public static void getter(Object obj,String st){
        try{
            Method m = obj.getClass().getMethod("get"+initStr(st));
            System.out.println(m.invoke(obj));
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    
    private static String initStr(String old) {
        String str = old.substring(0,1).toUpperCase()+old.substring(1);
        return str;
    }

    public static void main(String[] args) {
        Class<?> c = null;
        Object obj = null;
        try{
            c=Class.forName("com.getinterfac.Person1");
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }
        
        try{
            obj=c.newInstance();
        }catch(InstantiationException e){
            e.printStackTrace();
        }catch(IllegalAccessException e){
            e.printStackTrace();
        }
        
        setter(obj, "name", "YQ", String.class);
        setter(obj, "age", 30, int.class);
        System.out.print("姓名:");
        getter(obj,"name");
        System.out.print("年龄:");
        getter(obj,"age");
    }

}
姓名:YQ
年龄:30

直接操作类中的属性:

 

package com.getinterfac;

import java.lang.reflect.Field;

public class InvokeFieldDemo {
    public static void main(String[] args) throws Exception{
        Class<?> c = null;
        Object obj = null;
        
        try{
            c=Class.forName("com.getinterfac.Person1");
            obj=c.newInstance();
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }
        
        Field nameField=c.getDeclaredField("name");   //取得name属性
        Field ageField=c.getDeclaredField("age");     //取得age属性
        
        nameField.setAccessible(true);                //将name属性设置成可被外部访问
        nameField.set(obj, "YQ");
        ageField.setAccessible(true);                 //将age属性设置成可被外部访问
        ageField.set(obj, 20);
        
        System.out.println("姓名:"+nameField.get(obj));//通过get取得属性内容
        System.out.println("年龄:"+ageField.get(obj)); //通过get取得属性内容
    }

}

 

姓名:YQ
年龄:20

 

认真看过此篇的小伙伴,如果对你有收获,请点击旁边的小手推荐一下,如果有误,欢迎指正,谢谢!

版权声明:此篇为本人原创,转载请标明出处https://www.cnblogs.com/YQian/p/10930788.html

我的博客园地址:https://www.cnblogs.com/YQian/

 

Guess you like

Origin www.cnblogs.com/YQian/p/10930788.html