标签:extend import rgs 类型 string list class null ide
面向对象的编程思想
类 从很多对象中抽取处理的公用的特征行为 抽象描述 用来描述一组对象;
对象 现实生活中 先存在了好多对象 很多相同特征 相同行为
类是用来描述一组对象
反射机制认为是用来描述一组类
可以与之前学习File对比着学习
Class类 用来描述类本身
Package 用来描述类所属的包
Field 用来描述类中的属性
Method 用来描述类中的方法
Constructor 用来描述类中的构造方法
Annotation 用来描述类中的注解@Override 注解可以放置在(类上面 属性上面 方法上面 构造方法前 参数前 )
一.如何获取Class?
方式1:Class a=Class.forName("包名.类名");
方式2:Class a=类名.class;
方式3:通过对象的引用 Class a=对象.getClass();//Object类中的方法
二.Class中的常用方法
1.int n=a.getModifiers();获取类的修饰符(权限 特征)
2.String aa=a.getName();获取名字
3.String ab=a.getSimpleName();简单名
4.Package p=a.getPackage();
p.getName();//获去包名
5.Class m=a.getSuperClass();//获取超类(父类);
6.Class[] mm=a.getInterfaces();//获取类的父接口;
7.Object i=a.newInstance();//默认调用无参数的构造方法创建对象;
8.Field f=a.getField("属性名");
9.getDeclaredField("属性");
Field[] fs=getDeclaredFields();//可以获取公有和私有的属性 只能获取本类中的属性
三.Field类中的常用方法
int i=f.getModifers();
Class ni=f.getType();
String nn=f.getName();
Field f=f.getField("属性名");
Field[] fs=f.getFields();//只能获取公有的属性,继承的也算
操作属性 往里面存/取值
set(对象,值)
值=get(对象)
package test0606; public class Animal{ }
package test0606; public class Person extends Animal{ }
package test0606; public class TestMain{ public static void main(String[] args){ try{ //通过一个Class对象来操作Person.class类文件 Class a=Class.forName("test0606.Person"); //类自己有结构 权限修饰符 特征修饰符 类名字 继承 实现 int i=a.getModifiers();//每一个修饰符 用一个整数来进行表示 System.out.println(i); String name=a.getName(); String sname=a.getSimpleName(); System.out.println(name+"---"+sname); Package p=a.getPackage(); System.out.println(p.getName());//获取包名 Class ax=a.getSuperclass();//获取父类; System.out.println("==="+ax.getName()); }catch(Exception e){ e.printStackTrace(); } } }
package test0606; import java.util.*; public class TestMain{ public static void main(String[] args){ //ArrayList<String> a=new ArrayList<String>(); Class m=ArrayList.class; Class pm=m.getSuperclass(); while(pm!=null){ System.out.println(pm.getName()); pm=pm.getSuperclass(); } } }
package test0606; import java.util.*; public class TestMain{ public static void main(String[] args){ //ArrayList<String> a=new ArrayList<String>(); Class m=ArrayList.class; Class[] pm=m.getInterfaces(); for(Class c:pm){ System.out.println(c.getName()); } } }
--------------------------------------------------------------------------------------------
package test0606; public class Animal{ public String names; private int ages; }
package test0606; public class Person extends Animal{ public String name; private int age; public String toString(){ return "{name:"+name+","+"age:"+age+"}"; } }
package test0606; import java.util.*; import java.lang.reflect.Field; public class TestMain{ public static void main(String[] args){ try{ Class a=Class.forName("test0606.Person"); //Person p=new Person(); Person p=(Person)a.newInstance(); Field[] fds=a.getFields();//public的,继承的也算; System.out.println(fds.length); Field fp=a.getDeclaredField("age");//私有age System.out.println("fp:"+fp); fp.setAccessible(true);//表示私有属性可以直接被操作; fp.set(p,20); Integer value=(Integer)fp.get(p);//取值 System.out.println(value); //System.out.println("p:"+p); /* //通过a获取类中的属性; Field n=a.getField("name");//属性名我知道;属性是public n.set(p,"画画"); System.out.println(p); String name=(String)n.get(p); System.out.println(name); */ /* int num=a.getModifiers();//属性修饰符; System.out.println(num); Class fc=n.getType();//获取属性的类型 System.out.println(fc.getName()); System.out.println("++"+n.getName());//获取属性名字 */ //System.out.println( //Person p=(Person)a.newInstance();//相当于调用Person类的无参数构造方法 //System.out.println(p); }catch(Exception e){ e.printStackTrace(); } } }
---------------------------------------------------------------------------
修改字符串的值;
package test0606; import java.lang.reflect.Field; public class TestMain{ public static void main(String[] args) throws Exception{ String a="abc"; System.out.println(a);//abc //反射的技术可以获取私有属性 可以操作私有属性 //1.获取String类对应的那个class Class cs=a.getClass(); Field fd=cs.getDeclaredField("value");//2.获取类中的属性; //3.直接操作属性的值不可以 设置私有属性可以被操作 fd.setAccessible(true); //获取value属性里面的值(内存地址); char[] temp=(char[])fd.get(a); //通过temp的地址引用 找到真实String对象中的数组 修改数组中的每一个元素 temp[0]=‘爱‘; temp[1]=‘1‘; temp[2]=‘2‘; System.out.println(a);//爱12 } }
标签:extend import rgs 类型 string list class null ide
原文地址:https://www.cnblogs.com/canglongdao/p/13054061.html