/**
* 获取一个Class类有三种方法:
* @author Morgan
*/
public class GetClass {
public static void main(String[] args) {
//第一种获取方法,直接了当
Class<String> class1 = String.class;
System.out.println(class1);
//第二种获取方法,对实体类运用方法
String str = "just do it";
Class<?> class2 = str.getClass();
System.out.println(class2);
//第三种获取方法,直接传递一个类名,字符串形式
try {
Class<?> class3 = Class.forName("java.lang.String");
System.out.println(class3);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
/**
* 获取一个Filed字段类的,有四种方法
* @author Morgan
*
*/
public class GetFiled {
public static void main(String[] args) {
Class<String> class1 = String.class;
//1.获取所有申明的字段
Field[] fields1 = class1.getDeclaredFields();
for (Field field : fields1) {
System.out.println(field);
}
System.out.println("------------------------------------------------");
//2.获取所有的公共类字段
Field[] fields2 = class1.getFields();
for (Field field : fields2) {
System.out.println(field);
}
System.out.println("------------------------------------------------");
//3.获取指定字段名(所有申明的字段都可获取)
try {
Field field1 = class1.getDeclaredField("value");
System.out.println(field1);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
System.out.println("------------------------------------------------");
//4.获取指定公共字段名
try {
Field field2 = class1.getField("CASE_INSENSITIVE_ORDER");
System.out.println(field2);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
}
/**
* Method类:同Field有四种方法
* @author Morgan
*/
public class TestMethod {
public static void main(String[] args) {
Class<String> class1 = String.class;
Method[] methods1 = class1.getDeclaredMethods();
for (Method method : methods1) {
System.out.println(method);
}
System.out.println("------------------------------------------------");
Method[] methods2 = class1.getMethods();
for (Method method : methods2) {
System.out.println(method);
}
System.out.println("------------------------------------------------");
try {
Method method1 = class1.getDeclaredMethod("checkBounds",new Class[]{byte[].class,int.class,int.class});
System.out.println(method1);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
System.out.println("------------------------------------------------");
//如果方法中的无参数,则得到方法时,只需传一个方法名即可
try {
//Method method2 = class1.getDeclaredMethod("hashCode");
//getMethod只获取public的方法
Method method2 = class1.getMethod("hashCode");
System.out.println(method2);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}
/**
* Constructor类:同上有四种方法
* @author Morgan
*
*/
public class TestConstructor {
public static void main(String[] args) {
Class<String> class1 = String.class;
Constructor<?>[] cons1 = class1.getDeclaredConstructors();
for (Constructor<?> constructor : cons1) {
System.out.println(constructor);
}
System.out.println("------------------------------------------------");
Constructor<?>[] cons2 = class1.getConstructors();
for (Constructor<?> constructor : cons2) {
System.out.println(constructor);
}
System.out.println("------------------------------------------------");
try {
Constructor<String> con1 = class1.getConstructor(char[].class);
System.out.println(con1);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
System.out.println("------------------------------------------------");
try {
Constructor<String> con2 = class1.getDeclaredConstructor(new Class[]{int.class,int.class,char[].class});
System.out.println(con2);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}
/**
* 由一个class得到一个类的实体
* @author Morgan
*
*/
public class TestGetInstance {
public static void main(String[] args) {
Class<String> class1 = String.class;
try {
//用此种方法,类必须有默认构造函数
String obj = (String) class1.newInstance();
System.out.println(obj.length());
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
Constructor<String> con1 = null;
try {
con1 = class1.getConstructor(char[].class);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
try {
String str2 = (String) con1.newInstance(new char[]{'t','e','s','t'});
System.out.println(str2);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
/**
* method方法执行
* @author Morgan
*
*/
public class TestMethodInvoke {
public static void main(String[] args) {
String testStr = "testStr";
Method method = null;
try {
method = String.class.getMethod("charAt", new Class[]{int.class});
} catch (SecurityException e1) {
e1.printStackTrace();
} catch (NoSuchMethodException e1) {
e1.printStackTrace();
}
try {
Object ch = method.invoke(testStr, 1);
System.out.println(ch);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
### Java反射机制总结 #### 反射的概念与起源 反射的概念最早由Smith于1982年提出,指的是程序能够访问、检测并修改其自身状态或行为的能力。这一概念的提出迅速引起了计算机科学领域的广泛关注,并在之后的研究中...
以下我们将深入探讨Java反射的基本概念、主要API以及如何通过给定的代码示例来理解反射的应用。 首先,让我们了解什么是类的反射。在Java中,`java.lang.Class` 类代表了运行时的类信息。我们可以通过一个类的全名...
JAVA REFLECT (java 反射) 取得类的继承结构 - 类所在的包; |- public Package getPackage() - 类的声明方式; |-取得全类名:public String getName() |-只取类名: public String getSimpleName() - 类所继承...
Java反射机制是Java编程语言中一个强大的特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具备了高度的灵活性,能够在运行时动态地获取类的信息并调用对象的方法。Java...
Java反射(Reflect)是...总结,Java反射是Java语言中的强大工具,虽然带来了一些便利和灵活性,但也需要注意其潜在的风险和性能影响。在实际开发中,应根据具体需求权衡是否使用反射,并确保代码的可读性和可维护性。
Java反射是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心在于`java.lang.Class`类以及相关的类和接口,如`java.lang.reflect`包下...
Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并进行操作。通过反射,开发者可以在程序执行时发现并访问类的字段(fields)、方法(methods)以及构造器(constructors),...
JAVA反射知识总结涉及到的主要知识点包括: 1. 反射的基本概念: 反射是Java语言中的一个特性,允许程序在运行期间动态地访问和操作类、方法、成员变量等组件。通过反射,可以突破访问控制,动态创建对象,调用方法...
总结,Java反射机制是Java平台灵活性和动态性的体现,它极大地扩展了Java程序的能力,但同时也需要谨慎使用,平衡好其带来的便利和潜在问题。学习和理解反射机制对于深入理解Java以及开发复杂系统至关重要。
Java反射机制主要依赖于`java.lang.reflect`包下的API,其中包括: - `java.lang.Class`:表示一个类的运行时信息。 - `java.lang.reflect.Method`:表示类的方法。 - `java.lang.reflect.Field`:表示类的字段。 -...
- [Oracle官方文档](https://docs.oracle.com/javase/tutorial/reflect/):提供关于Java反射机制的详细解释和示例。 - [Effective Java](https://www.amazon.com/Effective-Java-3rd-Edition/dp/0134685997):由...
### Java反射机制总结 #### 一、Java反射机制概述 Java反射机制是Java语言的一个重要特性,它允许程序在运行时获取类的信息以及操作类的对象。这种能力使得Java程序能够实现动态性,即在编译期不知道具体类型的...
下面我们将深入探讨Java反射的核心知识点。 1. **Chp16** - 可能指的是某个教程或书籍中的第16章,专门讲解反射。在Java中,反射通常被视为高级主题,涉及JVM(Java虚拟机)和元数据的交互。通过Java.lang.Class类...
Java中的反射机制是Java语言提供的一种强大的工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的...通过理解并熟练掌握Java反射机制,开发者可以更好地利用Java的动态性,提高代码的可扩展性和维护性。
Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法...
Java反射机制是Java编程语言中一个强大的工具,它允许程序在运行时动态地获取类的信息并操作类的对象。反射机制的核心在于java.lang.reflect包中的API,主要包括Class类、Constructor类、Method类和Field类。以下是...
总结,Java反射是一个强大的特性,它使得程序在运行时能够动态地获取和修改类的信息。然而,使用时需谨慎,平衡其带来的灵活性和可能的性能损失。对于开发者来说,深入理解反射机制并合理运用,能极大地提升代码的可...
总结,Java反射机制提供了对运行时类信息的强大访问能力,虽然存在潜在的风险,但在许多场景下,如框架开发、动态代理、元编程等,它的优势是无可替代的。学习和熟练掌握Java反射,能够显著提升编程的灵活性和解决...