Авторские Материалы о событиях в Израиле на Ближнем Востоке и в мире

IsraMir.com - Израильская журналистика

Default color brown color green color red color blue color
Вы сейчас тут: Новости arrow Техотдел arrow Свет ученья arrow FAQ Java, часть 2-я
Skip to content
FAQ Java, часть 2-я - Почему класс String final... Версия для печати Отправить на e-mail
Содержание
Почему класс String final...
Как скопировать массив
Sunday, 30 April 2006 | Зэев Фрайман для раздела Ученье – свет
КакскопироватьмассивJavaisramir.comПредлагаю вам вторую часть ЧаВО-FAQ по Java; мне кажется, что несмотря на внешнюю простоту одних вопросов и ответов, и известную сложность других, все они одинаково полезны и для того, кто только начинает работать с Java, и для того, кто уже накопил поределенный опыт и знания. Умный ведь учится на чужих ошибках, а очень умный - на чужих знаниях и наработках. Рекомендую и тем, и другим.
 
Почему класс String final? Я часто хочу перекрыть его.
Финальность гарантирует, что экземпляры String только для чтения (
класс String реализует объекты только для чтения, но если он не final, то
возможно написать подкласс string, который позволит быть экземплярам
изменяемыми.) Strings должен быть только для чтения для безопасности и
эффективности.
 
Что касается эффективности, String очень часто используется, даже неявно
компилятором Java. Еффективность, имеющаяся в классе String дает большие
пpеимущества. Так как никто не может изменить String, то Вы не должны
беспокоиться о том, кто еще ссылается на Ваш String. Проще оптимизировать
доступ к объекту, про который известно, что он не меняется.
 
безопасность- еще более важная причина. Прежде чем String был изменен на
final (пока Java 1.0 была еще бетой) было условие, которое могло быть
использовано для преодоления ограничений секьюрити. Это могло быть сделано
изменением пути к файлу в одном треде, псоле того как другой тред проверил,
что доступ к нему разрешен и собирался открыть его.
 
Существуют другие пути для решения этой проблемы, но разработчики предпочли
сделать String final, особенно так как имеется альтернативный класс
StringBuffer .
 
Как разместить в памяти многомерный массив?
Есть несколько способов. Если Вам необходим прямоугольный массив, то
всю память для него можно выделить за один раз. Следующий пример создает
массив 4x5:
 
    int arr[][] = new int[4][5];
 
 
Если Вы хотите, чтобы каждый ряд содержал свое число колонок, можете
использовать тот факт, что двухразмерный массив на самом деле является
массивом массивов. Следующая часть кода размещает в памяти треугольный
массив:
 
    int arr[][] = new int[4][];    // размещение массива из четырех рядов
    for (int i = 0; i < 4; i++) // инициализация каждого ряда
    arr[i] = new int[i + 1];       // ряд i содержит i+1 колонку
 
 
Заметьте, что если размещается массив любых объектов (в противоположность
примитивным типам), то все ссылки будут по умолчанию "null-ссылками",
которые при попытке разыменования могут превратиться в исключения
NullPointerException.
Другими словами, после:
 
    int arr[] = new int[4];
 
 
можно написать
 
        if (arr[2] == 0)
 
 
Однако, после
 
        Integer Iarr[] = new Integer[4];
 
 
Вы должны заполнить ссылку на объект перед ее использованием. Например,
 
        Iarr[2] = myInt;
 
 
или
 
        arr[2] = new Int(27);
 
 
перед этим можно написать
 
        if (Iarr[2].equals(myInt))
 


 

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:


Автотранслитерация: выключена

Защитный код

Powered by jComments