/*
* 第一种使用forName(String className),其中className一定是包含包的名字,下面的demo就是包的名字,Test是类的名字
*/
Class cls=Class.forName("demo.Test");
Test test=(Test)cls.newInstance(); //这里只是使用了默认的构造方法实例化对象
Class cls=Test.class;
Test test=new Test(); Class cls=test.getClass();
Modifier.toString(Test.class.getModifiers()) //得到Test类的修饰符
package demo;
import java.util.jar.Attributes.Name;
import javax.print.attribute.standard.MediaSize.NA;
public class Test {
public String name;
private int age;
public Test() {
this.name = "陈加兵";
this.age = 23;
}
public Test(String name, int age) {
this.name = name;
this.age = age;
}
public void display() {
System.out.println("name=" + this.name + "----age=" + this.age);
}
public void set(String name, int age) {
this.name = name;
this.age = age;
}
private int getAge() {
return this.age;
}
}
Class class1=Class.forName("demo.Test"); //静态加载Class
Test test=(Test)class1.newInstance(); //调用默认的构造方法(public Test())实例化对象,由于没有使用泛型,因此需要强转
test.display(); //调用display方法
/*
*调用public Test(String name,int age)得到Constructor的两种形式
* 1.Constructor constructor=class1.getConstructor(new Class[]{String.class,int.class});
* 2.Constructor constructor=class1.getConstructor(String.class,int.class);这个和上面的是一样的,就是使用的参数形式不一样
*
*
*
*
*使用newInstance()构造对象的两种方式
* 1.Test test=(Test)constructor.newInstance(new Object[]{"chenjiabing",22});
* 2.Test test=(Test)constructor.newInstance("chenjiabing",22); 只是形式不同而已,不过我还是喜欢上面的形式
*
*/
/*
* 调用public Test(String name,int age)
* Class.getConstructor()得到的是公共的构造方法,如果有私有的构造方法,那么就会报错,这时就要使用getDeclaredConstructor(Class<?>... parameterTypes)
* Test test=(Test)constructor.newInstance("陈加兵",22);
*
*
* 调用public Test()
* Constructor constructor=class1.getConstructor(null);
* Test test=(Test)constructor.newInstance(null);
*
*
* 调用private Test(int age)
* Constructor constructor=class1.getDeclaredConstructor(new Class[]{int.class});
constructor.setAccessible(true); //因为private类型是不可以直接访问的,因此需要设置访问权限为true
Test test=(Test)constructor.newInstance(new Object[]{1000});
*/
Class class1=Class.forName("demo.Test");
//访问public Test(String name,int age)
// Constructor constructor=class1.getConstructor(new Class[]{String.class,int.class});
// Test test=(Test)constructor.newInstance("陈加兵",22);
//访问默认的构造方法
// Constructor constructor=class1.getConstructor(null);
// Test test=(Test)constructor.newInstance(null);
//访问private类型的构造方法
Constructor constructor=class1.getDeclaredConstructor(new Class[]{int.class});
constructor.setAccessible(true);
Test test=(Test)constructor.newInstance(new Object[]{1000});
test.display();
/*
* 获取Method对象的两种方式:
* 1.Method method_set=class1.getMethod("set", new Class[]{String.class,int.class});
* 2.Method method_set=class1.getMethod("set", String.class,int.class);
*
*
* 使用Method.invoke()调用方法的两种方式
* 1.Object o=method_set.invoke(test, new Object[]{"陈加兵",200});
* 2.Object object=method_set.invoke(test, "陈加兵",2000);
*/
/*
* 获取公共方法(public):
* 1.Method method=class1.getMethod("display",null); //public void display()
* 2.Method method_set=class1.getMethod("set", new Class[]{String.class,int.class}); //获取public void set(String name,int age)
*
*
* 获取私有方法(private,protected)
* 1.Method method_getAge=class1.getDeclaredMethod("getAge", null);
*/
//使用构造方法构造一个Test对象
Class class1 =Class.forName("demo.Test");
Constructor<Test> constructor=class1.getDeclaredConstructor(new Class[]{String.class,int.class});
Test test=constructor.newInstance(new Object[]{"陈加兵",22});
Method method=class1.getMethod("display",null); //获取public void display()方法的Method对象
Object obj=method.invoke(test, null); //调用方法display
//获取public void set(String name,int age)
// Method method_set=class1.getMethod("set", new Class[]{String.class,int.class});
Method method_set=class1.getMethod("set", String.class,int.class);
// Object o=method_set.invoke(test, new Object[]{"陈加兵",200});
Object object=method_set.invoke(test, "陈加兵",2000);
test.display();
//获取私有方法private int getAge()
Method method_getAge=class1.getDeclaredMethod("getAge", null);
method_getAge.setAccessible(true); //必须设置访问权限为true
//判断返回值类型是否为int类型的
if("int".equals(method_getAge.getReturnType().toString()))
{
int ReturnData=(int) method_getAge.invoke(test, null); //调用并且获取返回值
System.out.println(ReturnData);
}
/*
* 获取public修饰的成员变量:
* 1.Field field=class1.getField("name"); //获取public的成员变量name的Filed对象
*
* 获取private,protected修饰的成员变量:
* 1. Field field2=class1.getDeclaredField("age");
*/
Class class1=Class.forName("demo.Test");
Test test=new Test("陈加兵",1000);
Field field=class1.getField("name"); //获取public的成员变量name的Filed对象
System.out.println(field.get(test)); //获得test对象中的name属性的值
//获取private int age的Field对象
Field field2=class1.getDeclaredField("age");
field2.setAccessible(true); //设置访问权限
System.out.println(field2.get(test));
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有