欢迎光临散文网 会员登陆 & 注册

Java Web:Java.lang,反射调用,获取类的对应的Class对象,属性,构造方法【诗书画唱】

2020-12-30 23:09 作者:诗书画唱  | 我要投稿



例子START

反射调用student中的方法对象start

import java.lang.reflect.Method;


public class Demo {


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

// TODO Auto-generated method stub

        //反射调用方法

Class cls = Class.forName("com.SSHC.bean.Student");

//通过反射创建一个Student对象

//Student s = new Student();

Object s = cls.newInstance();//类型擦除

//获取study方法对象

Method m1 = cls.getDeclaredMethod("study");

//反射调用

//s.study();

m1.invoke(s);


//获取buy方法对象

//s.buy("西游记",88.0);

Method m2 = cls.getDeclaredMethod("buy"

, String.class, Double.class);

m2.invoke(s, "西游记", 88.0);


//获取exam方法对象

Method m3 = cls.getDeclaredMethod("exam");

//Integer a = s.exam();

Object a = m3.invoke(s);

System.out.println(a);


//获取help方法对象

Method m4 = cls.getDeclaredMethod("help", String.class);

//String str = s.help("红楼梦");

Object str = m4.invoke(s, "红楼梦");

System.out.println(str);

}


}

package com.SSHC.bean;


public class Student {

    private String name;

    private Integer age;

    private String sex;

    public Student(){

   

    }

    public Student(String n){

    this.name = n;

    }

    public Student(String n,Integer a){

    this.name = n;

    this.age = a;

    }

    //没有参数没有返回值的方法

    public void study(){

    System.out.println("正在学习");

    }

    //有参数没有返回值的方法

    public void buy(String bname,Double price){

    System.out.println("买了一个书,书名是:" + bname);

    }

    //没有参数有返回值的方法

    public Integer exam(){

    return 98;

    }

    //有参数有返回值的方法

    public String help(String name){

    return "《" + name + "》";

    }

}



反射调用student中的方法对象end


输入一个类名,输入一个方法名,反射调用方法(如eat方法) START



import java.lang.reflect.Method;


public class Tt {


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

// TODO Auto-generated method stub

        //输入一个类名,输入一个方法名,反射调用方法

String methodName = "eat";

String clsName = "com.SSHC.bean.Dog";


Class cls = Class.forName(clsName);

//创建一个Student对象

Object stu = cls.newInstance();

//获取方法对象

Method m = cls.getDeclaredMethod(methodName);

m.invoke(stu);

}


}


package com.SSHC.bean;


public class Dog {

    public void eat(){

    System.out.println("正在吃东西");

    }

}



输入一个类名,输入一个方法名,反射调用方法END


获取String类中的所有的构造方法START

package com.SSHC.bean;


public class Student {

    private String name;

    private Integer age;

    private String sex;

    public Student(){

   

    }

    public Student(String n){

    this.name = n;

    }

    public Student(String n,Integer a){

    this.name = n;

    this.age = a;

    }

    //没有参数没有返回值的方法

    public void study(){

    System.out.println("正在学习");

    }

    //有参数没有返回值的方法

    public void buy(String bname,Double price){

    System.out.println("买了一个书,书名是:" + bname);

    }

    //没有参数有返回值的方法

    public Integer exam(){

    return 98;

    }

    //有参数有返回值的方法

    public String help(String name){

    return "《" + name + "》";

    }

}


package TEXT;


import java.lang.reflect.Constructor;

import java.lang.reflect.Field;

import java.lang.reflect.Method;


