package com.tjpu.helen.test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import com.sun.java_cup.internal.internal_error;
public class TestReflect {
public static void main(String[] args) throws Exception{
String str1="abc";
Class cls1=str1.getClass();
Class cls2=String.class;
Class cls3=Class.forName("java.lang.String");
System.out.println(cls1==cls2);
System.out.println(cls1==cls3);
//判断是否为基本类型
System.out.println(cls1.isPrimitive());
//int是基本类型
System.out.println(int.class.isPrimitive());
//true
System.out.println(int.class==Integer.TYPE);
//false
System.out.println(int.class==Integer.class);
//int数组不是基本类型
System.out.println(int[].class.isPrimitive());
//int数组时数组
System.out.println(int[].class.isArray());
//int是基本类型
System.out.println(int.class.isPrimitive());
System.out.println("------------------------------------");
//获得方法是需要类型
Constructor constructor1=String.class.getConstructor(StringBuffer.class);
String str2=(String)constructor1.newInstance(new StringBuffer("abc"));
System.out.println(str2);
String str3=(String)Class.forName("java.lang.String").newInstance();
ReflectPoint ref1=new ReflectPoint(3,5);
//仅仅代码字节码字段
Field fieldy=ref1.getClass().getField("y");
//他不知道是哪个对象的y,fieldy
System.out.println(fieldy.get(ref1));
//暴力反射 只要用于对私有成员变量
Field fieldx=ref1.getClass().getDeclaredField("x");
fieldx.setAccessible(true);
System.out.println(fieldx.get(ref1));
//利用反射循环改变字段值
Field[] fields=ref1.getClass().getFields();
for(Field field:fields){
if(field.getType()==String.class){
String oldValue=(String)field.get(ref1);
String newValue=oldValue.replace("b", "a");
field.set(ref1,newValue);
}
}
System.out.println(ref1.str1);
System.out.println(ref1.str2);
System.out.println(ref1.str3);
}
}
package com.tjpu.helen.test;
public class ReflectPoint {
private int x;
public int y;
public String str1="abcdb";
public String str2="basktball";
public String str3="itcast";
public ReflectPoint(int x, int y) {
super();
this.x = x;
this.y = y;
}
}
分享到:
相关推荐
Java反射是Java编程语言中的一个强大特性,它允许运行时的程序访问并操作类、接口、字段和方法等对象,即使这些对象在编译时并未知。这为开发者提供了动态性,可以处理未知类型的对象,或者在运行时发现和调用类的...
Java反射是Java编程语言中的一个强大特性,它允许程序在运行时检查类、接口、字段和方法的信息,并能动态地创建对象和调用方法。在深入理解Java反射之前,我们首先要明白,它属于元编程的一部分,即在编写程序时能够...
Java反射是Java编程语言的一个重要特性,它允许程序在运行时检查和操作对象的内部属性,包括类名、父类、接口、方法、构造器以及字段。反射机制为Java提供了强大的动态性,使得代码能够在运行时发现并调用类的方法,...
java注解和反射的个人学习笔记
java学习笔记java反射机制
Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理对象、类、接口以及它们之间的关系...
本笔记主要涵盖了四个核心知识点:Java反射机制、流(I/O流)、内存管理和Java学习的基础。以下是对这些主题的详细阐述: 一、Java反射机制 Java反射机制是Java语言的一个强大特性,允许程序在运行时检查类、接口、...
Java反射机制笔记 Java反射机制是Java语言中一个强大的功能,它允许程序在运行时检查和修改其自身的结构和行为。通过Java反射机制,我们可以在运行时获取类的信息,包括类的成员变量、方法、构造方法等,并可以动态...
"Java 反射机制详解" Java 反射机制是 Java 语言中的一种强大功能,允许程序在运行时检查和修改自身的结构和行为。它主要用于动态的创建对象、调用方法和访问属性等。 ### Java 反射机制的定义 Java 反射机制是指...
8. **反射机制**:探讨Java反射API的使用,包括动态获取类信息、创建对象、调用方法等功能,这对于理解和调试程序有很大的帮助。 9. **JVM内部机制**:简述Java虚拟机的工作原理,包括类加载、内存管理、垃圾回收...
【Java编程语言基础】 Java是一种广泛使用的面向对象的编程...这些笔记内容全面覆盖了Java的基础和进阶知识,适合从零开始学习Java的人群,通过系统学习,可以建立起扎实的Java编程基础,为实战项目开发打下坚实基础。
本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...
本笔记将深入探讨Java反射的原理、用途以及如何使用。 一、反射的概念与作用 反射是Java提供的一种能力,它允许程序在运行时动态地获取类的信息(如类名、方法名、参数类型等)并调用这些方法。这种动态性使得Java...
Java反射和动态代理是Java编程中的重要特性,它们在实现高度灵活和动态的代码执行方面发挥着关键作用。本文将深入探讨这两个概念及其在实际开发中的应用。 **Java反射** Java反射API允许程序在运行时检查类、接口...
《JAVA学习笔记》是林信良先生的一部深入浅出的Java编程教程,旨在帮助初学者和有一定经验的开发者巩固和提升Java编程技能。这本书涵盖了Java语言的基础到高级概念,是一份宝贵的自学资料。 首先,从基础部分开始,...
本篇笔记将深入探讨Java反射的概念、重要性以及如何使用。 一、反射基础 1. 类加载:当Java虚拟机(JVM)加载一个类时,它会创建该类的Class对象。这个对象包含了关于类的所有信息,包括方法、字段、构造器等。...
对于Java SE中的高级特性,例如反射、注解、动态代理等,笔记可能也会有详细讲解。这些特性使得Java具备了强大的元编程能力,可以用于实现许多复杂的设计模式。 除此之外,如果这份笔记还包含Java EE部分,那么Web...
尚硅谷康师傅java学习笔记。 、2020-4-5 java学习笔记 2020-4-6 java笔记 ---内部类 2020-4-6 java笔记 ---异常 2020-4-6 java笔记 --多线程 ...2020-4-21 java反射 2020-4-22 java8 新特性 2020-4-27 单元测试