栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Java基础26~反射,zookeeper负载均衡原理

Java基础26~反射,zookeeper负载均衡原理

Class类的方法:

  • Method[] getDeclaredMethods() 获得所有已声明的方法

  • Field[] getDeclaredFields() 获得所有已声明的属性

Method的方法:

  • String getName() 获得方法名

  • Class getReturnType() 获得返回值类型

  • int getModifiers() 获得访问修饰符

  • Class[] getParameterTypes() 获得所有参数类型

Field的方法:

  • String getName() 获得方法名

  • Class getType() 获得类型

  • int getModifiers() 获得访问修饰符

创建对象,调用方法和属性


Class类的方法:

  • Object newInstance() 创建对象,必须提供无参的构造方法

  • Method getMethod(String name,Class… paramType) 获得特定方法

name是方法名, paramType是参数的类型

Method类的方法:

  • Object invoke(Object obj,Object… params) 调用方法

obj是调用方法的对象,params是参数的值

调用指定构造方法


Class类的方法:

  • Constructor getContructor(Class… paramType) 获得构造方法

paramType是构造方法的参数类型

Constructor的方法:

  • Object newInstance(Object… params) 创建对象

params是参数的值

反射案例


案例:运行时获得类的属性和方法信息

class Person{

private String name;

private Integer age;

public Person(){

}

public Person(String name,Integer age){

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

public void sayHi(){

System.out.println(“Hi:”+name+","+age);

}

}

public class ReflectTest {

public static void main(String[] args){

try {

//获得类型

Class clazz = Person.class;

//获得所有的属性

Field[] fields = clazz.getDeclaredFields();

for(Field f : fields){

//属性名称

String name = f.getName();

//属性类型

Class c = f.getType();

System.out.println(name+" - "+c);

}

//获得所有的方法

Method[] methods = clazz.getDeclaredMethods();

for(Method m : methods){

//方法名

String name = m.getName();

//返回值类型

Class returnType = m.getReturnType();

System.out.print(returnType + " " + name + “(”);

//参数

Class[] params = m.getParameterTypes();

for(Class c : params){

System.out.print(" " + c.getName());

}

System.out.println(")");

}

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

}

}

案例:创建对象,调用方法

try {

//获得类型

Class clazz = Person.class;

//获得类的对象,调用默认的构造方法

Object obj = clazz.newInstance();

//获得对象的方法

Method m1 = clazz.getMethod(“setName”, String.class);

Method m2 = clazz.getMethod(“setAge”, Integer.class);

Method m3 = clazz.getMethod(“sayHi”);

//调用方法

m1.invoke(obj, “micheal”);

m2.invoke(obj, 20);

m3.invoke(obj);

} catch (Exception e) {

e.printStackTrace();

}

案例:调用指定构造方法

try {

//运行时将Person类加载到内存中

Class clazz = Person.class;

//获得指定的构造方法

Constructor con = clazz.getConstructor(String.class,Integer.class);

//调用构造方法

Object obj = con.newInstance(“Jim”,30);

//调用方法

Method m = clazz.getMethod(“sayHi”);

m.invoke(obj);

} catch (Exception e) {

e.printStackTrace();

}

案例:使用反射完成JSON解析

public class JSONUtils{

public static Object fromJSON(String json,Class clazz) throws Exception {

Object obj = clazz.newInstance();

//去掉JSON字符串前后{}和"

json = json.replace("{", “”).replace("}", “”).replace(""","");

//按,分割字符串

String[] strings = json.split(",");

for(String str : strings){

//再按:分割出属性名和属性值

String[] strs = str.split(";

String name = strs[0];

String value = strs[1];

//获得属性

Fi

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

eld field = clazz.getDeclaredField(name);

//修改属性为可以访问,因为是private的

field.setAccessible(true);

Object val = null;

//判断属性类型,转换值的类型

if(field.getType() == Integer.class){

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/677194.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号