1.反射
①实体类
public class Student {
public String name;
public String sex;
private int age;
private float score;
protected String address;
protected String tel;
String classid;
public Student(String name) {
this.name = name;
}
public Student(String name, String sex) {
this.name = name;
this.sex = sex;
}
public Student(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
private Student(String name, String sex, int age, float score) {
this.name = name;
this.sex = sex;
this.age = age;
this.score = score;
}
private Student(String name, String sex, int age, float score, String address) {
this.name = name;
this.sex = sex;
this.age = age;
this.score = score;
this.address = address;
}
protected Student(String name, String sex, int age, float score, String address, String tel) {
this.name = name;
this.sex = sex;
this.age = age;
this.score = score;
this.address = address;
this.tel = tel;
}
protected Student(String name, String sex, int age, float score, String address, String tel, String classid) {
this.name = name;
this.sex = sex;
this.age = age;
this.score = score;
this.address = address;
this.tel = tel;
this.classid = classid;
}
Student() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age>100){
System.out.println("e");
System.exit(0);
}
this.age = age;
}
public float getScore() {
return score;
}
public void setScore(float score) {
this.score = score;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getClassid() {
return classid;
}
public void setClassid(String classid) {
this.classid = classid;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
", score=" + score +
", address='" + address + '\'' +
", tel='" + tel + '\'' +
", classid='" + classid + '\'' +
'}';
}
public void methodPub(){
System.out.println("公有无参成员方法");
}
public void methodPub(String arg){
System.out.println("公有带参成员方法");
}
private void methodPri(){
System.out.println("私有无参成员方法");
}
private void methodPri(String arg){
System.out.println("私有带参成员方法");
}
protected void methodPro(){
System.out.println("受保护无参成员方法");
}
protected void methodPro(String arg){
System.out.println("受保护带参成员方法");
}
void methodDef(){
System.out.println("默认的无参成员方法");
}
void methodDef(String arg){
System.out.println("默认的带参成员方法");
}
}
②、③测试类
Class<Student> c1 = Student.class;
//获取到的是当前类中所有的共有构造方法
// Constructor<?>[] constructors = c1.getConstructors();
// for (Constructor<?> constructor : constructors) {
// System.out.println(constructor);
// }
//获取到的是当前类中所有的构造方法,包括非公有
// Constructor<?>[] declaredConstructors = c1.getDeclaredConstructors();
// for (Constructor<?> declaredConstructor : declaredConstructors) {
// System.out.println(declaredConstructor);
// }
//获取的是当前类中 公有无参的方法,获取不到出现异常
// Constructor<Student> constructor = c1.getConstructor();
//获取当前类中 带参的公有构造方法 注意参数类型的后面也要加上.class
// Constructor<Student> constructor = c1.getConstructor(String.class);
// System.out.println(constructor);
//获取当前类中 任意权限的构造方法
Constructor<Student> declaredConstructor = c1.getDeclaredConstructor(
String.class,
String.class,
int.class,
float.class
);
System.out.println(declaredConstructor);
Class<Student> studentClass = Student.class;
//获取所有公有的成员属性(变量)
// Field[] fields = studentClass.getFields();
// for (Field field : fields) {
// System.out.println(field);
// }
//获取所有的成员属性 包括非公共有
// Field[] declaredFields = studentClass.getDeclaredFields();
// for (Field declaredField : declaredFields) {
// System.out.println(declaredField);
// }
//获取指定成员名的成员属性(公有)
// Field field = studentClass.getField("name");
// System.out.println(field);
//获取任意权限
Field age = studentClass.getDeclaredField("age");
System.out.println(age);
//实例化对象
Student student = studentClass.getDeclaredConstructor().newInstance();
// student.age = 89; //权限不足
// student.setAge(89);//常规方式
// student.setAge(1001);
age.setAccessible(true);
age.set(student,1002);
System.out.println(student);
// System.out.println(student.getAge());
// System.out.println(age.get(Student));
④
//获取Student类的class对象
Class<Student> studentClass = Student.class;
//获取class对象 去获取公有带参构造方法
Constructor<Student> constructor = studentClass.getConstructor(String.class);
//用构造方法对象调用newInstance方法来实例化对象,构造方法参数实参传递给newInstance
Student student = constructor.newInstance("涅尘");
//输出结果
System.out.println(student);
Class<Student> studentClass = Student.class;
Constructor<Student> declaredConstructor = studentClass.getDeclaredConstructor(
String.class,
String.class,
int.class,
float.class);
// 抑制权限检测
// 通过要抑制权限检测的对象 来调用setAccessible方法,
// true表示开启权限,false表示关闭权限
declaredConstructor.setAccessible(true);
Student student = declaredConstructor.newInstance("涅尘", "男", 18, 100);
System.out.println(student);
2.多线程
public class MyThread extends Thread{
@Override
public void run() {
for (int i = 0; i < 20; i++) {
// System.out.println(this.getName() + " "+ i);
System.out.println(Thread.currentThread().getName() + " "+ i);
}
}
public MyThread(String name) {
super(name);
}
public MyThread() {
super();
}
}
public static void main(String[] args) {
//创建线程对象
MyThread myThread1 = new MyThread("线程1");//重写有参构造
MyThread myThread2 = new MyThread("线程2");
MyThread myThread3 = new MyThread("线程3");
MyThread myThread4 = new MyThread("线程4");
//通过线程对象来设置线程名 不常用
// myThread1.setName("线程1");
// myThread2.setName("线程2");
// myThread3.setName("线程3");
// myThread4.setName("线程4");
Thread.currentThread().setName("主线程");
//通过start启动线程
myThread1.start();
myThread2.start();
myThread3.start();
myThread4.start();
for (int i = 0; i < 20; i++) {
// System.out.println(this.getName() + " "+ i);
System.out.println(Thread.currentThread().getName() + " "+ i);
}
}