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培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 黑马程序猿----Java基础日常笔记---反射与正則表達式 1.1反射 反射的理解和作用: 首 ... 
- Java基础13:反射与注解详解
		Java基础13:反射与注解详解 什么是反射? 反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性. Orac ... 
- Java基础教程:反射基础
		Java基础教程:反射基础 引入反射 反射是什么 能够动态分析类能力的程序称为反射. 反射是一种很强大且复杂的机制. Class类 在程序运行期间,Java运行时系统始终为所有对象维护一个被称为运行时 ... 
- 学习Spring必学的Java基础知识(1)----反射(转)
		引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩".以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系 ... 
- 学习Spring必学的Java基础知识(1)----反射
		引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩".以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系 ... 
- Java基础学习(1)——反射
		反射就是把Java类中的各种成分映射成相应的Java类(主要用于框架开发) 反射的基石–>Class类 Java程序中的各个类属于同一事物,描述这类事务的Java类名就是Class. Class ... 
- Java基础13:反射详解
		本节主要介绍Java反射的原理,使用方法以及相关的技术细节,并且介绍了关于Class类,注解等内容. 具体代码在我的GitHub中可以找到 https://github.com/h2pl/MyTech ... 
- 大数据JavaWeb之java基础巩固----Junit&反射&注解
		最近打算从0开始学学大数据,目前的主业是Android开发,但是当年毕业之后其实是搞J2EE的,所以打算没事又来拓展一下后台的技能,扩宽一下自己的知识体系对于自己的未来也能够多一些可能,另外大数据的一 ... 
- 【java基础学习】反射
		1. 什么是反射 Class.Method.Field.Constructor,它们是反射对象.它们是类.方法.成员变量.构造器,在内存中的形式. 也就是万物皆对象!类是类型.方法是类型.成员变量是类 ... 
- 【JAVA - 基础】之反射的原理与应用
		一.反射简介 反射机制指的是程序在运行时能够获取自身的信息.在JAVA中,只要给定类的名字,那么就可以通过反射机制来获取类的所有信息. 1.反射的应用 JDBC编程中的:Class.forName(& ... 
随机推荐
- 【转】使用Freemarker实现网页静态化
			使用Freemarker实现网页静态化 2017年08月20日 20:45:51 阅读数:1981 1.1. 什么是freemarker FreeMarker是一个用Java语言编写的模板引擎,它基于 ... 
- python数据类型之集合
			对python中集合的理解 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 常用操作 s = set ... 
- Android开发之旅1:环境搭建及HelloWorld
			——工欲善其事必先利其器 引言 本系列适合0基础的人员,因为我就是从0开始的,此系列记录我步入Android开发的一些经验分享,望与君共勉!作为Android队伍中的一个新人的我,如果有什么不对的地方 ... 
- Code Signal_练习题_Sort by Height
			Some people are standing in a row in a park. There are trees between them which cannot be moved. You ... 
- 简单的PHP的任务队列
			文章太长,不作过多介绍,反正,文章的头部就说明了大概的意思...原文如下:写了一个简单的队列任务处理.多进程任务,异步任务可能会用到这个(主要是命令行应用)比如,任务的某个一个环节速度十分不稳定,可能 ... 
- springboot项目的重定向和转发
			下面是idea软件创建的项目目录,这里总结了一下转发与重定向的问题,详解如下. 首先解释一下每个文件夹的作用,如果你是用的是idea创建的springboot项目,会在项目创建的一开始resource ... 
- js处理包含中文的字符串
			场景: js中String类型自带的属性length获取的是字符串的字符数目,但是前端经常会需要限制字符串的显示长度,一个中文字符又大概占两个英文小写字符的显示位置,所以中英文混合的情况下用lengt ... 
- 转:ubuntu 18.04 LTS 安装 java10(JDK) 及问题说明
			原文地址:ubuntu 18.04 LTS 安装 java10 及问题说明 1.下载相应的安装包,例如jdk-10.0.1_linux-x64_bin.tar.gz.下载地址: http://www. ... 
- 阿里云短信服务Java版
			短信服务管理平台 https://dysms.console.aliyun.com/dysms.htm java短信发送API https://help.aliyun.com/document_ ... 
- Android Studio cannot resolve symbols
			引入了第三方类库,不管怎么编译 clean 都找多到类库 关闭重新打开android studio就好了..... 
