- package com.oracle.reflection;<pre name="code" class="html">package com.oracle.reflection;
- import java.util.LinkedList;
- public class Test3 {
- public static void main(String[] args) throws InstantiationException, IllegalAccessException {
- // Class<?> c=LinkedList.class;
- // Class<?>[]cc=c.getInterfaces();
- // Class<?>ccc=c.getSuperclass();//获得父类
- // for(Class c1:cc){
- // System.out.println(c1.getName());
- //
- // }
- Class<?> c=String[].class;
- System.out.println(c.getName());
- if(c.isArray()){
- System.out.println("这是一个数组");
- System.out.println("数组中的元素类型是");
- Class ac= c.getComponentType();//获得中数组中元素的类型
- System.out.println(ac.getName());
- }
- Class<?> c1=Person.class;
- Object o=c1.newInstance();
- System.out.println(o.toString());
- }
- }
- </pre><br>
- <pre name="code" class="html">package com.oracle.reflection;
- import java.lang.reflect.Field;
- public class Test4 {
- public static void main(String[] args) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
- Class c=Person.class;
- Person p=new Person(10,"张大妈","女");
- Field f=c.getDeclaredField("name");
- // f.setAccessible(true);//这样设置就能访问私有的变量
- f.set(p, "小龙女");
- System.out.println(f.get(p));
- }
- }</pre><br>
- <pre name="code" class="html">package com.oracle.reflection;
- import java.lang.reflect.Field;
- public class TestStudent {
- public static void main(String[] args) {
- Class c=Student.class;
- Field[]fs=c.getDeclaredFields();
- for(Field f:fs){
- System.out.println(f.getModifiers()+":"+f.getName());
- //修饰符的编号,都是2的次方 ,两个修饰符的编号可以相加
- }
- }
- }
- </pre><br>
- public class Person {int personno;String name;String sex;public void eat(){System.out.println(this.name+"正在吃");}public int getPersonno() {return personno;}public void setPersonno(int personno) {this.personno = personno;}public String getName() {return name;}public
- void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Person(int personno, String name, String sex) {super();this.personno = personno;this.name = name;this.sex = sex;}public
- Person() {super();}}
- <pre></pre>
- <br>
- <pre name="code" class="html">package com.oracle.reflection;
- public class Student extends Person {
- int score;
- public String school;
- }
- </pre><br>
- <pre name="code" class="html">package com.oracle.reflection;
- import java.lang.reflect.Field;
- public class Test {
- public static void main(String[] args) {
- //1.先获得类实例,这是反射的起点
- // Class c=Person.class;
- // System.out.println(c.getName()) ;//包名和类名
- // System.out.println(c.getSimpleName());//只是类名
- //当前这个类有多少个属性,每个属性是什么
- //Field []fs=c.getFields();//java.lang.reflect包
- //System.out.println(fs.length);//只能获得共有的
- // //方法2
- Person p=new Person();
- Class cc=p.getClass();
- Field []fs=cc.getDeclaredFields();
- for(Field f:fs){
- System.out.println(f.getName()+","+f.getType());
- }
- }
- }
- </pre><br>
- <pre name="code" class="html">package com.oracle.reflection;
- import java.lang.reflect.Field;
- import java.util.Scanner;
- public class Test2 {
- public static void main(String[] args) throws ClassNotFoundException {
- // Scanner s=new Scanner(System.in);
- // System.out.println("请输入一个类名");
- // String name=s.nextLine();
- //
- // Class c=Class.forName(name) ;
- //System.out.println("这个类是:"+c.getSimpleName());
- //Field []fs=c.getDeclaredFields();
- //for(Field f:fs){
- // System.out.println(f.getName()+","+f.getType());
- // }
- //
- Person p=new Person();
- insert(p);
- }
- //利用反射机制可以拼接出一个sql语句
- public static void insert(Object obj){
- Class c=obj.getClass();
- String name=c.getSimpleName();//类名就是表名
- String sql="insert into "+name+"(";
- String value="values(";
- Field[]fs=c.getDeclaredFields();
- for(int i=0;i<fs.length;i++){
- if(i==fs.length-1){
- sql+=fs[i].getName()+")";
- value+="?)";
- }else{
- sql+=fs[i].getName()+",";
- value+="?,";
- }
- }
- System.out.println(sql+value);
- //ps=conn.prepareStatement(sql+value)
- for(int i=0;i<fs.length;i++){
- Field f=fs[i];
- f.setAccessible(true);
- //ps.setObject(i+1,f.get(obj))
- }
- //ps.execute();
- }
- }
- </pre>
- <p>上面是类和属性的反射,下面是方法的反射</p><pre name="code" class="html">package fangfa;
- public class Person {
- String name;
- String sex;
- public void eat(){
- System.out.println(this.name+"正在吃");
- }
- private void eat(String food){
- System.out.println(this.name+"正在吃"+food);
- }
- protected void drink(){
- System.out.println(this.name+"正在喝");
- }
- public Person(String name, String sex) {
- super();
- this.name = name;
- this.sex = sex;
- }
- public Person() {
- super();
- }
- private Person(String name) {
- super();
- this.name = name;
- }
- }</pre><br>
- <pre name="code" class="html">package fangfa;
- import java.lang.reflect.Constructor;
- import java.lang.reflect.InvocationTargetException;
- public class TestConstructor {
- /**
- * 得到构造方法(用的少)
- * @throws NoSuchMethodException
- * @throws SecurityException
- * @throws InvocationTargetException
- * @throws IllegalAccessException
- * @throws InstantiationException
- * @throws IllegalArgumentException
- */
- public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
- Class c=Person.class;
- // Constructor[]cs=c.getDeclaredConstructors();
- // for(Constructor cc:cs){
- // System.out.println(cc.getName());
- // Class[]pc=cc.getParameterTypes();
- // if(pc.length==0){
- // System.out.println("无参数");
- // }else{
- // for(Class pcc:pc){
- // System.out.println(pcc.getName());
- // }
- // }
- // }
- Constructor cs=c.getDeclaredConstructor(String.class);
- cs.setAccessible(true);
- Object o=cs.newInstance("李四");
- System.out.println(o);
- Object o1= c.newInstance();
- System.out.println(o1);
- }
- }</pre><br>
- <pre name="code" class="html">package fangfa;
- import java.lang.reflect.Method;
- public class TestMethod {
- /**
- * @param args
- * @throws NoSuchMethodException
- * @throws SecurityException
- */
- public static void main(String[] args) throws SecurityException, NoSuchMethodException {
- Class c=Person.class;
- //Method[]ms=c.getMethods();
- // Method[]ms=c.getDeclaredMethods();
- // for(Method m:ms){
- // System.out.println(m.getName());
- // }
- // Method ms=c.getDeclaredMethod("eat",String.class);
- //
- // System.out.println(ms.getName());
- //
- // Class<?>[]ct=ms.getParameterTypes();
- // for(Class c1:ct){
- // System.out.println(c1.getName());
- // }
- //每个方法的名,参数,返回值
- Method[]ms=c.getMethods();
- for(Method m:ms){
- System.out.println(m.getReturnType().getSimpleName()+","+m.getName());
- //获得参数
- Class<?>[]cp=m.getParameterTypes();
- if(cp.length!=0){
- for(Class<?> c1:cp){
- System.out.println("\t"+ c1.getName());
- }
- }else{
- System.out.println("\t 无参数");
- }
- }}
- }
- </pre><br>
- <p></p>
反射的代码
最新推荐文章于 2022-08-18 09:03:07 发布