`
Everyday都不同
  • 浏览: 714038 次
  • 性别: 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反射机制,代码/..安逸.不要错过

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

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

    尚硅谷_宋红康_第15章节练习_Java反射机制.doc

    ·基于JDK 11,将Java8、Java9、Java10、Java11新特性一网打尽 ·课程中,Eclipse和IDEA这两种企业一线开发环境都使用到了 3.技术讲解更深入、更全面: ·课程共30天,715个知识视频小节,涉及主流Java使用的...

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

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

    Java面试-反射机制.doc

    Java面试-反射机制.doc

    人力资源-面试-java

    主要是将这些年面试积累的20个比较常见的Java面试内容进行了整理,分别从20个方面进行了列举:Java基础、Java语法、Java集合框架、Java泛型、Java异常处理、Java多线程、Java网络编程、Java数据库编程、Java反射机制...

    关于反射机制的面试题.

    关于反射机制的面试题 常见的对于class的理解 对java底层的理解 适合初学者

    Java初级开发面试题

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

    面试官这样问我Java反射原理,我刚好都会

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

    尚硅谷_宋红康_第15章_Java反射机制.pdf

    ·基于JDK 11,将Java8、Java9、Java10、Java11新特性一网打尽 ·课程中,Eclipse和IDEA这两种企业一线开发环境都使用到了 3.技术讲解更深入、更全面: ·课程共30天,715个知识视频小节,涉及主流Java使用的...

    Java程序员面试宝典

    《Java程序员面试宝典》列举了各大IT公司的面试真题,详细分析了应聘Java程序员职位的常见考点,主要内容包括面试流程及求职准备、Java语言基础、数据类型、集合框架、图形用户界面、输入与输出、多线程、反射机制、...

    Java后端面试问题整理.docx

    Java后端面试知识点总结,涉及JVM • 熟悉JVM内存区域,常用引用类型,垃圾回收机制、算法以及常见的GC垃圾收集器(Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1) • 熟悉常用IO模型(BIO、...

    Java工程师必备面试题【多线程、反射、类加载器、JVM、泛型、异常处理、注解、面向对象编程、集合、IO流、序列化】

    内容概要:以上列出的Java面试题涵盖了Java语言的基础知识、面向对象编程、集合、IO流、多线程、反射、类加载器、JVM、序列化、泛型、异常处理、注解等多个方面。 适用人群:以上Java面试题适用于准备Java开发...

    面试官:反射都不会,还敢说自己会Java?

    一、反射机制 1.1 框架   在学习Java的路上,相信你一定使用过各种各样的框架。所谓的框架就是一个半成品软件,已经对基础的代码进行了封装并提供相应的API。在框架的基础上进行软件开发,可以简化编码。学习使用...

    Java全方面面试题,很全

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

    Java面试题.docx

    16、说说你对Java反射的理解 17、说说你对Java注解的理解 18、Java中String的了解 19、String为什么要设计成不可变的? 20、Object类的equal和hashCode方法重写,为什么? 21-40题 21、List,Set,Map的区别 26...

    免费分享 Java面试笔记 面试八股文 计算机网络基础

    本资源适用于运营商、Java开发校招面试基础巩固,包含计算机网络、Java基础、Java集合、Java并发编程、JVM、MySQL、Spring、MyBatis、Redis、Rocket MQ的经典面试题目,涵盖每个知识点的各个方面,能够很好的提升...

    大厂面试高频题,算法、python、java、behavior questions等.zip

    动态性:Java可以通过反射、注解等机制实现在运行时动态加载类和修改行为,增加了程序的灵活性。 综上所述,Java凭借其强大的特性和广泛的适用范围,在企业级应用、互联网服务、移动开发等领域均扮演着举足轻重的...

Global site tag (gtag.js) - Google Analytics