本文实例讲述了Java基础之反射原理与用法。分享给大家供大家参考,具体如下:

1.什么是反射?

反射其实就是动态的加载类,我们在写JDBC的时候加载驱动Class.forName("xxx")时就涉及到了反射。

反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

2.反射机制能做什么?

1. 在运行时判断任意一个对象的所属的类Class。

2. 在运行时判断构造任意一个类的对象Constructor。

3. 在运行时判断任意一个类所具有的成员变量Field和方法Method。

4. 在运行时调用任意一个对象的方法。method.invoke(object,args)

3.反射机制相关的API

获得完整的包名和类名

Student.java

package com.reflect.test;

public class Student {

private int id;

private String name;

public Student() {}

public Student(int id, String name) {

super();

this.id = id;

this.name = name;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Override

public String toString() {

return "Student [id=" + id + ", name=" + name + "]";

}

}

Test.java

package com.reflect.test;

public class Test {

Student stu = new Student();

public static void main(String[] args) {

Test test = new Test();

test.getClassName();

}

//获得完整的包名和类名

public void getClassName() {

System.out.println(stu.getClass().getName());

}

}

运行结果

com.reflect.test.Student

获取Class的三种方法

public static void main(String[] args) {

Test test = new Test();

test.getStudentClass();

}

//获取Class对象的三种犯法

public void getStudentClass() {

//第一种方法,forName

Class> class1;

try {

class1 = Class.forName("com.reflect.test.Student");

System.out.println("class1:"+class1);

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

//第二种方法,class

Class> class2 = Student.class;

System.out.println("class2:"+class2);

//第三种方法,getClass()

Student stu1 = new Student();

Class> class3 = stu1.getClass();

System.out.println("class3:"+class3);

}

运行结果

class1:class com.reflect.test.Student

class2:class com.reflect.test.Student

class3:class com.reflect.test.Student

更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

java基础之 反射_Java基础之反射原理与用法详解相关推荐

  1. java 对象数组定义_Java对象数组定义与用法详解

    本文实例讲述了Java对象数组定义与用法.分享给大家供大家参考,具体如下: 所谓的对象数组,就是指包含了一组相关的对象,但是在对象数组的使用中一定要清楚一点:数组一定要先开辟空间,但是因为其是引用数据 ...

  2. Django基础(11): 表单集合Formset的高级用法详解

    Formset(表单集)是多个表单的集合.Formset在Web开发中应用很普遍,它可以让用户在同一个页面上提交多张表单,一键添加多个数据,比如一个页面上添加多个用户信息.今天小编我就介绍下Djang ...

  3. java random函数用法_JAVA的Random类的用法详解

    Random类主要用来生成随机数,本文详解介绍了Random类的用法,希望能帮到大家. Random类 (java.util) Random类中实现的随机算法是伪随机,也就是有规则的随机.在进行随机时 ...

  4. java 接口 返回值_java api返回值的标准化详解

    api返回值的标准化 例如 {"status":200,"message":"操作成功","data":"{\ ...

  5. java 检查bytebuf长度_Java学习笔记16-Netty缓冲区ByteBuf详解

    Java学习笔记16-Netty缓冲区ByteBuf详解 Netty自己的ByteBuf ByteBuf是为解决ByteBuffer的问题和满足网络应用程序开发人员的日常需求而设计的. JDK Byt ...

  6. java语言链栈_Java语言实现数据结构栈代码详解

    近来复习数据结构,自己动手实现了栈.栈是一种限制插入和删除只能在一个位置上的表.最基本的操作是进栈和出栈,因此,又被叫作"先进后出"表. 首先了解下栈的概念: 栈是限定仅在表头进行 ...

  7. java tostring格式化日期_java日期格式化SimpleDateFormat的使用详解

    日期和时间格式由 日期和时间模式字符串 指定.在 日期和时间模式字符串 中,未加引号的字母 'A' 到 'Z' 和 'a' 到 'z' 被解释为模式字母,用来表示日期或时间字符串元素.文本可以使用单引 ...

  8. java打印菱形图案_java打印出菱形图案实例详解

    第一步:首先对图像进行解析 想要打印该图形必须要进行多层循环嵌套,分两个部分进行打印. 第一部分为上半部分前四行,他们是递增的关系,后半部分后三行为递减关系,由此可以得出我们需要写两个打的循环.并且由 ...

  9. java的匿名函数_JAVA语言中的匿名函数详解

    本文主要向大家介绍了JAVA语言中的匿名函数详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 一.使用匿名内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: ...

最新文章

  1. 【直播】黎佳佳:音频数据分析以及特征提取
  2. java多线程 模型_一篇文章读懂Java多线程模型
  3. 信息存储 整数表示 原码 反码 补码 无符号数 有符号数 转换 扩展 截断
  4. 海量数据处理之蓄水池抽样算法
  5. for of 和 for in 在数组和对象中的区别
  6. Springboot 项目中过滤器的使用
  7. Unity Application Block 发布
  8. CF1041E Tree Reconstruction_构造_思维题
  9. PowerDesigner的學習
  10. Python 3.x对.CSV数据按任意行、列读取
  11. linux新终端找回任务,如何向您的Linux终端添加强大的多任务
  12. windows中配置ant环境变量
  13. Tomcat 8 解决“At least one JAR was scanned for TLDs yet contained no TLDs”问题
  14. Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.错误解决
  15. 测试/开发程序员喜欢跳槽?跳了就能涨工资吗?
  16. 备份恢复Lesson 10. Restore and Recovery Concepts
  17. Python——第五天Beer
  18. 新手如何快速入门node.js
  19. 当遇到网站打不开,你会怎么排查它的问题?
  20. 5 大型网站核心架构要素

热门文章

  1. leetcode ---双指针+滑动窗体
  2. 设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)...
  3. iOS 深拷贝、浅拷贝、自定义对象拷贝简介
  4. Java排序:冒泡排序
  5. [转载] python getattr_Python中的异常处理
  6. [转载] python+opencv图像处理:numpy数组操作
  7. [转载] python 短网址_使用Python生成url短链接的方法
  8. [转载] 聚类算法总结
  9. HDU 3400 Line belt (三分)
  10. 【转载】深入分析 ThreadLocal 内存泄漏问题