Основы объектно-ориентированного программирования. Стесик О.Л. - 33 стр.

UptoLike

Составители: 

64
так как сами классы создаются программистами, а файлы классов
компилятором. Следовательно, Class служит только для описания спо-
собов использования объектов типа Class. Средствами для получения
объектов типа Class служат статический метод Class.forName(String
classname) и метод getClass() класса Object, возвращающие ссылки на
объекты этого типа. Метод newInstance() позволяет создать объект
того класса, который описывается соответствующим объектом типа
Class. Объект, полученный
таким образом, ничем не отличается от
созданного с помощью конструктора:
Пример:
сlass UseClassForNameDemo{
public static void main(String[] args){
try{
Class c=Class.forName(“java.util.Random”);
java.util.Random r=
(java.util.Random) c.newInstance();
System.out.println(“Объект ”+r.toString());
System.out.println(“Работает:nextInt=”+r.nextInt(5));
}catch(Exception e){ e.printStackTrace(); }
}
}
Может показаться, что механизм Class.forName(..) + newInstance()
просто усложняют процедуру создания объекта по сравнению с опера-
тором new, но это совсем не так. Для применения оператора new имя
класса должно быть известно на этапе написания кода класса; метод
Class.forName(String classname) принимает имя класса через параметр,
значение которого определяется во время исполнения программы.
Большая часть остальных методов класса Class
предназначена для
исследования состава класса: его методов, полей, конструкторов, вло-
женных классов. Пакет java.lang.reflect содержит классы, детально
описывающие все компоненты класса классами с соответствующими
именами: Constructor, Field, Method и т.д.
9.5 Класс ClassLoader
Класс ClassLoader позволяет организовать взаимодействие с вирту-
альной машиной в отношении получения файлов классов из различ-
65
ных источников. ClassLoader – абстрактный класс, но его реализациям
достаточно доопределить только два метода: findClass(String
classname) и loadClassData(String name), обеспечивающие способ по-
иска класса по имени и получение файла класса в виде массива байтов.
Таким образом можно добавлять классы, недоступные для загрузчика
классов, используемого по умолчанию.
9.6 Класс SecurityManager
Класс SecurityManager дает возможность приложения исследовать
политику безопасности JVM. Ограничения, накладываемые на воз-
можности данной конкретной JVM не всегда могут быть исследованы
до создания приложения и даже до начала его выполнения. Ограниче-
ния политики безопасности могут приводить к ограничению функцио-
нальности приложения, причем реакция виртуальной машины, уста-
навливаемая по умолчанию, не предусматривает оповещение пользо
-
вателя о причине невыполнения тех или иных операций, если эти опе-
рации выходят за рамки, определенные политикой безопасности. Объ-
ект класса SecurityManager, установленный в виртуальной машине
методом System.setSecurityManager(SecurityManager sm), позволяет
проверяет допустимость операций, регламентируемых политикой
безопасности, методами типа CheckXXX(.....). Вместо XXX в назва-
ниях методов фигурируют термины, отражающие суть проверяемых
разрешений: Accept, Access, Connect, Delete. Параметры методов зави-
сят
от смысла проверяемых ограничений и различны. Методы
CheckXXX не имеют возвращаемых значений; в случае отрицательно-
го ответа они выбрасывают исключение типа SecurityException.
9.7 Классы System и Runtime
Как выглядит виртуальная машина изнутри приложения? Для пред-
ставления JVM на уровне приложения поставляются два класса пакета
java.lang: System и Runtime. System соответствует статической части
исполняющей системы , Runtime – динамической. Некоторые методы
обоих классов совпадают и по названию, и по смыслу, но есть и суще-
ственные различия.