package com.smart.reflect;

public class Car {

    private String brand;
private String color;
private int maxSpeed; //默认构造函数
public Car(){} //带参构造函数
public Car(String brand, String color, int maxSpeed) {
this.brand = brand;
this.color = color;
this.maxSpeed = maxSpeed;
} //未带参方法
public void introduce() {
System.out.println("brand:" + brand + ";color:" + color + ";maxSpeed:" + maxSpeed);
} public String getBrand() {
return brand;
} public void setBrand(String brand) {
this.brand = brand;
} public String getColor() {
return color;
} public void setColor(String color) {
this.color = color;
} public int getMaxSpeed() {
return maxSpeed;
} public void setMaxSpeed(int maxSpeed) {
this.maxSpeed = maxSpeed;
}
}
package com.smart.reflect;

import sun.reflect.CallerSensitive;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method; public class ReflectTest { public static Car initByDefaultConst() throws Throwable { /*
类装载器工作机制:
(1)装载:查找和导入Class文件
(2)链接:
1.校验:检查载入Class文件数据的正确性
2.准备:给类的静态变量分配存储空间
3.解析:将符号引用转化为直接引用(可选)
(3)初始化:对类的静态变量、静态代码块执行初始化工作
*/ // 1. 通过类加载器获取Car类对象
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Class clazz = loader.loadClass("com.smart.reflect.Car"); // 2. 获取类的默认构造器对象并通过它实例化Car
Constructor constructor = clazz.getConstructor((Class[]) null);
Car car = (Car) constructor.newInstance(); // 3. 通过反射方法设置属性
Method setBrand = clazz.getMethod("setBrand", String.class);
setBrand.invoke(car, "红旗CA72");
Method setColor = clazz.getMethod("setColor", String.class);
setColor.invoke(car, "黑色");
Method setMaxSpeed = clazz.getMethod("setMaxSpeed", int.class);
setMaxSpeed.invoke(car, 200); return car;
} public static void main(String[] args) throws Throwable {
Car car = initByDefaultConst();
car.introduce(); //JVM装载类时使用“全盘负责委托机制”
// 1.当一个ClassLoader装载一个类时,除非显式的使用另一个ClassLoader,该类所依赖及引用的类也由这个ClassLoader载入
// 2.先委托父类装载器寻找目标类,只有在找不到的情况下才从自己的类路径中查找并装载目标类
}
}

《精通Spring4.X企业应用开发实战》读后感第四章(Java反射)的更多相关文章

  1. 《精通Spring4.x企业应用开发实战》第三章

    这一章节主要介绍SpringBoot的使用,也是学习的重点内容,之后就打算用SpringBoot来写后台,所以提前看一下还是很有必要的. 3.SpringBoot概况 3.1.1SpringBoot发 ...

  2. 《精通Spring4.X企业应用开发实战》读后感第四章(资源访问)

    package com.smart.resource; import org.springframework.core.io.ClassPathResource; import org.springf ...

  3. 《精通Spring4.X企业应用开发实战》读后感第七章(创建增强类)

  4. 《精通Spring4.X企业应用开发实战》读后感第七章(AOP基础知识、jdk动态代理,CGLib动态代理)

  5. 《精通Spring4.X企业应用开发实战》读后感第七章(AOP概念)

  6. 《精通Spring4.X企业应用开发实战》读后感第六章(容器事件)

  7. 《精通Spring4.X企业应用开发实战》读后感第六章(国际化)

  8. 《精通Spring4.X企业应用开发实战》读后感第六章(引用Bean的属性值)

  9. 《精通Spring4.X企业应用开发实战》读后感第六章(使用外部属性文件)

  10. 《精通Spring4.X企业应用开发实战》读后感第六章(属性编辑器)

随机推荐

  1. Tiny语言编译器简单介绍

    1.简单介绍:编译器是将一种语言翻译成还有一种语言的程序.编译器将源程序的代码作为输出,从而产生用目标语言编写的等价程序.比如源码为C/C++等高级语言,那么目标语言就是目标机器的机器代码.也就是能够 ...

  2. 内存MCE错误导致暴力扩充messages日志 以及chattr记录

    由于放假,好久没登过服务器,今天登上服务器查看日志意外发现:/var/log/messages文件竟然被撑到20多个G!!!赶紧查看是什么情况,首先,20多个G的文件根本无法查看,因此,我想到了spl ...

  3. 交易准实时预警 kafka topic 主题 异常交易主题 低延迟 event topic alert topic 内存 算法测试

    https://www.ibm.com/developerworks/cn/opensource/os-cn-kafka/index.html 周 明耀2015 年 6 月 10 日发布 示例:网络游 ...

  4. 【linux】新添加一块硬盘制作LVM卷并进行分区挂载

    linux服务器新添加一块硬盘,可以直接将盘格式化挂载就能用,比如挂载在/usr/local目录,但是这样有一个弊端,就是如果这一块磁盘满了,后续想要扩容的话,不能继续挂载这个/usr/local挂载 ...

  5. SpringBoot学习笔记(13):日志框架

    SpringBoot学习笔记(13):日志框架——SL4J 快速开始 说明 SpringBoot底层选用SLF4J和LogBack日志框架. SLF4J的使用 SpringBoot的底层依赖关系 1. ...

  6. spring-boot5

    Spring Boot集成MyBatis: (1)新建maven project;取名为:spring-boot-mybatis (2)在pom.xml文件中引入相关依赖: (3)创建启动类App.j ...

  7. wampserver发布常见问题

    1 之前使用wamp在本地通过localhost访问PHP网站,一直很正常,最近想要发布至服务器,需要域名解析,发现PHP网站无法使用ip登陆,比如输入ip+端口地址,会报错:you don't ha ...

  8. hadoop —— teragen & terasort

    这两个类所在目录: hadoop-examples-0.20.2-cdh3u6.jar 中: 代码: TeraGen.java: /** * Licensed to the Apache Softwa ...

  9. nginx+keepalived简单双机主从热备

    双机主从热备概述 可以两台机子互为热备,平时各自负责各自的服务.在做上线更新的时候,关闭一台服务器的tomcat后,nginx自动把流量切换到另外一台服务的后备机子上,从而实现无痛更新,保持服务的持续 ...

  10. ASM磁盘组mount一例

    环境信息: oracle10gRAC  +  RHEL5.8 问题现象: db1服务器crs服务正常,ASM的data磁盘组处于dismount状态.db2集群服务正常. SQL> select ...