java 反射

package com.data.entity;

import java.util.ArrayList;
import java.util.List;

public class MyList {
    private String name;

    public MyList() {}

    public MyList(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "MyList{" +
                "name='" + name + '\'' +
                '}';
    }

    public void setName(String name) {
        this.name = name;
    }


}
#### 获取类对象-Class

1. 类名.class
   Class<类名> 对象名=类名.class

2. 对象名.getClass()
   Class 对象名=对象名.getClass();
   
3. Class.forName
   Class 对象名=Class.forName("类的全限定名");


#### 常用方法

1. newInstance(): 利用类对象中的无参构造构建一个类的实例对象
2. Constructor<类名>  getDeclaredConstructor(参数列表的类对象1,参数列表的类对象2,..): 获取指定参数列表的有参构造器对象
   - newInstance(实参列表): 利用指定有参构造器对象构建类的实例对象




import com.data.entity.MyList;

import java.lang.reflect.Constructor;

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

        Class c1=MyList.class;
        MyList stu1=c1.newInstance();

//        MyList stu=new MyList();
//        Class c2=stu.getClass();

        Class c3=Class.forName("com.data.entity.MyList");
        MyList stu2=(MyList) c3.newInstance();

        stu1.setName("张");
        stu2.setName("李");
        System.out.println(stu1);
        System.out.println(stu2);

        //获取全属性的有参构造器对象
        //Constructor con =c1.getDeclaredConstructor(String.class);
        Constructor con =c3.getDeclaredConstructor(String.class);
        //利用有参构造器对象构建的实例
        MyList stu3=con.newInstance("王");
        System.out.println(stu3);

    }
}

### 反射的优缺点

#### 优点

1. 打破封装
2. 提升代码扩展性

#### 缺点

1. 打破封装
2. 降低对象属性的安全性

### 反射掌握重点

1. 类对象和类的对象的区别
2. 获取类对象的三种方式
3. 通过反射构建类的对象的两种方式

你可能感兴趣的:(java,python,开发语言)