java class 使用_Java反射机制(Class类的使用)

1:通过无参构造实例化对象

package cn.itcast;

/*

* 通过无参构造实例化对象

* 通过Class类本身实例化对象,使用newInstance方法

* 需要注意的是:实例化类中存在一个无参构造的方法,如果不存在将无法实例化Person对象;

* 如果没有则报异常:InstantionException

* */

public class ClassDemo03 {

public static void main(String[] args) {

//创建Class对象

Class class1 = null;

try {

class1=Class. forName("cn.itcast.Person");

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//声明Person对象

Person p1 = null;

//实例化Person对象

try {

p1 = (Person) class1.newInstance();

} catch (InstantiationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalAccessException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

System. out.println(p1);

p1.setName("小李");

p1.setAge(20);

p1.setSex('男');

System. out.println(p1);

}

}

打印结果:

Person [name=null, age=0,sex= ]

Person [name=小李, age=20, sex=男]

2:通过有参构造实例化对象

如果实例化类中确实没有无参构造,就需要明确地调用类中的构造方法,将参数传递进去之后就可以才可以实例化操作;

public final class Constructor

extends AccessibleObject

implements GenericDeclaration, Member

操作步骤:

1:获取要实例化类的带参构造

Constructor> c2 = class1.getConstructor(String. class,int.class, char.class);

//获取全部的构造方法

Constructor[] c1 = class1.getConstructors();

for (Constructor getCon : c1) {

//输出的全是public方法

System. out.println(getCon);

}

打印:

public cn.itcast.Person()

public cn.itcast.Person(java.lang.String,int,char)

2:通过c1=newInstance(),实例化对象

代码展示:

package cn.itcast;

import java.lang.reflect.Constructor;

public class ClassDemo04 {

public static void main(String[] args) {

//创建Class对象

Class> class1 = null;

try {

class1=Class. forName("cn.itcast.Person");

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//声明Person对象

Person p1 = null;

//获取全部的构造方法

Constructor[] c1 = class1.getConstructors();

for (Constructor getCon : c1) {

//输出的全是public方法

System. out.println(getCon);

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

// System.out.println(getCon.getParameterTypes());

// System.out.println(getCon.getModifiers());

}

try{

//获取Person类中的带参构造

Constructor> c2 = class1.getConstructor(String.class ,int.class, char.class );

p1 = (Person) c2. newInstance("小张",24, '男');

} catch(Exception e){

e.printStackTrace();

}

System. out.println(p1);

}

}

package cn.itcast;

public class Person {

private String name;

private int age;

private char sex;

public Person() {

super();

}

public Person(String name, int age, char sex) {

super();

this.name = name;

this.age = age;

this.sex = sex;

}

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 char getSex() {

return sex;

}

public void setSex(char sex) {

this.sex = sex;

}

public void eat()

{

System.out.println("吃了");

}

@Override

public String toString() {

return "Person [name=" + name + ", age=" + age + ", sex=" + sex + "]";

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值