(转载)公共技术点之 Java 反射 Reflection

量化爬虫实战:手把手教你搞定同花顺问财的hexin-v参数(附JS逆向思路与Cookie Hook技巧) 本文详细解析了如何通过JS逆向技术获取同花顺问财平台的`hexin-v`参数,包括Cookie Hook技巧和完整解决方案架构。从环境搭建到参数定位,再到生成逻辑逆向,手把手教你突破数据获取限制,为量化交易提供可靠数据支持。 阅读详情


1. 了解 Java 中的反射

1.1 什么是 Java 的反射

Java 反射是可以让我们在运行时获取类的函数、属性、父类、接口等 Class 内部信息的机制。通过反射还可以让我们在运行期实例化对象,调用方法,通过调用 get/set 方法获取变量的值,即使方法或属性是私有的的也可以通过反射的形式调用,这种“看透 class”的能力被称为内省,这种能力在框架开发中尤为重要。 有些情况下,我们要使用的类在运行时才会确定,这个时候我们不能在编译期就使用它,因此只能通过反射的形式来使用在运行时才存在的类(该类符合某种特定的规范,例如 JDBC),这是反射用得比较多的场景。
还有一个比较常见的场景就是编译时我们对于类的内部信息不可知,必须得到运行时才能获取类的具体信息。比如 ORM 框架,在运行时才能够获取类中的各个属性,然后通过反射的形式获取其属性名和值,存入数据库。这也是反射比较经典应用场景之一。

1.2 Class 类

那么既然反射是操作 Class 信息的,Class 又是什么呢?
这里写图片描述
当我们编写完一个 Java 项目之后,所有的 Java 文件都会被编译成一个.class 文件,这些 Class 对象承载了这个类型的父类、接口、构造函数、方法、属性等原始信息,这些 class 文件在程序运行时会被 ClassLoader 加载到虚拟机中。当一个类被加载以后,Java 虚拟机就会在内存中自动产生一个 Class 对象。我们通过 new 的形式创建对象实际上就是通过这些 Class 来创建,只是这个过程对于我们是不透明的而已。
下面的章节中我们会为大家演示反射的一些常用 api,从代码的角度理解反射。

2. 反射 Class 以及构造对象

2.1 获取 Class 对象

在你想检查一个类的信息之前,你首先需要获取类的 Class 对象。Java 中的所有类型包括基本类型,即使是数组都有与之关联的 Class 类的对象。如果你在编译期知道一个类的名字的话,那么你可以使用如下的方式获取一个类的 Class 对象。

[java]  view plain  copy
  1. Class<?> myObjectClass = MyObject.class;  

如果你已经得到了某个对象,但是你想获取这个对象的 Class 对象,那么你可以通过下面的方法得到:

[java]  view plain  copy
  1. Student me = new Student("mr.simple");  
  2. Class<?> clazz = me.getClass();  

如果你在编译期获取不到目标类型,但是你知道它的完整类路径,那么你可以通过如下的形式来获取 Class 对象:

[java]  view plain  copy
  1. Class<?> myObjectClass = Class.forName("com.simple.User");  

在使用 Class.forName()方法时,你必须提供一个类的全名,这个全名包括类所在的包的名字。例如 User 类位于 com.simple 包,那么他的完整类路径就是 com.simple.User。
如果在调用 Class.forName()方法时,没有在编译路径下(classpath)找到对应的类,那么将会抛出 ClassNotFoundException。

接口说明

[java]  view plain  copy
  1. // 加载指定的 Class 对象,参数 1 为要加载的类的完整路径,例如"com.simple.Student". ( 常用方式 )  
  2. public static Class<?> forName (String className)  
  3.   
  4. // 加载指定的 Class 对象,参数 1 为要加载的类的完整路径,例如"com.simple.Student";  
  5. // 参数 2 为是否要初始化该 Class 对象,参数 3 为指定加载该类的 ClassLoader.  
  6. public static Class<?> forName (String className, boolean shouldInitialize, ClassLoader classLoader)  

2.2 通过 Class 对象构造目标类型的对象

一旦你拿到 Class 对象之后,你就可以为所欲为了!当你善用它的时候它就是神兵利器,当你心怀鬼胎之时它就会变成恶魔。但获取 Class 对象只是第一步,我们需要在执行那些强大的行为之前通过 Class 对象构造出该类型的对象,然后才能通过该对象释放它的能量。 我们知道,在 java 中要构造对象,必须通过该类的构造函数,那么其实反射也是一样一样的。但是它们确实有区别的,通过反射构造对象,我们首先要获取类的 Constructor(构造器)对象,然后通过 Constructor 来创建目标类的对象。还是直接上代码的。

