介绍 2。类获取类的属性,构造器,方法和注解的简单使用
3。类动态的调用构造器,方法,修改属性
这篇文章给大家分享的是有关Java反射是什么的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。
<强> 1,类的简单介绍强>
类类的类表示正在运行Java的应用程序中的类和接口。枚举是一种类,一个注解是一种接口,每个数组也属于一个反映为类对象的类,该对象由具有相同元素类型和维数的所有数组共享。原始Java类型(布尔、字节、字符,短,int,长,浮点数和双精度数),和关键字空白也表示为类对象。
摘自jdk1.8中文版,刚开始看可能不懂,现在逐句来解释一下。
第一句话:一个类被加载以后,JVM就会在内存中给创建一个对应类的类对象。
第二句话:类型相同的对象,维数相同的数组(不管长度)共享的是同一个内存中类的对象。
第三句话:上面这些原始的类型,也会在内存中有一个与之对象的类对象
包com.dingyu; 进口org.junit.Test;/* * *类的简单使用方法 * * @author 70241 * */公开课ClassDemo { @Test 公共空间classTest1 () { 尝试{ 类class1=forname (“com.dingyu.User");//第一种获取类对象的方法 用户用户=新用户(); 类class2=user.getClass();//第二种获取类对象的方法 类class3=User.class;//第三种获取类对象的方法 System.out.println(“接下来判断到底同一类的不同对象的类对象是不是同一个:“ + (class1.hashCode ()==class2.hashCode(),和class1.hashCode ()==class3.hashCode ())); }捕捉(ClassNotFoundException e) { e.printStackTrace (); } } @Test 公共空间classTest2 () { String [] s1=新的字符串[10]; String [] s2=新的字符串[30]; String [] [] s3=新的字符串[3][30]; .hashCode System.out.println (s1.getClass () ()==s2.getClass () .hashCode ()); .hashCode System.out.println (s1.getClass () ()==s3.getClass () .hashCode ()); } }
2。类获取类的属性,构造器,方法和注解的简单使用
包com.dingyu; 进口java.lang.annotation.Annotation; 进口java.lang.reflect.Constructor; 进口java.lang.reflect.Field; 进口java.lang.reflect.Method; 进口org.junit.Test;/* * *类的简单用法 * * @author华中 * */公开课ClassDemo02 { @Test 公共空间usingClass()抛出异常{ 类userClass=forname (“com.dingyu.User");//获得类名 System.out.println (userClass.getName());//获得全类名 System.out.println (userClass.getSimpleName());//获得类名//获得属性 ?[]字段userClass.getDeclaredFields();//获得所有的属性 (字段字段:字段){ System.out.println (field.getName ()); } System.out.println (userClass.getDeclaredField (“id") . getname());//获得指定的属性//获得方法 方法[]方法=userClass.getDeclaredMethods();//获得所有的方法 (方法方法:方法){ System.out.println (method.getName ()); } 方法方法=userClass.getDeclaredMethod (“setId" int.class);//获得指定的方法,前面方法名,后面方法的参数 System.out.println (method.getName ());//获得构造器 构造函数[]构造函数=userClass.getDeclaredConstructors (); System.out.println (constructors.length); 构造函数构造函数=userClass.getDeclaredConstructor (int。类,字符串。类,int.class);//获得指定的构造器,需要指定构造的参数 System.out.println (constructor.getName ());//获得注解 注释注释[]=userClass.getAnnotations (); (注释注释:注释){ System.out.println(注释); }//指定注解名 MyAnnotation注释=(MyAnnotation) userClass.getDeclaredAnnotation (MyAnnotation.class); System.out.println(注释); } }
3。类动态的调用构造器,方法,修改属性
包com.dingyu; 进口java.lang.reflect.Constructor; 进口java.lang.reflect.Field; 进口java.lang.reflect.Method; 进口org.junit.Test;/* * *使用反射动态的调用构造器,方法,修改属性 * @author 70241 * */公开课ClassDemo03 { @Test @SuppressWarnings (“all") 公共空间usingClass()抛出异常{ 类class1=forname (“com.dingyu.User");//使用反射去调用构造器 用户user1=(用户)class1.newInstance();//调用的是无参的 构造函数构造函数=class1.getDeclaredConstructor (int.class、String.class int.class);//获得有参的构造器 用户user2=(用户)constructor.newInstance (04,“dingyu", 20);//动态生成对象//使用反射去调用方法 方法methodSetId=class1.getDeclaredMethod (“setId" int.class); methodSetId。调用(user1, 02);//执行user1中的setId,后面是给的参数 System.out.println (user1.getId ());//使用反射去修改属性的值 字段字段=class1.getDeclaredField (“age"); field.setAccessible(真正);//因为年龄是私有的,加上这句就表示这个属性不需要做安全检查 字段。集(user1, 20); System.out.println (field.get (user1)); System.out.println (user1.getAge ()); } }Java反射是什么