标签: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