`
Everyday都不同
  • 浏览: 730947 次
  • 性别: 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编程2023版第2教学月阶段面试题库:涵盖SpringBoot手写、HTTP协议、Java反射机制及数据库操作与优化技术详解

    内容概要:本文档是《Java_2023版第2教学月阶段面试题库》,涵盖了手写SpringBoot、HTTP请求、Java反射机制、数据库操作等多个方面。首先,文档详细介绍了HTTP请求的结构及其请求头内容,区分GET和POST方法的特点。...

    Java岗面试核心MCA版.pdf

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

    关于反射机制的面试题.

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

    JAVA面试基础篇章-JAVA反射

    JAVA反射机制是Java语言提供的一种基础功能,允许程序在运行时访问和操作类和对象的内部属性和方法。反射是一种强大的机制,但同样也存在一定的性能损耗和安全风险。理解反射的工作原理和使用方法对于Java开发者来说...

    【Java后端开发】Java后端面试题答案:集合框架、线程安全、反射机制及异常处理详解

    此外,文档讨论了Java中的四种引用类型(强、软、弱、虚引用)及其应用场景,以及反射机制的基本概念和实现方式。最后,文档简要介绍了Java中的异常分类、处理机制,以及wait和sleep方法的区别。 适合人群:具有Java...

    「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面试宝典2017版

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

    Java初级开发面试题

    Java面试题包括但不限于: Java基础知识:语法、面向对象编程、集合、多线程、异常处理等。 Java高级特性:反射、泛型、枚举、注解、 Lambda表达式等。 Java虚拟机:Java内存模型、垃圾回收、类加载机制等。 ...

    2024 Java面试宝典合集

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

Global site tag (gtag.js) - Google Analytics