[java]  view plain  copy
  1. private static void classForName() {  
  2.         try {  
  3.             // 获取 Class 对象  
  4.             Class<?> clz = Class.forName("org.java.advance.reflect.Student");  
  5.             // 通过 Class 对象获取 Constructor,Student 的构造函数有一个字符串参数  
  6.             // 因此这里需要传递参数的类型 ( Student 类见后面的代码 )  
  7.             Constructor<?> constructor = clz.getConstructor(String.class);  
  8.             // 通过 Constructor 来创建 Student 对象  
  9.             Object obj = constructor.newInstance("mr.simple");  
  10.             System.out.println(" obj :  " + obj.toString());  
  11.         } catch (Exception e) {  
  12.             e.printStackTrace();  
  13.         }  
  14.     }  

通过上述代码,我们就可以在运行时通过完整的类名来构建对象。

获取构造函数接口

[java]  view plain  copy
  1. // 获取一个公有的构造函数,参数为可变参数,如果构造函数有参数,那么需要将参数的类型传递给 getConstructor 方法  
  2. public Constructor<T> getConstructor (Class...<?> parameterTypes)  
  3. // 获取目标类所有的公有构造函数  
  4. public Constructor[]<?> getConstructors ()  

注意,当你通过反射获取到 Constructor、Method、Field 后,在反射调用之前将此对象的 accessible 标志设置为 true,以此来提升反射速度。值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。值为 false 则指示反射的对象应该实施 Java 语言访问检查。例如 :

[java]  view plain  copy
  1. Constructor<?> constructor = clz.getConstructor(String.class);  
  2.   // 设置 Constructor 的 Accessible  
  3.   constructor.setAccessible(true);  
  4.   
  5.   // 设置 Methohd 的 Accessible  
  6.   Method learnMethod = Student.class.getMethod("learn", String.class);  
  7.   learnMethod.setAccessible(true);  

由于后面还会用到 Student 以及相关的类,我们在这里就先给出它们的代码吧。
Person.java

[java]  view plain  copy
  1. public class Person {  
  2.     String mName;  
  3.   
  4.     public Person(String aName) {  
  5.         mName = aName;  
  6.     }  
  7.   
  8.     private void sayHello(String friendName) {  
  9.         System.out.println(mName + " say hello to " + friendName);  
  10.     }  
  11.   
  12.     protected void showMyName() {  
  13.         System.out.println("My name is " + mName);  
  14.     }  
  15.   
  16.     public void breathe() {  
  17.         System.out.println(" take breathe ");  
  18.     }  
  19. }  

Student.java

