Рубрики

Как создать пользовательский инструмент javap?

Что такое инструмент javap?

Инструмент javap используется для получения информации о любом классе или интерфейсе. Команда javap (также известная как Java дизассемблер ) разбирает один или несколько файлов классов. Его вывод зависит от используемых опций-c » или « -verbose » для байтового кода и байтового кода вместе с внутренней информацией, соответственно). Если никакие опции не используются, javap распечатывает пакет, защищенные и открытые поля и методы переданных ему классов.

Синтаксис:

javap [classname] [option]

Чтобы понять это, см. Приведенный ниже пример в командной строке, который печатает сведения о классе String.
Используемая команда:

javap java.lang.String

Выход:

Как создать пользовательский инструмент javap?

Чтобы создать пользовательский инструмент javap, мы будем использовать следующие методы java.lang.class

  • Method [] getDeclaredMethods () : Этот метод возвращает объект Method, который отражает указанный объявленный метод класса или интерфейса, представленного этим объектом Class.
  • Field [] getDeclaredFields () : Этот метод возвращает массив объектов Field, отражающих все поля, объявленные классом или интерфейсом, представленным этим объектом Class. Это включает в себя открытые, защищенные, доступ по умолчанию (пакет) и частные поля, но исключает унаследованные поля.
  • Constructor [] getDeclaredConstructors () : Этот метод возвращает массив объектов Constructor, отражающих все конструкторы, объявленные классом, представленным этим объектом Class. Это открытый, защищенный, доступ по умолчанию (пакет) и частные конструкторы.

Мы будем использовать Reflection API Java также. Reflection API используется для проверки или изменения поведения методов, классов, интерфейсов во время выполнения.

Ниже программы реализуют пользовательский инструмент javap :
Пример 1: В этом примере мы используем эту программу на пользовательском классе.

// Программа реализует
// пользовательский инструмент javap

  
// Импортируем отражение

import java.lang.reflect.*;

  
// Тестовый класс, на котором
// будет использоваться пользовательский инструмент javap

class test_class {

  

    // Переменные

    int a;

    double d;

    char c;

    String s;

  

    // Конструкторы

    test_class()

    {

        a = 0;

        d = 0.0;

        c = 'a';

        s = "Hello";

    }

  

    test_class(int a, double d, char c, String s)

    {

        this.a = a;

        this.d = d;

        this.c = c;

        this.s = s;

    }

  

    // Некоторые методы класса

    void printData()

    {

        System.out.println(a + d + c + s);

    }

  

    void setData()

    {

        a = 1;

        d = 0.0;

        c = 'A';

        s = "Hello Geeks";

    }

}

  
// Пользовательский инструмент javap

public class javapcustom {

  

    public static void main(String[] args)

        throws Exception

    {

        Class class_name = Class.forName("test_class");

  

        // Распечатать поле класса

        System.out.println("Fields of class");

  

        Field f[] = class_name.getDeclaredFields();

        for (int i = 0; i < f.length; i++) {

            System.out.println(f[i]);

        }

  

        // Распечатать конструктор класса

        System.out.println("\nConstructors of class");

  

        Constructor cons[] = class_name.getDeclaredConstructors();

        for (int i = 0; i < cons.length; i++) {

            System.out.println(cons[i]);

        }

  

        // Распечатать методы класса

        System.out.println("\nMethods of class");

  

        Method method[] = class_name.getDeclaredMethods();

        for (int i = 0; i < method.length; i++)

            System.out.println(method[i]);

    }

}

Выход:

Fields of class
int test_class.a
double test_class.d
char test_class.c
java.lang.String test_class.s

Constructors of class
test_class(int, double, char, java.lang.String)
test_class()

Methods of class
void test_class.printData()
void test_class.setData()

Пример 2: В этом примере мы используем этот пользовательский инструмент javap на предопределенных классах Java.

// Программа реализует
// пользовательский инструмент javap

  
// Импортируем отражение

import java.lang.reflect.*;

  
// Пользовательский инструмент javap

public class javapcustom {

  

    public static void main(String[] args)

        throws Exception

    {

  

        // Вы можете заменить args [0] на

        // имя предопределенного класса

        // на котором вы хотите использовать инструмент javap

        // например: заменить args [0] на "java.lang.String"

        Class class_name = Class.forName(args[0]);

  

        // Распечатать поле класса

        System.out.println("Fields of class");

        Field f[] = class_name.getDeclaredFields();

        for (int i = 0; i < f.length; i++) {

            System.out.println(f[i]);

        }

  

        // Распечатать конструктор класса

        System.out.println("\nConstructors of class");

        Constructor cons[] = class_name.getDeclaredConstructors();

        for (int i = 0; i < cons.length; i++) {

            System.out.println(cons[i]);

        }

  

        // Распечатать методы класса

        System.out.println("\nMethods of class");

        Method method[] = class_name.getDeclaredMethods();

        for (int i = 0; i < method.length; i++)

            System.out.println(method[i]);

    }

}

Выход:

Рекомендуемые посты:

Как создать пользовательский инструмент javap?

0.00 (0%) 0 votes