一 字节码对象的获取方式
1>给定字节码文件的全限定名(包名+类名)
2>通过对象去获取字节码对象
3>通过类的class字段去获取
代码如下–>
domain类
public class Student {
/**
* 自定义字段
*/
String name;
int age;
/**
* 无参构造器
*/
public Student(){}
/**
* 有参构造器
* 默认无参构造器失效
*/
public Student(String aName, int aAge){
name = aName;
age = aAge;
}
/**
* 自定义方法
*/
public void sayHi(){
System.out.println("你们好,我是" + name);
System.out.println("今年:" + age);
System.out.println("-------------");
}
/**
* setter 和 getter 方法
*/
public void setName(String aName){
name = aName;
}
public String getName(){
return name;
}
public void setAge(int Aage){
age = Aage;
}
public int getAge(){
return age;
}
/**
* 自定义方法2
*/
public void learn(String course){
System.out.println(name + "今天学习了"+course+"课") ;
}
/**
* 覆盖toString方法
* @return
*/
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
测试类
/**
* 字节码对象的获取方式
*/
public class TestClass01 {
public static void main(String[] args) throws ClassNotFoundException {
// 1>获取字节码对象
// 给定字节码文件的全限定名(包名+类名)
// jvm动态装载在workplace.practice.day0904.Student.class
// clz就是workplace.practice.day0904.Student.class的字节码对象
Class clz = Class.forName("workplace.practice.day0904.Student");
System.out.println(clz);
// 2>给定一个对象,通过对象去获取字节码对象
Student stu = new Student();
Class clzz = stu.getClass();
System.out.println(clzz);
// 字节码对象只有一个 比较地址得到true
System.out.println(clz == clzz);
// 3>直接通过类的class字段获取
Class clzzz = Student.class;
System.out.println(clzzz);
System.out.println(clzzz == clz);
}
}
二 构造器的获取
1>获取所有构造器
2>获取指定构造器
记得抛出异常
domain类
public class Student {
/**
* 自定义字段
*/
String name;
int age;
/**
* 无参构造器
*/
public Student(){}
// 模拟私有构造器
private Student(String aName){
name = aName;
}
/**
* 有参构造器
* 默认无参构造器失效
*/
public Student(String aName, int aAge){
name = aName;
age = aAge;
}
/**
* 自定义方法
*/
public void sayHi(){
System.out.println("你们好,我是" + name);
System.out.println("今年:" + age);
System.out.println("-------------");
}
/**
* setter 和 getter 方法
*/
public void setName(String aName){
name = aName;
}
public String getName(){
return name;
}
public void setAge(int Aage){
age = Aage;
}
public int getAge(){
return age;
}
/**
* 自定义方法2
*/
public void learn(String course){
System.out.println(name + "今天学习了"+course+"课") ;
}
/**
* 覆盖toString方法
* @return
*/
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
测试类
/**
* 获取所有构造器
*/
public class TestClass02_constructor {
public static void main(String[] args) {
Class clz = Student.class;
// 构造器不止一个 所以用数组
// getConstructors()获取的是公共的public
Constructor[] constructors = clz.getConstructors();
// 数组的话 就可以遍历里面的元素
for (Constructor c1: constructors) {
System.out.println(constructor);
}
// 分隔符
System.out.println("--------------");
// getDeclaredConstructors()获取private和public
Constructor[] declaredConstructors = clz.getDeclaredConstructors();
for (Constructor c2 : declaredConstructors) {
System.out.println(constructor);
}
}
}
/**
* 获取指定构造器
*/
public class TestClass02_constructor2 {
public static void main(String[] args) throws NoSuchMethodException {
Class clz = Student.class;
//获取无参构造器
Constructor c1 = clz.getConstructor();
System.out.println(c1);
//获取有参构造器
Constructor c2 = clz.getConstructor(String.class, int.class);
System.out.println(c2);
//获取私有构造器
Constructor c3 = clz.getDeclaredConstructor(String.class);
System.out.println(c3);
}
}
版权声明:本文为Bowl_IronMan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。