`
Everyday都不同
  • 浏览: 724966 次
  • 性别: Icon_minigender_1
  • 来自: 宇宙
社区版块
存档分类
最新评论

面试系列(三):Java反射机制

阅读更多

Java的反射机制也会是面试中较常问到的点。建议可以从基本定义,语法和实际应用3方面作答。

 

1、基本定义

反射机制是在运行状态中,

对于任意一个类,都能够知道这个类的所有属性和方法;

对于任意一个对象,都能够调用它的任意一个方法和属性;

这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

 

2、基本语法

1)获取Class对象

一般有3种形式:

  Class<?>  class1 = Class.forName("全限定类名");

  Class<?> class2 = new TestReflect().getClass();

  Class<?> class3 = TestReflect.class;

  System.out.println("类名称   " + class1.getName());//将打印出全限定类名(包名.类名)

 

2)实例化一个类的对象

方法一:newInstance

  Class<A>  class1 = Class.forName("全限定类名");

  A a = class1.newInstance();

  //调用a的set方法

方法二:构造函数

  Constructor<A> cons[] = class1.getConstructors();//该类的全部构造函数

  A a = (A) cons[0].newInstance();//无参

  a = (A) cons[1].newInstance("value1", "value2");//带参

 

3)获取父类和接口(单继承多实现)

父类:

  Class<A>  clazz = Class.forName("全限定类名");

  Class<?> parentClass = clazz.getSuperclass();

  System.out.println("clazz的父类为:" + parentClass.getName());

接口:

  Class<?> intes[] = clazz.getInterfaces();//该类所有接口

  for (int i = 0; i < intes.length; i++) {

      System.out.println((i + 1) + ":" + intes[i].getName());

  }

 

4)获取一个类全部属性:

  Class<A>  clazz = Class.forName("全限定类名");

  Field[] field = clazz.getDeclaredFields();

for (int i = 0; i < field.length; i++) {

// 权限修饰符

int mo = field[i].getModifiers();

String priv = Modifier.toString(mo);

// 属性类型

Class<?> type = field[i].getType();

System.out.println(priv + " " + type.getName() + " " + field[i].getName() + ";");

}

 

5)获取一个类全部方法:

  Class<A>  clazz = Class.forName("全限定类名");

  Method method[] = clazz.getMethods();

  for (int i = 0; i < method.length; ++i) {

            Class<?> returnType = method[i].getReturnType();//返回值类型

            Class<?> para[] = method[i].getParameterTypes();//参数类型

            String Modify = Modifier.toString(method[i].getModifiers());//修饰符

  }

 

6)调用某个类的方法

  Class<A>  clazz = Class.forName("全限定类名");

  Method method = clazz.getMethod("方法名", {参数类型1.class,参数类型2.class,……});

  method.invoke(clazz.newInstance(), {参数值1,参数值2,……});

 

3、反射机制的应用举例:结合工厂模式

 

interface Animal {
	public abstract void eatFood();
}

class Monkey implements Animal {

	@Override
	public void eatFood() {
		System.out.println("monkey eat peach ...");
	}
	
}

class Panda implements Animal {

	@Override
	public void eatFood() {
		System.out.println("Panda eat bamboo ...");
	}
	
}

class Factory {
    public static Animal getInstance(String ClassName) {
    	Animal animal = null;
        try {
        	animal = (Animal) Class.forName(ClassName).newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return animal;
    }
}

 我们来调用一下~

 

 

public static void main(String[] args) {
		Animal animal = Factory.getInstance("com.nineclient.Panda");
		if(animal != null) {
			animal.eatFood();
		}
	}

 运行结果:

 

Panda eat bamboo ...

 

从以上3个点答反射机制,基本上就行了~~

分享到:
评论

相关推荐

    java面试题--反射机制

    下面通过一个简单的示例展示如何使用Java反射机制: ```java import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class ReflectionDemo { public ...

    java反射机制,很安逸.不要错过

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查并操作类、接口、字段和方法的信息,打破了通常编译时静态绑定的限制。通过反射,我们可以动态地创建对象,调用方法,访问和修改字段值,甚至...

    Java岗面试核心MCA版.pdf

    4. 多态机制:Java语言通过方法重写和方法重载实现多态性。 类和接口 1. 抽象类和接口的对比:抽象类和接口都是抽象的概念,抽象类可以包含具体实现,而接口只能包含抽象方法。 2. 普通类和抽象类的区别:普通...

    关于反射机制的面试题.

    "反射机制面试题知识点总结" 一、数组初始化方式 在 Java 中,数组可以通过多种方式进行初始化。首先,可以使用 `new` 关键字来创建一个数组,并指定其长度和类型,例如 `int i[] = new int[12];`、`Class c[] = ...

    「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识 准备 Java 面试,首选.zip

    Java 反射机制详解 Java 代理模式详解 BigDecimal 详解 Java 魔法类 Unsafe 详解 Java SPI 机制详解 Java 语法糖详解 集合 知识点/面试题总结 : Java 集合常见知识点&面试题总结(上) (必看 ) Java 集合常见知识点&...

    Java面试-反射机制.doc

    Java 反射机制与 IO 流 Java 中的反射机制和 IO 流是两个非常重要的概念。在本文中,我们将详细探讨 Java 中的反射机制和 IO 流,包括字节流和字符流的区别、Java 序列化的实现等。 一、Java 反射机制 Java 反射...

    JAVA面试题 人事面试 Java技术面试

    这份压缩包文件包含了一系列关于Java面试的文档和文本,旨在帮助你全面了解并掌握面试中可能遇到的问题。以下是一些主要的Java知识点,根据这些文档标题可以预见到的内容: 1. **Java基础**:Java面试题-COREJAVA...

    「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识

    Java 反射机制详解 Java 代理模式详解 BigDecimal 详解 Java 魔法类 Unsafe 详解 Java SPI 机制详解 Java 语法糖详解 集合 知识点/面试题总结: Java 集合常见知识点&面试题总结(上) (必看 ) Java 集合常见知识点&...

    【Java学习+面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识

    Java 反射机制详解 Java 代理模式详解 BigDecimal 详解 Java 魔法类 Unsafe 详解 Java SPI 机制详解 Java 语法糖详解 集合 知识点/面试题总结: Java 集合常见知识点&面试题总结(上) (必看 ) Java 集合常见知识点&...

    Java入门面试题集锦:全面覆盖30道经典问题,助你准备顺利通过面试!

    11. **反射机制**:Java反射允许程序在运行时动态获取类信息并操作类的属性和方法,增加了程序的灵活性。 12. **序列化**:序列化是将对象转换为字节序列的过程,便于存储和传输,实现Serializable接口的对象可以被...

    面试题:Java基础面试题源码资料.zip

    - **反射机制**:在运行时获取类的信息并操作对象,包括Class类、Constructor、Method和Field的使用。 以上只是Java基础面试题的一部分,实际的面试可能会涵盖更多细节,如设计模式、JVM原理、数据库操作、并发...

    面试题汇总:Markdown编写,作为Java知识库提供给Java面试必考小程序使用.zip

    这份名为"面试题汇总:Markdown编写,作为Java知识库提供给Java面试必考小程序使用.zip"的压缩包,显然是为了帮助Java求职者准备面试而设计的。它包含了丰富的Java知识和面试常见问题,以Markdown格式编写,易于阅读...

    从初面到终面:JAVA面试系列之java基础面试题及答案

    本篇文章将深入探讨Java面试中常见的基础问题及其答案,涵盖了从Java基础到高级特性的各个方面。 1. **Java语言特点**:Java具有简单性、面向对象、健壮性、安全性、可移植性、高性能、多线程、动态性等特点,这些...

    Java程序员面试笔试宝典-何昊pdf版

    2. **反射机制**:反射允许程序在运行时动态获取类的信息并操作类的对象,这对于构建高度灵活的应用程序非常有用。 3. **泛型**:泛型提供了编译时类型安全的方法来避免运行时类型转换错误,同时提高了代码的复用性...

    java面试宝典2017版

    9. **Java反射和注解**:反射允许在运行时动态操作类和对象,而注解则提供了元数据信息,这两者在很多高级场景中都有重要作用。 10. **Spring框架**:作为企业级应用开发的主流框架,Spring的IoC容器、AOP、MVC模式...

    Java常见笔试、面试系列深度剖析第三讲

    "Java常见笔试、面试系列深度剖析第三讲"可能涵盖了一系列关键概念,旨在帮助求职者或开发者更好地理解和掌握Java的核心特性。其中,"反射详解"是这次讲解的重点内容之一。反射在Java中扮演着至关重要的角色,它允许...

    java面试题总汇《很经典的》

    12. **反射与注解**:Java反射机制允许程序在运行时动态访问类的信息,注解则为代码提供了元数据,这两者在实际开发中都有广泛应用。 13. **并发编程**:Java并发库提供了丰富的工具,如ExecutorService、Future、...

    2024 Java面试宝典合集

    3. **JAVA核心面试知识整理**:这部分内容可能涵盖Java基础,如内存模型、垃圾收集、类加载机制、多态、封装、继承、接口、异常处理、集合框架(List、Set、Map的区别和使用)、IO流、NIO、反射、枚举、注解等。...

    java面试评价表

    - **反射机制**:说明反射的用途及其实现方式,探讨其性能影响及应用场合。 - **自定义注解**:讲解自定义注解的使用场景及其实现过程。 - **List与Map区别**:比较List和Map的使用场景,以及ArrayList与LinkedList...

Global site tag (gtag.js) - Google Analytics