[java]  view plain  copy
  1. public class Student extends Person implements Examination {  
  2.     // 年级  
  3.     int mGrade;  
  4.   
  5.     public Student(String aName) {  
  6.         super(aName);  
  7.     }  
  8.   
  9.     public Student(int grade, String aName) {  
  10.         super(aName);  
  11.         mGrade = grade;  
  12.     }  
  13.   
  14.     private void learn(String course) {  
  15.         System.out.println(mName + " learn " + course);  
  16.     }  
  17.   
  18.     public void takeAnExamination() {  
  19.         System.out.println(" takeAnExamination ");  
  20.     }  
  21.   
  22.     public String toString() {  
  23.         return " Student :  " + mName;  
  24.     }  

Breathe.java

[java]  view plain  copy
  1. // 呼吸接口  
  2. public interface Breathe {  
  3.     public void breathe();  
  4. }  

Examination.java

[java]  view plain  copy
  1. // 考试接口  
  2. public interface Examination {  
  3.     public void takeAnExamination();  
  4. }  

3 反射获取类中函数

3.1 获取当前类中定义的方法

要获取当前类中定义的所有方法可以通过 Class 中的 getDeclaredMethods 函数,它会获取到当前类中的 public、default、protected、private 的所有方法。而 getDeclaredMethod(String name, Class...<?> parameterTypes)则是获取某个指定的方法。代码示例如下 :

[java]  view plain  copy
  1. private static void showDeclaredMethods() {  
  2.       Student student = new Student("mr.simple");  
  3.         Method[] methods = student.getClass().getDeclaredMethods();  
  4.         for (Method method : methods) {  
  5.             System.out.println("declared method name : " + method.getName());  
  6.         }  
  7.   
  8.         try {  
  9.             Method learnMethod = student.getClass().getDeclaredMethod("learn", String.class);  
  10.             // 获取方法的参数类型列表  
  11.             Class<?>[] paramClasses = learnMethod.getParameterTypes() ;  
  12.             for (Class<?> class1 : paramClasses) {  
  13.                 System.out.println("learn 方法的参数类型 : " + class1.getName());  
  14.             }  
  15.             // 是否是 private 函数,属性是否是 private 也可以使用这种方式判断  
  16.             System.out.println(learnMethod.getName() + " is private "  
  17.                     + Modifier.isPrivate(learnMethod.getModifiers()));  
  18.             learnMethod.invoke(student, "java ---> ");  
  19.         } catch (Exception e) {  
  20.             e.printStackTrace();  
  21.         }  
  22.     }  

[java]  view plain  copy
  1. 3.2 获取当前类、父类中定义的公有方法  
  2. 要获取当前类以及父类中的所有 public 方法可以通过 Class 中的 getMethods 函数,而 getMethod 则是获取某个指定的方法。代码示例如下 :  

[java]  view plain  copy
  1. private static void showMethods() {  
  2.         Student student = new Student("mr.simple");  
  3.         // 获取所有方法  
  4.         Method[] methods = student.getClass().getMethods();  
  5.         for (Method method : methods) {  
  6.             System.out.println("method name : " + method.getName());  
  7.         }  
  8.   
  9.         try {  
  10.             // 通过 getMethod 只能获取公有方法,如果获取私有方法则会抛出异常,比如这里就会抛异常  
  11.             Method learnMethod = student.getClass().getMethod("learn", String.class);  
  12.             // 是否是 private 函数,属性是否是 private 也可以使用这种方式判断  
  13.             System.out.println(learnMethod.getName() + " is private " + Modifier.isPrivate(learnMethod.getModifiers()));  
  14.             // 调用 learn 函数  
  15.             learnMethod.invoke(student, "java");  
  16.         } catch (Exception e) {  
  17.             e.printStackTrace();  
  18.         }  
  19.     }  

接口说明

[java]  view plain  copy
  1. // 获取 Class 对象中指定函数名和参数的函数,参数一为函数名,参数 2 为参数类型列表  
  2. public Method getDeclaredMethod (String name, Class...<?> parameterTypes)  
  3.   
  4. // 获取该 Class 对象中的所有函数( 不包含从父类继承的函数 )  
  5. public Method[] getDeclaredMethods ()  
  6.   
  7. // 获取指定的 Class 对象中的**公有**函数,参数一为函数名,参数 2 为参数类型列表  
  8. public Method getMethod (String name, Class...<?> parameterTypes)  
  9.   
  10. // 获取该 Class 对象中的所有**公有**函数 ( 包含从父类和接口类集成下来的函数 )  
  11. public Method[] getMethods ()  

这里需要注意的是 getDeclaredMethod 和 getDeclaredMethods 包含 private、protected、default、public 的函数,并且通过这两个函数获取到的只是在自身中定义的函数,从父类中集成的函数不能够获取到。而 getMethod 和 getMethods 只包含 public 函数,父类中的公有函数也能够获取到。

4 反射获取类中的属性

获取属性和章节 3 中获取方法是非常相似的,只是从 getMethod 函数换成了 getField,从 getDeclaredMethod 换成了 getDeclaredField 罢了。

4.1 获取当前类中定义的属性

要获取当前类中定义的所有属性可以通过 Class 中的 getDeclaredFields 函数,它会获取到当前类中的 public、default、protected、private 的所有属性。而 getDeclaredField 则是获取某个指定的属性。代码示例如下 :

[java]  view plain  copy
  1. private static void showDeclaredFields() {  
  2.        Student student = new Student("mr.simple");  
  3.        // 获取当前类和父类的所有公有属性  
  4.        Field[] publicFields = student.getClass().getDeclaredFields();  
  5.        for (Field field : publicFields) {  
  6.            System.out.println("declared field name : " + field.getName());  
  7.        }  
  8.   
  9.        try {  
  10.            // 获取当前类和父类的某个公有属性  
  11.            Field gradeField = student.getClass().getDeclaredField("mGrade");  
  12.            // 获取属性值  
  13.            System.out.println(" my grade is : " + gradeField.getInt(student));  
  14.            // 设置属性值  
  15.            gradeField.set(student, 10);  
  16.            System.out.println(" my grade is : " + gradeField.getInt(student));  
  17.        } catch (Exception e) {  
  18.            e.printStackTrace();  
  19.        }  
  20.    }  

4.2 获取当前类、父类中定义的公有属性

要获取当前类以及父类中的所有 public 属性可以通过 Class 中的 getFields 函数,而 getField 则是获取某个指定的属性。代码示例如下 :

[java]  view plain  copy
  1. private static void showFields() {  
  2.        Student student = new Student("mr.simple");  
  3.        // 获取当前类和父类的所有公有属性  
  4.        Field[] publicFields = student.getClass().getFields();  
  5.        for (Field field : publicFields) {  
  6.            System.out.println("field name : " + field.getName());  
  7.        }  
  8.   
  9.        try {  
  10.            // 获取当前类和父类的某个公有属性  
  11.            Field ageField = student.getClass().getField("mAge");  
  12.            System.out.println(" age is : " + ageField.getInt(student));  
  13.        } catch (Exception e) {  
  14.            e.printStackTrace();  
  15.        }  
  16.    }  

接口说明

[java]  view plain  copy
  1. // 获取 Class 对象中指定属性名的属性,参数一为属性名  
  2. public Method getDeclaredField (String name)  
  3.   
  4. // 获取该 Class 对象中的所有属性( 不包含从父类继承的属性 )  
  5. public Method[] getDeclaredFields ()  
  6.   
  7. // 获取指定的 Class 对象中的**公有**属性,参数一为属性名  
  8. public Method getField (String name)  
  9.   
  10. // 获取该 Class 对象中的所有**公有**属性 ( 包含从父类和接口类集成下来的公有属性 )  
  11. public Method[] getFields ()  

这里需要注意的是 getDeclaredField 和 getDeclaredFields 包含 private、protected、default、public 的属性,并且通过这两个函数获取到的只是在自身中定义的属性,从父类中集成的属性不能够获取到。而 getField 和 getFields 只包含 public 属性,父类中的公有属性也能够获取到。

5 反射获取父类与接口

5.1 获取父类

获取 Class 对象的父类。

[java]  view plain  copy
  1. Student student = new Student("mr.simple");  
  2.    Class<?> superClass = student.getClass().getSuperclass();  
  3.    while (superClass != null) {  
  4.        System.out.println("Student's super class is : " + superClass.getName());  
  5.        // 再获取父类的上一层父类,直到最后的 Object 类,Object 的父类为 null  
  6.        superClass = superClass.getSuperclass();  
  7.    }  

5.2 获取接口

获取 Class 对象中实现的接口。

[java]  view plain  copy
  1. private static void showInterfaces() {  
  2.     Student student = new Student("mr.simple");  
  3.     Class<?>[] interfaceses = student.getClass().getInterfaces();  
  4.     for (Class<?> class1 : interfaceses) {  
  5.         System.out.println("Student's interface is : " + class1.getName());  
  6.     }  
  7. }  

6 获取注解信息

在框架开发中,注解加反射的组合使用是最为常见形式的。关于注解方面的知识请参考公共技术点之 Java 注解 Annotation,定义注解时我们会通过@Target 指定该注解能够作用的类型,看如下示例:

[java]  view plain  copy
  1. @Target({  
  2.            ElementType.METHOD, ElementType.FIELD, ElementType.TYPE  
  3.    })  
  4.    @Retention(RetentionPolicy.RUNTIME)  
  5.    static @interface Test {  
  6.   
  7.    }  

上述注解的@target 表示该注解只能用在函数上,还有 Type、Field、PARAMETER 等类型,可以参考上述给出的参考资料。通过反射 api 我们也能够获取一个 Class 对象获取类型、属性、函数等相关的对象,通过这些对象的 getAnnotation 接口获取到对应的注解信息。 首先我们需要在目标对象上添加上注解,例如 :

[java]  view plain  copy
  1. @Test(tag = "Student class Test Annoatation")  
  2. public class Student extends Person implements Examination {  
  3.     // 年级  
  4.     @Test(tag = "mGrade Test Annotation ")  
  5.     int mGrade;  
  6.   
  7.     // ......  
  8. }  

然后通过相关的注解函数得到注解信息,如下所示 :

[java]  view plain  copy
  1. private static void getAnnotationInfos() {  
  2.       Student student = new Student("mr.simple");  
  3.       Test classTest = student.getClass().getAnnotation(Test.class);  
  4.       System.out.println("class Annotatation tag = " + classTest.tag());  
  5.   
  6.       Field field = null;  
  7.       try {  
  8.           field = student.getClass().getDeclaredField("mGrade");  
  9.           Test testAnnotation = field.getAnnotation(Test.class);  
  10.           System.out.println("属性的 Test 注解 tag : " + testAnnotation.tag());  
  11.       } catch (Exception e) {  
  12.           e.printStackTrace();  
  13.       }  
  14.   }  

输出结果为 : >

[java]  view plain  copy
  1. class Annotatation tag = Student class Test Annoatation  
  2. 属性的 Test 注解 tag : mGrade Test Annotation  

接口说明

[java]  view plain  copy
  1. // 获取指定类型的注解  
  2. public <A extends Annotation> A getAnnotation(Class<A> annotationClass) ;  
  3. // 获取 Class 对象中的所有注解  
  4. public Annotation[] getAnnotations() ;  

杂谈

反射作为 Java 语言的重要特性,在开发中有着极为重要的作用。很多开发框架都是基于反射来实现对目标对象的操作,而反射配合注解更是设计开发框架的主流选择,例如 ActiveAndroid,因此深入了解反射的作用以及使用对于日后开发和学习必定大有益处。


转载于:公共技术点之 Java 反射 Reflection


YOLOv11缝合改进Conv | SAConv在YOLOv11中的应用可切换空洞卷积与性能提升(附代码) 在本篇文章中,我们将深入探讨如何通过引入**SAConv**(Switchable Atrous Convolution,可切换空洞卷积)来优化YOLOv11网络结构,特别是在卷积操作方面的创新。我们会解析SAConv的核心原理和架构设计。 阅读详情

相关推荐

KEIL 5.38如何手动安装ARM Compiler V5?完整配置流程分享

本文详细介绍了在KEIL 5.38环境下手动安装和配置ARM Compiler V5(AC5)的完整流程,解决历史遗留项目的兼容性问题。从获取安装包、环境变量设置到KEIL集成配置,逐步指导开发者完成AC5的部署,并提供了常见错误排查和性能优化建议,帮助开发者高效维护基于C编译器的老项目。

weixin_29168813的博客 628

Function接口

Function接口 java.util.function.Function 接口用来根据一个类型的数据得到另一个类型的数据,前者称为前置条件, 后者称为后置条件。 1、抽象方法:apply Function 接口中最主要的抽象方法为: R apply(T t) ,根据类型T的参数获取类型R的结果。 使用的场景例如:将 String 类型转换为 Integer 类型。 public class Demo01Function { /* * 定义一个方法 * 方法的参数传递一个字

weixin_44230693的博客 2700

手把手教你用FPGA驱动DAC8830:一个Verilog SPI驱动模块的完整实现与调试

本文详细介绍了如何使用FPGA通过Verilog实现DAC8830的SPI驱动模块,包括SPI通信机制解析、Verilog模块设计、代码优化及调试技巧。重点解决时钟同步、状态机设计等工程实践问题,适用于音频处理、仪器仪表等高精度数模转换场景。

weixin_26886855的博客 229

java如何根据属性名这个字符串创建SFunction ---结合了我自己的项目来说的

比如我有一个Person类 里面有name属性 我怎么根据name这个字符串和Person这个class 获取SFunction

m0_59084856的博客 1645

别再让步进电机‘发烧’了!用FOC闭环驱动实现精准力矩控制(基于P0斩波恒流版)

本文详细介绍了如何利用FOC闭环驱动技术(基于P0斩波恒流版)解决步进电机过热和力矩控制不精准的问题。通过对比传统开环控制的缺陷,展示了FOC在降低温度、提升精度和能效方面的显著优势,并提供了硬件配置、软件实现及性能优化的完整方案。

weixin_30872157的博客 567

【技术实践指南】Python解析FactSet Revere供应链数据:构建企业级断裂与重构监测指标

本文提供了一份企业级Python实践指南,详细解析如何利用FactSet Revere供应链数据库,构建供应链断裂与重构监测指标。内容涵盖数据清洗、关系对筛选、时间序列处理及核心指标(断裂、恢复、转移)的工程化实现,旨在帮助数据工程师与分析师搭建自动化、可解释的供应链风险监控系统。

weixin_29051811的博客 928

Java SE Function接口&Lambda

Java SE Function接口&Lambda 目录Java SE Function接口&Lambda1、Lambda表达式2、函数式接口2.1 四大内置函数接口2.2、Consumer (1参无回值)2.3、Supplier T get() 无参有回值2.4、Function1、Lambda表达式   Lambda表达式是一个匿名函数, 我们可以把Lambda表 达式理解为是一段可以传递的代码(将代码像数据一样 进行传递) 。 1、语法 ( 形参列表 )->{ 操作集合 }

忄凝^的博客 691

C# ArcGIS Engine二次开发——实现“加载shp文件”

private void AddShpDataToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog OpFileDialog=new OpenFileDialog();//OpenFileDialog:打开文件对话框 OpFileDialog.Title="添加矢量数据"; OpFileDialog.Filter="(*.shp)|*.shp";//filter:过滤器;"(*.shp)|*.shp"

weixin_42191203的博客 5254

java8如何根据属性名这个字符串创建SFunction

比如我有一个Person类 里面有name属性 我怎么根据name这个字符串和Person这个class 获取SFunction。

m0_59084856的博客 1208

Unity中实现俄罗斯方块

二:实现思路 ——创建每一个方块可移动到的位置点,可以理解为创建一个游戏地图,从(0,0)点开始依次向x轴和y轴延伸,例如x最大为9,y最大为19,则创建了一个20行10列的地图 ——制作每一个形状的预制体,Shape是每一个整体形状,Block是每一块小方块,CenterPos代表这个形状的旋转中心 ——创建GameController脚本控制游戏逻辑,挂载到面板物体上。创建Block脚本控制每个形状的操作,挂载到每个形状上 ——在GameController脚本中编...

L的博客 8557

linux 基于debian/ubuntu AB系统适配(二)-updateEngine移植

其实A/B系统的原理很简单,大部分的工作都集中在uboot上,rootfs只是起到一个辅助的作用,但这个作用也就必不可少的。你会发现在这个其中并没有kernel的参与。

badbayyj的博客 1033

Java 反射 Reflection

1. 了解 Java 中的反射 1.1 什么是 Java 的反射 Java 反射是可以让我们在运行时获取类的函数、属性、父类、接口等 Class 内部信息的机制。通过反射还可以让我们在运行期实例化对象,调用方法,通过调用 get/set 方法获取变量的值,即使方法或属性是私有的的也可以通过反射的形式调用,这种“看透 class”的能力被称为内省,这种能力在框架开发中尤为重要。 有些情况

zhiyuanIT的专栏 726

构建高效的LLM应用测试框架

《构建高效的LLM应用测试框架》 关键词:LLM,测试框架,应用测试,效率优化,测试原理 摘要:本文将深入探讨构建高效LLM应用测试框架的必要性、方法与步骤,旨在为开发者提供一套系统化、可操作的测试解决方案,从而提升LLM

AI天才研究院 1047

51单片机入门:从LED控制到按键交互的硬件原理与Keil编程实践

通用输入输出(GPIO)是微控制器与外部设备交互的基础接口,其核心原理是通过配置寄存器控制引脚输出高、低电平,从而驱动或读取外部电路状态。在嵌入式系统中,GPIO的灵活运用是实现数字控制、状态监测和人机交互的关键技术。对于初学者而言,理解GPIO的电路连接方式(如共阴极与共阳极)、电平逻辑以及电流驱动能力,是掌握单片机开发的基石。通过结合Keil C51开发环境进行编程实践,工程师可以高效地实现从简单的LED点亮、闪烁到复杂的流水灯动态效果,并进一步集成独立按键检测功能,完成输入与输出的闭环控制。这种从硬件

weixin_30732487的博客 358

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Java 反射Reflection使用

转载:公共技术点之 Java 反射 Reflection1. 了解 Java 中的反射1.1 什么是 Java 的反射Java 反射是可以让我们在运行时获取类的函数、属性、父类、接口等 Class 内部信息的机制。通过反射还可以让我们在运行期实例化对象,调用方法,通过调用 get/set 方法获取变量的值,即使方法或属性是私有的的也可以通过反射的形式调用,这种“看透 class”的能力被称为内省,这

Mr_LiaBill 920

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java基础(Reflection--反射)

反射机制   – 指的是可以于运行时加载、探知、使用编译期间完全未知的类。   – 程序在运行状态中,可以动态加载一个只有名称的类,对于任意一个已加载的类,都能够知道这个类的所有属性和方法;    对于任意一个对象,都能够调用它的任意一个方法和属性;     Class c = Class.forName("com.bjsxt.test.User");   – 加载完类之...

weixin_30896763的博客 115

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java学习之二-Java反射机制

转载自:https://www.cnblogs.com/Quincy/archive/2011/06/19/2084557.html 问题: 在运行时,对一个JAVA类,能否知道属性和方法;能否调用它的任意方法? 答案是可以的,JAVA提供一种反射机制可以实现。 目录 什么是JAVA的反射机制 JDK中提供的Reflection API JAVA反射机制提供了什么功能 获取类的Class对象 获取...

qq_43826730的博客 117

Java-Reflection反射-获取包括父类在内的所有字段

一篇好文章 转载内容如下 前言 今天Android移动端要加个新功能,所以回归android程序员的身份.开发的过程中,发现了之前的代码写的有很多问题,真的应该把时间抽出来重构一下了. 其中有反射的一个坑,工具类某方法反射获取传入Model的属性值.但是当我把公共属性抽出来做基类的时候,发现获取不到基类的属性值了.原因是使用了getDeclaredFields(); 分析

qq_27752831的博客 2134

Java reflection

http://www.journaldev.com/1789/java-reflection-tutorial-for-classes-methods-fields-constructors-annotations-and-much-more#reflection-fields Reflection in Java Reflection for Classes Get Class O...

weixin_30757793的博客 98

reflection是如何工作的。

public Method[] getDeclaredMethods()返回类或接口声明的所有方法,包括public, protected, default (package) 访问和private方法的Method对象,但不包括继承的方法。当然也包括它所实现接口的方法。 public Method[] getMethods()返回类的所有public方法,包括其继承类的公用方法,当然也包括它所...

weixin_30820077的博客 181

反射获取成员变量,并修改值

/* * 反射获取成员变量,并修改值 * Person类中的成员String name */ public class ReflectDemo5 { public static void main(String[] args) throws Exception{ Class c = Class.forName("cn.itcast.demo...

weixin_30381793的博客 104

泛型转换成dataset的一个方法 直接调用就可以

public static DataSet ConvertToDataSet<T>(IList<T> list) { if (list == null || list.Count <= 0) { return null; } DataSet ds = new DataSet(); DataTable dt = new ...

weixin_30590285的博客 77

Logger之Logger.getLogger(CLass)

之前一直在使用System.out.println()来调试.但是用这种方式开发项目部署到生产环境,会因为众多的控制台输出降低应用的性能.这时候Log4J就成为可平衡开发和部署应用的利器了. 在项目中使用Log4J并不是一件困难的事情,简单粗暴的方式就是在每个类A中声明一个Logger私有属性 1 private static Logger logger = Logger.getLog...

weixin_30649859的博客 98

java---反射

反射概述 Java反射机制:是指在运行时去获取一个类的变量和方法信息。然后通过获取到的信息来创建对象,调用方法的一种机制。 由于这种动态性,可以极大的增强程序的灵活性,程序不用在编译期就完成确定,在运行期仍然可以扩展 获取Class类的对象 反射获取构造方法并使用 练习 练习2 获取成员方法并使用 练习 反射获取成员变量并使用 练习 综合练习......

z2021_000000的博客 388

java中SFunction<T, ?>的用法

其中T为输入类型,?表示输出类型可以为任意类型。该接口通常用于实现高阶函数,例如将一个函数作为参数传递给另一个函数。在Java中,SFunction field表示一个泛型。ava中SFunction<T,?

qq_32973309的博客 484

JavaSE function

常用数学函数 sin、cos 和 tan 的参数都是以弧度为单位的角度。asin 和 atan的返回值是-π /2 ~π /2 的一个弧度值,acos 的返回值在 0到π之间。 1°相当于 π /180 弧度,90°相当于 π /2 弧度, 而 30°相当于π/6 弧度 指数函数方法 min、max 和 abs 方法 min 和 max 方法用于返回两个数(int、long、float 或 d...

qq_42393388的博客 448
上一篇: (转载)Java 学习笔记 开发环境搭建JDK+Tomcat+Eclipse
下一篇: 关于反射机制的一些示例
CapsLockWY
博客等级 码龄9年 9粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值