Н.А. Вязовик - Программирование на Java

Тут можно читать онлайн Н.А. Вязовик - Программирование на Java - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Программирование на Java
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4.11/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Н.А. Вязовик - Программирование на Java краткое содержание

Программирование на Java - описание и краткое содержание, автор Н.А. Вязовик, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Программирование на Java - читать онлайн бесплатно полную версию (весь текст целиком)

Программирование на Java - читать книгу онлайн бесплатно, автор Н.А. Вязовик
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

public String toString() {

return getClass().getName() + "@" +

Integer.toHexString(hashCode());

}

То есть возвращает строку, содержащую название класса объекта и его хеш-код в шестнадцатеричном формате.

В классах-наследниках этот метод может быть переопределен для получения более наглядного описания объекта. Обычно это значения некоторых полей, характеризующих экземпляр. Например, для книги это может быть название, автор и количество страниц:

package demo.lang;

public class Book {

private String title;

private String author;

private int pagesNumber;

public Book(String title, String author,

int pagesNumber) {

super();

this.title = title;

this.author = author;

this.pagesNumber = pagesNumber;

}

public static void main(String[] args) {

Book book = new Book("Java2","Sun",1000);

System.out.println("object is: " + book);

}

public String toString() {

return "Book: " + title + " ( " + author +

", " + pagesNumber + " pages )";

}

}

При запуске этой программы на экран будет выведено следующее:

object is: Book: Java2 ( Sun, 1000 pages )

Большинство стандартных классов переопределяет этот метод. Экземпляры класса String возвращают ссылку на самих себя ( this ).

Метод wait(), notify(), notifyAll() используются для поддержки многопоточности и были подробно рассмотрены в лекции 12. Они определены с атрибутом final и не могут быть переопределены в классах-наследниках.

Метод protected void finalize() throws Throwable вызывается Java-машиной перед тем, как garbage collector (сборщик мусора) освободит память, занимаемую объектом. Этот метод уже подробно рассматривался в лекции 4.

Метод protected native Object clone() throws CloneNotSupportedException создает копию объекта. Механизм клонирования подробно рассматривался в лекции 9.

Class

В запущенной программе Java каждому классу соответствует объект типа Class. Этот объект содержит информацию, необходимую для описания класса – поля, методы и т.д.

Класс Class не имеет открытого конструктора – объекты этого класса создаются автоматически Java-машиной по мере загрузки описания классов из class -файлов. Получить экземпляр Class для конкретного класса можно с помощью метода forName():

public static Class forName(String name, boolean initialize, ClassLoader loader) – возвращает объект Class, соответствующий классу, или интерфейсу, с названием, указанным в name (необходимо указывать полное название класса или интерфейса), используя переданный загрузчик классов. Если в качестве загрузчика классов loader передано значение null, будет взят ClassLoader, который применялся для загрузки вызывающего класса. При этом класс будет инициализирован, только если значение initialize равно true и класс не был инициализирован ранее.

Зачастую проще и удобнее воспользоваться методом forName(), передав только название класса: public static Class forName(String className),– при этом будет использоваться загрузчик вызывающего класса и класс будет инициализирован (если до этого не был).

public Object newInstance() – создает и возвращает объект класса, который представляется данным экземпляром Class. Создание будет происходить с использованием конструктора без параметров. Если такового в классе нет, будет брошено исключение InstantiationException. Это же исключение будет брошено, если объект Class соответствует абстрактному классу, интерфейсу, или какая-то другая причина помешала созданию нового объекта.

Каждому методу, полю, конструктору класса также соответствуют объекты, список которых можно получить вызовом соответствующих методов объекта Class: getMethods(), getFields(), getConstructors(), getDeclaredMethods() и т.д. В результате будут получены объекты, которые отвечают за поля, методы, конструкторы объекта. Их можно использовать для формирования динамических вызовов Java – этот механизм называется reflection . Необходимые классы содержатся в пакете java.lang.reflection.

Рассмотрим пример использования этой технологии:

package demo.lang;

interface Vehicle {

void go();

}

class Automobile implements Vehicle {

public void go() {

System.out.println("Automobile go!");

}

}

class Truck implements Vehicle {

public Truck(int i) {

super();

}

public void go() {

System.out.println("Truck go!");

}

}

public class VehicleStarter {

public static void main(String[] args) {

Vehicle vehicle;

String[] vehicleNames = {"demo.lang.Automobile",

"demo.lang.Truck", "demo.lang.Tank"};

for(int i=0; i

try {

String name = vehicleNames[i];

System.out.println("look for class for: " + name);

Class aClass = Class.forName(name);

System.out.println("creating vehicle...");

vehicle = (Vehicle)aClass.newInstance();

System.out.println("create vehicle: " + vehicle.getClass());

vehicle.go();

} catch(ClassNotFoundException e) {

System.out.println("Exception: " + e);

} catch(InstantiationException e) {

System.out.println("Exception: " + e);

}

}

}

}

Пример 13.3.

Если запустить эту программу, на экран будет выведено следующее:

look for class for: demo.lang.Automobile

creating vehicle...

create vehicle: class demo.lang.Automobile

Automobile go!

look for class for: demo.lang.Truck

creating vehicle...

Exception: java.lang.InstantiationException

look for class for: demo.lang.Tank

Class not found: java.lang.ClassNotFoundException: demo.lang.Tank

Пример 13.4.

В этом примере делается попытка создать с помощью reflection три объекта. Имена классов, от которых они должны быть порождены, записаны в массив vehicleNames. Объект класса Automobile был успешно создан, причем, дальнейшая работа с ним велась через интерфейс Vehicle. Класс Truck был найден, но при попытке создания объекта было брошено, а затем обработано исключение java.lang.InstantiationException, поскольку конструктор без параметров отсутствует. Класс java.lang.Tank определен не был и поэтому при попытке получить соответствующий ему объект Class было выброшено исключение java.lang.ClassNotFoundException.

Классы-обертки

Во многих случаях предпочтительней работать именно с объектами, а не с примитивными типами. Так, например, при использовании коллекций просто необходимо значения примитивных типов представлять в виде объектов.

Для этих целей и предназначены так называемые классы-обертки. Для каждого примитивного типа Java существует свой класс-обертка . Такой класс является неизменяемым (если необходим объект, хранящий другое значение, его нужно создать заново), к тому же имеет атрибут final – от него нельзя наследовать класс. Все классы-обертки (кроме Void ) реализуют интерфейс Serializable, поэтому объекты любого (кроме Void ) класса-обертки могут быть сериализованы. Все классы-обертки содержат статическое поле TYPE, ссылающееся на объект Class, соответствующий примитивному оборачиваемому типу.

Также классы-обертки содержат статические методы для обеспечения удобного манипулирования соответствующими примитивными типами, например, преобразование к строковому виду.

В таблице 13.1 приведены примитивные типы и соответствующие им классы-обертки.

Таблица 13.1. Примитивные типы и соответствующие им классы-обертки.

Класс-обертка

Примитивный тип

Byte

byte

Short

short

Character

char

Integer

int

Long

long

Float

float

Double

double

Boolean

boolean

При этом классы-обертки числовых типов Byte, Short, Integer, Long, Float, Double наследуются от одного класса – Number. В нем объявлены методы, возвращающие числовое значение во всех числовых форматах Java ( byte, short, int, long, float и double ).

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Н.А. Вязовик читать все книги автора по порядку

Н.А. Вязовик - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Программирование на Java отзывы


Отзывы читателей о книге Программирование на Java, автор: Н.А. Вязовик. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x