Getting object class java

Метод getClass(), объект класс, знакомство с Reflection

Метод getClass(), объект класс, знакомство с Reflection - 1

А теперь самое интересное. Мы познакомимся с классом Class и немного с Reflection.
Как ты уже, наверное, успел понять, в Java все является объектом. А что нужно для объекта? Что есть у каждого объекта и определяет саму его суть?

— Правильно! Молодец. У каждого объекта есть класс. Но вернемся к объектам. Некоторые объекты полностью содержат какую-то сущность, другие же просто помогают ей управлять.

Ко вторым можно отнести FileOutputStream или Thread. Когда ты создаешь объект Thread, новая нить не создается. Ее создает Java-машина после вызова метода start(). Этот объект просто помогает управлять процессом.

Так же и FileOutputStream: файл хранится на диске и его хранением и доступом к нему управляет ОС. Но мы можем взаимодействовать с ним посредством объектов типа File, при опять-таки помощи Java-машины.

— Так вот, для взаимодействия с классами есть специальный класс и называется он — Class.

— Не трудно было догадаться.

— Ага. Каждый раз, когда Java-машина загружает в память новый класс, она создает объект типа Class, посредством которого можно получить некоторую информацию о загруженном классе.

К каждому классу и объекту привязан такой «объект класса».

Class clazz = Integer.class;
Class clazz = new Object().getClass();

А почему ты пишешь clazz, а не class?

— А ты помнишь, что слово class – это ключевое слово в Java и использовать его для именования переменных нельзя?

— Да, я это знаю, знаю. Только забыл.

— Ты где-нибудь уже использовал объект Class?

— Да, мы использовали его, когда писали свою реализацию метода equals.

— Да, можно сравнить – одинаковые ли у объектов классы, если воспользоваться методом getClass().

— А что можно делать с этим объектом?

Class s = int.class; String name = s.getName();
Class s = Class.forName("java.lang.String");
Object o1 = String.valueOf(1); Object o2 = 123 + "T"; o1.getClass() == o2.getClass();

— Интересно, но не так круто, как я думал.

— Хочешь, чтобы было круто? Есть еще Reflection. Reflection – это очень круто.

— А что такое Reflection?

Reflection – это способность класса получить информацию о самом себе. В Java есть специальные классы: Field – поле, Method – метод, по аналогии с Class для классов. Т.к. объект типа Class дает возможность получить информацию о классе, то объект типа Field–получить информацию о «поле класса», а Method–о «методе класса». И вот что с ними можно делать:

Class[] interfaces = List.class.getInterfaces();
Class parent = String.class.getSuperclass();
Method[] methods = List.class.getMethods();
String s = String.class.newInstance();
String s = String.class.newInstance(); Method m = String.class.getMethod("length"); int length = (int) m.invoke(s);

— Вау! Вот это реально круто!

Источник

Читайте также:  Python import egg files
Оцените статью