java反射,
java反射,
反射java中重要的概念.
整理明确下概念
什么是反射
Java程序能够运行,就得让Java类被Java虚拟机加载。Java类如果不被Java虚拟机加载就不能正常运行。正常情况下,我们运行的所有的程序在编译期时候就已经把那个类被加载了。
Java的反射机制是在编译时并不确定是哪个类被加载了,而是在程序运行的时候才加载、探知、自审。使用的是在编译期并不知道的类。这样的编译特点就是java反射。
Java反射的作用?
假如有两个程序员,一个程序员在写程序的时需要使用第二个程序员所写的类,但第二个程序员并没完成他所写的类。那么第一个程序员的代码是不能通过编译的。此时,利用Java反射的机制,就可以让第一个程序员在没有得到第二个程序员所写的类的时候,来完成自身代码的编译。
Java的反射机制它知道类的基本结构,这种对Java类结构探知的能力,我们称为Java类的“自审”。
Class类
要正确使用Java反射机制就得使用java.lang.Class这个类。它是Java反射机制的起源。当一个类被加载以后,Java虚拟机就会自动产生一个Class对象。通过这个Class对象我们就能获得加载到虚拟机当中这个Class对象对应的方法、成员以及构造方法的声明和定义等信息。
Class myObjectClass = MyObject.class
如果在编译的时候你不知道类名,但是在运行时有一个字符串形式的类名,你可以这样做:
String className = ... //obtain class name as string at runtime Class class = Class.forName(className);
在运行时,如果该类在classpath中找不到,则Class.forName()方法会抛ClassNotFoundException。
在运行时,
你可以用Java反射检查Java类。当你使用反射时,你经常做的第一件事是检查类。从类中你可以获取下列相关信息:
Class Name
Class Modifies (public, private, synchronized etc.)
Package Info
Superclass
Implemented Interfaces
Constructors
Methods
Fields
Annotations
举例子
● Class Name
从一个Class对象中,你可以得到两种类名。像下面这样通过getName()方法可以得到完成有效的类名(包括包名):
Class aClass = … //obtain Class object. See prev. section
String className = aClass.getName()
● Constructors
你可以像这样访问一个类的构造函数:
Constructor[] constructors = aClass.getConstructors();
用反射创建工厂
package com.example.administrator.lived.Reflect;
/**
* Created by Administrator on 2017/4/20 0020.
*/
interface fruit {
void eat();
}
class Apple implements fruit {
public void eat() {
System.out.println("Apple");
}
}
class Orange implements fruit {
public void eat() {
System.out.println("Orange");
}
}
class Factory {
public static fruit getInstance(String ClassName) {
fruit f = null;
try {
// //一般尽量采用这种形式
//使用Class类的中静态forName()方法获得与字符串对应的Class对象。
f = (fruit) Class.forName(ClassName).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return f;
}
}
//现在就算我们添加任意多个子类的时候,工厂类就不需要修改。
class helloFactory {
public static void main(String[] a) {
fruit f = Factory.getInstance("com.example.administrator.lived.Reflect.Apple");
if (f != null) {
f.eat();
}
}
}
相关文章
- 暂无相关文章
用户点评