Чтение онлайн

на главную - закладки

Жанры

Программирование на Java
Шрифт:

Для выполнения обратной операции (преобразования байтов в строку) необходимо сконструировать новый объект-строку с помощью следующих методов:

* String(byte[] bytes) – создает строку из последовательности байтов в кодировке, принятой по умолчанию;

* String(byte[] bytes, String enc) – создает строку из последовательности байтов в указанной кодировке.

StringBuffer

Этот класс используется для создания и модификации строковых

выражений, которые после можно превратить в String. Он реализован на основе массива char[], что позволяет, в отличие от String, модифицировать его значение после создания объекта.

Рассмотрим наиболее часто используемые конструкторы класса StringBuffer:

* StringBuffer – создает пустой StringBuffer ;

* StringBuffer(String s) – буфер заполняется указанным значением s ;

* StringBuffer(int capacity) – создает экземпляр класса StringBuffer с указанным размером (длина char[] ). Задание размера не означает, что нельзя будет оперировать строками с большей длиной, чем указано в конструкторе. На самом деле этим гарантируется, что при работе со строками меньшей длины дополнительное выделение памяти не потребуется.

Разница между String и StringBuffer может быть продемонстрирована на следующем примере:

public class Test {

public static void main(String[] args) {

Test t = new Test;

String s = new String("ssssss");

StringBuffer sb =

new StringBuffer("bbbbbb");

s.concat("-aaa");

sb.append("-aaa");

System.out.println(s);

System.out.println(sb);

}

}

В результате на экран будет выведено следующее:

ssssss

bbbbbb-aaa

В данном примере можно заметить, что объект String остался неизменным, а объект StringBuffer изменился.

Основные методы, используемые для модификации StringBuffer, это:

* public StringBuffer append(String str) – добавляет переданную строку str в буфер;

* public StringBuffer insert(int offset, String str) – вставка строки, начиная с позиции offset (пропустив offset символов).

Стоит обратить внимание, что оба метода имеют варианты, принимающие в качестве параметров различные примитивные типы Java вместо String. При использовании этих методов аргумент предварительно приводится к строке (с помощью String.valueOf ).

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

public static void main(String[] args) {

StringBuffer sb = new StringBuffer("abc");

String str = sb.append("e").insert(4,

"f").insert(3,"d").toString;

System.out.println(str);

}

В результате на экран будет выведено:

abcdef

При

передаче экземпляра класса StringBuffer в качестве параметра метода следует помнить, что этот класс изменяемый:

public class Test {

public static void main(String[] args) {

Test t = new Test;

StringBuffer sb = new StringBuffer("aaa");

System.out.println("Before = " + sb);

t.doTest(sb);

System.out.println("After = " + sb);

}

void doTest(StringBuffer theSb) {

theSb.append("-bbb");

}

}

В результате на экран будет выведено следующее:

Before = aaa

After = aaa-bbb

Поскольку все объекты передаются по ссылке, в методе doTest, при выполнении операций с theSB, будет модифицирован объект, на который ссылается sb.

Системные классы

Следующие классы, которые будут рассмотрены, обеспечивают взаимодействие с внутренними механизмами JVM и средой исполнения приложения:

* ClassLoader – загрузчик классов; отвечает за загрузку описания классов в память JVM;

* SecurityManager – менеджер безопасности; содержит различные методы проверки допустимости запрашиваемой операции;

* System – содержит набор полезных статических полей и методов;

* Runtime – позволяет приложению взаимодействовать со средой исполнения;

* Process – представляет интерфейс для взаимодействия с внешней программой, запущенной при помощи Runtime.

ClassLoader

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

Каждый объект Class содержит ссылку на объект ClassLoader, с помощью которого он был загружен.

Для добавления альтернативного способа загрузки классов можно реализовать свой загрузчик, унаследовав его от ClassLoader. Например, описание класса может загружаться через сетевое соединение. Метод defineClass преобразует массив байт в экземпляр класса Class. С помощью метода newInstance могут быть получены экземпляры такого класса. В результате загруженный класс становится полноценной частью исполняемого Java-приложения.

Для иллюстрации приведем пример, как может выглядеть простая реализация загрузчика классов, использующего сетевое соединение:

class NetworkClassLoader extends ClassLoader {

String host; int port;

public NetworkClassLoader(String host, int port) {

this.host = host; this.port = port;

}

public Class findClass(String className) {

byte[] bytes = loadClassData(className);

return defineClass(className, bytes, 0,

bytes.length);

Поделиться:
Популярные книги

Мастеровой

Дроздов Анатолий Федорович
Фантастика:
фэнтези
боевая фантастика
альтернативная история
7.40
рейтинг книги
Мастеровой

Новый Рал 9

Северный Лис
9. Рал!
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Новый Рал 9

Черный дембель. Часть 3

Федин Андрей Анатольевич
3. Черный дембель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Черный дембель. Часть 3

Семья. Измена. Развод

Высоцкая Мария Николаевна
2. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Семья. Измена. Развод

Матабар. II

Клеванский Кирилл Сергеевич
2. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар. II

Рейдер 2. Бродяга

Поселягин Владимир Геннадьевич
2. Рейдер
Фантастика:
фэнтези
попаданцы
7.24
рейтинг книги
Рейдер 2. Бродяга

На границе империй. Том 8

INDIGO
12. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 8

Возвышение Меркурия

Кронос Александр
1. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия

Гримуар темного лорда IX

Грехов Тимофей
9. Гримуар темного лорда
Фантастика:
попаданцы
альтернативная история
аниме
фэнтези
5.00
рейтинг книги
Гримуар темного лорда IX

Купец IV ранга

Вяч Павел
4. Купец
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Купец IV ранга

Зубных дел мастер

Дроздов Анатолий Федорович
1. Зубных дел мастер
Фантастика:
научная фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Зубных дел мастер

Я еще не князь. Книга XIV

Дрейк Сириус
14. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я еще не князь. Книга XIV

Неофит

Вайт Константин
1. Аннулет
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Неофит

Измена. (Не)любимая жена олигарха

Лаванда Марго
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. (Не)любимая жена олигарха