Java 反射基础

三种方式获取对象类型:

 1 package com.helen.test;
 2
 3 import java.util.Date;
 4
 5 public class Reflect {
 6 public static void main(String[] args) {
 7     Date date=new Date();
 8     System.out.println(date.getClass().getName());
 9
10     Class<?> clas=java.util.Date.class;
11     System.out.println(clas.getName());
12
13
14     try {
15         Class<?> clas1 = Class.forName("java.util.Date");
16         System.out.println(clas1.getName());
17     } catch (ClassNotFoundException e) {
18
19         e.printStackTrace();
20     }
21
22 }
23 }

利用反射实现工厂模式

 1 package com.helen.test;
 2
 3 import java.util.Date;
 4
 5 interface Fruit {
 6     public void eat();
 7 }
 8
 9 class Apple implements Fruit {
10
11     public void eat() {
12         System.out.println("helen eat 苹果!");
13     }
14
15 }
16
17 class Orange implements Fruit {
18
19     public void eat() {
20         System.out.println("helen eat 橘子!");
21     }
22
23 }
24
25 class Factory {
26     public static Fruit getFruit(String className) {
27         Fruit fruit = null;
28         try {
29             Class<?> clas = Class.forName(className);
30             fruit = (Fruit) clas.newInstance();  //实例一个对象
31
32         } catch (Exception e) {
33
34             e.printStackTrace();
35         }
36         return fruit;
37
38     }
39 }
40
41 public class Reflect_Factory {
42     public static void main(String[] args) {
43         Fruit fruit=Factory.getFruit("com.helen.test.Apple");
44         Fruit fruit1=Factory.getFruit("com.helen.test.Orange");
45         fruit.eat();
46         fruit1.eat();
47     }
48 }
时间: 2024-10-15 18:03:11

Java 反射基础的相关文章

Java反射基础笔记

由于工作中发现自己的基础知识掌握的并不是很牢固,遇到的问题与学习的东西也没有很好的做过记录,导致再遇到时耗费大量时间上网搜索,所以决定串下基础知识并尽量形成记录,方便自己之后遗忘时查询,也方便各位有需求的伙伴翻阅查看,大家共同探讨.学习. 本次梳理的是Java反射的基础,该系列为笔者学习慕课反射讲解视频的学习笔记,尽可能全的记录,以帮助初学者快速掌握反射基础知识,如需转载该系列请注明原文链接. 一.反射之Class类的使用 二.反射之获取方法信息 更多编辑中 --

java反射基础知识(一)

一.反射 反射:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 要想解剖一个类,必须先要获取到该类的字节码文件对象.而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.对于反射的操作实际上就是通过Class对象获取: *a.java.lang.reflect.Field:提供有关类或接口的单个

java反射基础知识(四)反射应用实践

反射基础 p.s: 本文需要读者对反射机制的API有一定程度的了解,如果之前没有接触过的话,建议先看一下官方文档的Quick Start. 在应用反射机制之前,首先我们先来看一下如何获取一个对象对应的反射类Class,在Java中我们有三种方法可以获取一个对象的反射类. 通过getClass方法 在Java中,每一个Object都有一个getClass()方法,通过getClass方法我们可以获取到这个对象对应的反射类: 1 2 String s = "ziwenxie"; Class

java反射基础知识(二)

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

java反射基础知识(五)反射应用实践

详解Java反射各种应用 Java除了给我们提供在编译期得到类的各种信息之外,还通过反射让我们可以在运行期间得到类的各种信息.通过反射获取类的信息,得到类的信息之后,就可以获取以下相关内容: Class对象 构造器 变量 方法 私有变量与私有方法 注解 泛型 数组 本文也将从上面几个方面来介绍Java反射.本文涉及的所有代码均在反射代码首先放出一个Java类作为反射的研究对象,类的内容如下: public abstract class FatherObject implements Runnab

java反射(基础了解)

package cn.itcast_01; /** *Person类 */ public class Person { /** 姓名 */    private String name; /** 年龄 */    private int age; /** 性别 */    private String sex; public Person(String name, int age, String sex) {        super();        this.name = name;  

Java反射基础(二)— Class类

上一篇博客中我们提到了ClassLoader,知道ClassLoader是用来动态加载某个Class文件到内存当中,但是这个Class文件是怎么生成的呢?从何而来?这又涉及到另一个概念-java.lang.Class. Class 是java的一个特殊类,对于我们定义的类.接口,它更算是一个抽象类.Class类用于封装被装入到JVM中的类(包括类和接口)的信息. 当一个类和接口被装入JVM时,就自动创建一个Class类的实例来表示这个类,也就是我们说的Class对象,收集了当前这个对象的基本信息

java反射基础

转载请注明出处:https://i.cnblogs.com/EditPosts.aspx?opt=1最近在接触到框架的底层的时候,遇到了反射,便想好好的学习和总结一下反射,帮助理解java框架的运行流程和运行原理:根据万物皆对象,所以类也是对象,通过反射得到描述类的对象,也就是Class这个类.有三种方法得到:类名.class;实例.getclass;Class.forName(全类名);得到描述类的类后,就可以通过类里面的方法,字段和注解.在java编程中,使用的框架大多对底层进行了封装,在进

5、java反射基础

Class对象: Class对象记录了所有与类相关的信息,当类加载器从文件系统中加载.class文件到JVM中的同时会为每一个类创建一个Class对象.通过Class对象可以获取到类的属性.方法.构造器等全部与类相关的信息. 现在假设在com.aop包下有一个抽象类和一个类,定义如下: package com.aop; abstract public class Creature<T> { } 1 package com.aop; 2 3 public class Person extends

Java反射基础(二)

获取域   1. 通过反射API可以获取到类中公开的静态域和对象中的实例域.得到表示域的java.lang.reflect.Field类的对象之后,就可以获取和设置域的值. 与获取构造方法类似,Class类中有4个方法用来获取域: getFileds().getFiled(fieldName). getDeclaredFields().getDeclaredField(fieldName),其含义与获取构造方法的4个方法类似. 静态域和实例域的区别是:在使用静态域的时候,不需要提供具体对象实例,