public class Test {


public static void main(String[] args) {

// TODO Auto-generated method stub

        //获取Student类的对应的Class对象

// Student s = new Student();

// //方法一:

// Class c1 = s.getClass();

// //方法二:

// Class c2 = Student.class;

//方法三:

try {

Class c3 = Class.forName("com.SSHC.bean.Student");

//通过反射获取指定类的所有属性Field

Field[]fs = c3.getDeclaredFields();

// for(int i = 0;i < fs.length;i ++) {

// //取出每个属性

// Field f = fs[i];

// //获取每个属性的名和类型

// String fn = f.getName();

// System.out.println(fn);

// Class ft = f.getType();

// System.out.println(ft.getName());

// }


//java.util.Date类有哪些属性

// Class c = Class.forName("java.util.Date");

// Field[]f1 = c.getDeclaredFields();

// for(int i = 0;i < f1.length;i ++) {

// Field f = f1[i];

// System.out.println(f.getName());

// Class ft = f.getType();

// System.out.println(ft.getName());

// }


//获取Student类中的所有方法Method

// Method[]ms = c3.getDeclaredMethods();

// for(int i = 0;i < ms.length;i ++) {

// //获取类中的每个方法

// Method m = ms[i];

// //获取方法名

// String mn = m.getName();

// System.out.println(mn);

// //获取返回类型

// Class mc = m.getReturnType();

// //System.out.println(mc.getName());

// //方法参数列表的类型

// Class[]mps = m.getParameterTypes();

// for(int j = 0;j < mps.length;j ++) {

// //取出每个方法中的单个参数

// Class mpc = mps[j];

// System.out.println("参数类型是:" + mpc.getName());

// }

// }


//获取Student类中所有的构造方法Constructor

// Constructor[]cs = c3.getDeclaredConstructors();

// for(int i = 0;i < cs.length;i ++) {

// //获取每个构造方法

// Constructor ct = cs[i];

// //获取构造方法的参数类型

// Class[]cfs = ct.getParameterTypes();

// System.out.println("第" + i + "个构造方法的参数列表:");

// for(int j = 0;j < cfs.length;j ++) {

// Class cc = cfs[j];

// System.out.println(cc.getName());

// }

// }

//获取String类中的所有的构造方法

Class ck = Class.forName("java.lang.String");

Constructor []cks = ck.getDeclaredConstructors();

for(int i = 0;i < cks.length;i ++) {

Constructor ct = cks[i];

System.out.println("第" + (i + 1) + "个构造方法的参数:");

Class[]cfs = ct.getParameterTypes();

for(int j = 0;j < cfs.length;j ++) {

//取出每个参数

Class cfc = cfs[j];

System.out.println(cfc.getName());

}

}

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}


}



获取String类中的所有的构造方法END





获取Student类中所有的构造方法Constructor   START




//获取Student类中所有的构造方法Constructor

Constructor[]cs = c3.getDeclaredConstructors();

for(int i = 0;i < cs.length;i ++) {

//获取每个构造方法

Constructor ct = cs[i];

//获取构造方法的参数类型

Class[]cfs = ct.getParameterTypes();

System.out.println("第" + i + "个构造方法的参数列表:");

for(int j = 0;j < cfs.length;j ++) {

Class cc = cfs[j];

System.out.println(cc.getName());

}

}




获取Student类中所有的构造方法Constructor   END




获取Student类中的所有方法Method   START



//获取Student类中的所有方法Method

Method[]ms = c3.getDeclaredMethods();

for(int i = 0;i < ms.length;i ++) {

//获取类中的每个方法

Method m = ms[i];

//获取方法名

String mn = m.getName();

System.out.println(mn);

//获取返回类型

Class mc = m.getReturnType();

//System.out.println(mc.getName());

//方法参数列表的类型

Class[]mps = m.getParameterTypes();

for(int j = 0;j < mps.length;j ++) {

//取出每个方法中的单个参数

Class mpc = mps[j];

System.out.println("参数类型是:" + mpc.getName());

}

}






获取Student类中的所有方法Method   END




通过反射获取指定类的所有属性Field   START


Class c3 = Class.forName("com.SSHC.bean.Student");

//通过反射获取指定类的所有属性Field

Field[]fs = c3.getDeclaredFields();

for(int i = 0;i < fs.length;i ++) {

//取出每个属性

Field f = fs[i];

//获取每个属性的名和类型

String fn = f.getName();

System.out.println(fn);

Class ft = f.getType();

System.out.println(ft.getName());

}




通过反射获取指定类的所有属性Field   END




java.util.Date类有哪些属性  START

//java.util.Date类有哪些属性

Class c = Class.forName("java.util.Date");

Field[]f1 = c.getDeclaredFields();

for(int i = 0;i < f1.length;i ++) {

Field f = f1[i];

System.out.println(f.getName());

Class ft = f.getType();

System.out.println(ft.getName());

}






java.util.Date类有哪些属性  END

例子END





反射PPT  START




反射PPT  END

Java.lang PPT START







Java.lang PPT END


讲义 START

一、Class类

二、反射


小红,19岁,女

小明,20岁,男

小华,20岁,女

姓名年龄和性别,创建出一个Student,包含有姓名学生和年龄


Student,study方法,eat方法,姓名年龄和性别

Cat,play方法,eat方法,毛色品种

Car,run方法,repared方法,品牌价格颜色

类名方法数组和属性数组

创建一个Class类,包含类名,方法列表和属性列表,继承自谁

java类的使用说明书,如果需要了解一个指定的类,就需要获取到指定类的使用说明书

如果想了解某一个类包含有哪些方法和属性以及继承自谁,那么就可以直接获取当前这个类对应的Class对象就可以了


如果需要使用反射技术,就必须要先获取类的Class对象


为什么不想在程序中使用过多的import语句?

方法中没有包含构造方法。



讲义 END


Java Web:Java.lang,反射调用,获取类的对应的Class对象,属性,构造方法【诗书画唱】的评论 (共 条)

分享到微博请遵守国家法律