软件测试学习之路

Java学习笔记 27 - 类的加载器、反射

2018-08-24  本文已影响2人  乘风破浪的姐姐

本文内容介绍
1、类加载器
2、反射构造方法
3、反射成员变量
4、反射成员方法
5、反射配置文件运行类中的方法

01类加载器

02 反射

  1. 有三个方法
    方式一: 通过Object类中的getClass()方法
    Person person = new Person();
    Class clazz = person.getClass();
    方式二: 通过 类名.class 获取到字节码文件对象(任意数据类型都具备一个class静态属性,看上去要比第一种方式简单)。
    Class clazz = Person.class;
    方式三: 通过Class类中的方法(将类名作为字符串传递给Class类中的静态方法forName即可)。
    Class c3 = Class.forName("Person");
    注:第三种和前两种的区别是:
    前两种你必须明确Person类型.
    后面是指定这种类型的字符串就行.这种扩展更强.我不需要知道你的类.我只提供字符串,按照配置文件加载就可以了
  1. 得到Class对象的三个方法代码演示:

             /*
              * 获取.class字节码文件对象的方式
              *      1:通过Object类中的getObject()方法
              *      2: 通过 类名.class 获取到字节码文件对象
              *      3: 反射中的方法,
              *          public static Class<?> forName(String className) throws ClassNotFoundException
              *          返回与带有给定字符串名的类或接口相关联的 Class 对象 
              */
             public class ReflectDemo {
                 public static void main(String[] args) throws ClassNotFoundException {
                     // 1: 通过Object类中的getObject()方法
                     // Person p1 = new Person();
                     // Class c1 = p1.getClass();
                     // System.out.println("c1 = "+ c1);
    
                     // 2: 通过 类名.class 获取到字节码文件对象
                     // Class c2 = Person.class;
                     // System.out.println("c2 = "+ c2);
    
                     // 3: 反射中的方法
                     Class c3 = Class.forName("cn.itcast_01_Reflect.Person");// 包名.类名
                     System.out.println("c3 = " + c3);
                 }
             }
    

Person类

            package cn.itcast_01_Reflect;
            public class Person {
                //成员变量
                public String name;
                public int age;
                private String address;

                //构造方法
                public Person() {
                    System.out.println("空参数构造方法");
                }
                
                public Person(String name) {
                    this.name = name;
                    System.out.println("带有String的构造方法");
                }
                //私有的构造方法
                private Person(String name, int age){
                    this.name = name;
                    this.age = age;
                    System.out.println("带有String,int的构造方法");
                }
                
                public Person(String name, int age, String address){
                    this.name = name;
                    this.age = age;
                    this.address = address;
                    System.out.println("带有String, int, String的构造方法");
                }
                
                //成员方法
                //没有返回值没有参数的方法
                public void method1(){
                    System.out.println("没有返回值没有参数的方法");
                }
                //没有返回值,有参数的方法
                public void method2(String name){
                    System.out.println("没有返回值,有参数的方法 name= "+ name);
                }
                //有返回值,没有参数
                public int method3(){
                    System.out.println("有返回值,没有参数的方法");
                    return 123;
                }
                //有返回值,有参数的方法
                public String method4(String name){
                    System.out.println("有返回值,有参数的方法");
                    return "哈哈" + name;
                }
                //私有方法
                private void method5(){
                    System.out.println("私有方法");
                }

                @Override
                public String toString() {
                    return "Person [name=" + name + ", age=" + age + ", address=" + address+ "]";
                }
            }

配置文件:

        #className=cn.itcast.demo3.Student
        #methodName=study
        className=cn.itcast.demo3.Person
        methodName=eat
        #className=cn.itcast.demo3.Worker
        #methodName=job
上一篇 下一篇

猜你喜欢

热点阅读