当前位置:首页 > 芯闻号 > 充电吧
[导读]JAVA中所有类的祖先类都是object类,object类有一个很暴力的方法 getClass 例子,通过他得到子类的类名:getSimpleNamepublic class Test11A    

JAVA中所有类的祖先类都是object类,object类有一个很暴力的方法 getClass 例子,通过他得到子类的类名:getSimpleName

public class Test11A     {


     public void   check(Obj j) { 
         System.out.println(j.getClass().getSimpleName());

    }

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        Test11A test11a = new Test11A();
        Obj obj = new Sub1(); 
        Obj obj2 = new Sub2(); 
        test11a.check(obj);
        test11a.check(obj2);  

    }

}
输出:
Sub1
Sub2

getName:

com.java.Obj.Sub1
com.java.Obj.Sub2

getDeclaredFields:获得成员变量数组

public class Sub1 extends Obj {

    private  int x;
    private  int y;
    public String string;
    public  void Test()
    {
        System.out.println("Sub1 Test");
    }
public class Test11A     {


     public void   check(Obj j) { 
         System.out.println(j.getClass().getClassLoader());

    }

     public void   check2(Obj j) { 
            // 取得本类的全部属性
         Class mclass =null;
         mclass= j.getClass();
        Field[] fields= mclass.getDeclaredFields();
        for (int i = 0; i < fields.length; i++) {
            Field field = fields[i];
            Class  curClass=field.getType(); 
            System.out.println(field.getModifiers()+","+curClass.getTypeName()+","+field.getName());

        }


    }

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        Test11A test11a = new Test11A();
        Obj obj = new Sub1(); 
        Obj obj2 = new Sub2(); 
        test11a.check2(obj);
        test11a.check2(obj2);



    }




}
输出:
2,int,x
2,int,y
1,java.lang.String,string

访问修饰符是字符串,用java函数转换:

public void   check2(Obj j) { 
            // 取得本类的全部属性
         Class mclass =null;
         mclass= j.getClass();
        Field[] fields= mclass.getDeclaredFields();
        for (int i = 0; i < fields.length; i++) {
            Field field = fields[i];
             Class  curClass=field.getType();

            System.out.println(Modifier.toString((field.getModifiers()))+","+curClass.getTypeName()+","+field.getName());

        }


    }
输出:
private,int,x
private,int,y
public,java.lang.String,string
public void check2(Obj j) {
        // 取得本类的全部属性
        Class mclass = null;
        mclass = j.getClass();
        Field[] fields = mclass.getDeclaredFields();
        for (int i = 0; i < fields.length; i++) {
            Field field = fields[i];
            Class curClass = field.getType();

            System.out.println(
                    Modifier.toString((field.getModifiers())) + "," + curClass.getTypeName() + "," + field.getName());

        }

    }
public void check3(Obj j) {
    // 取得本类的全部方法
    Class mclass = null;
    mclass = j.getClass();
    Method[] marray = mclass.getDeclaredMethods();
    for (int i = 0; i < marray.length; i++) {
        Method field = marray[i];

         java.lang.reflect.Parameter[] parameters= field.getParameters();
         for (int k = 0; k < parameters.length; k++) {
            java.lang.reflect.Parameter parameter = parameters[k];
            System.out.println(parameter.getType().getName());

        }
         System.out.println(","+Modifier.toString(field.getModifiers()) + " " + field.getReturnType().getTypeName() + ":"
                + field.getName());

    }

}
    public void check4(Obj j) {
        // 根据字符串调用对象方法
        Class mclass = null;
        mclass = j.getClass();
        try {

            Method method = mclass.getDeclaredMethod("Test2",String.class,int.class);

            method.invoke(j,"hi",555);
        } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException
                | InvocationTargetException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }

    }
 void  check5( ) throws InstantiationException, IllegalAccessException
    {
         //根据类名生成对象实例
         try {
            Class mClass = Class.forName("com.java.Obj.Sub1");

                try{
                   Object obj =mClass.newInstance();
                    Method  fucMethod= mClass.getMethod("Test2", String.class,int.class);
                    fucMethod.invoke(obj, "hello ",123);

                }catch(Exception e){
                    e.printStackTrace();
                }
        } catch (ClassNotFoundException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }

    }
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

Python和Java是两种广泛应用于编程领域的高级编程语言,它们各有优劣。本文从程序设计应用、系统资源占用、高性能处理和语言特点等四方面详细介绍两种编程语言的区别。

关键字: python java 高性能处理

在这篇文章中,小编将为大家带来Java接口的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: java 接口 Interface

应该有不少小伙伴有假期打工的经历,那今天就来给公众号的读者朋友们分享一个二哥编程星球里一个球友在富士康打工 50 天的感受,相信大家看完后会深深触动的。

关键字: 物联网 java 博客

在过去的几年中,Python的普及速度令人惊叹,Java的王者地位也常年不衰。目前两者的竞争愈发激烈,怎么选择成为了许多初学者萦绕心中的问题,网上有很多版本的说法牵引着他们的思维,让本来很简单的问题复杂化。

关键字: python java

我们都知道,浏览一个网页,有两个很主要的“电脑”在共同运行,一台是远程的,为你提供网页数据的“服务器”,一台是你正在使用的客户端电脑。

关键字: javascript java

在各种网页制作技术论坛中,常常有人询问javascript与Java有什么区别,甚至有人误认为javascript就是Java。javascript与Java确实有一定的联系,但它们并不像我们想象的那样联系紧密,甚至可以...

关键字: javascript java

对于很多初学者来讲,不太清楚Java和C语言的区别,为了让那个大家更清晰的了解,近日特意给大家归纳了一些两者的大致区别,希望能够给大家带来一定的帮助作用,也欢迎大家进行详细补充和归纳。

关键字: C语言 java

Java封装案例

关键字: java 实例

今天我们就要来讲讲看似线程安全的双重检查锁单例模式中可能会出现的指令重排问题。

关键字: java 单例模式 双重检查锁

今天我们来放松下心情,不聊分布式,云原生,来聊一聊初学者接触的最多的 java web 基础。

关键字: Spring xml java
关闭
关闭