Java cтрока представляет из себя строку литералов (текст), помещенных в двойные кавычки, например: "Hello , World! ”
Вы можете присвоить последовательность строковых литералов непосредственно переменной типа String, вместо того чтобы вызывать конструктор для создания экземпляра класса String
Оператор '+' является перегруженным, для объектов типа String, и всегда используется, чтобы объединить две строки операндов. В данном контексте мы говорим об операции конкатенации или сложения строк (хотя '+' не работает как оператор сложения для любых других объектов, кроме строк, например, таких как Point и Circle).
Особенности использования строк в Java
Есть два способа создания строк:
•неявное создание путем присвоения строкового литерала переменной
•явное создание объекта String, через вызов оператора new и вызов конструктора.
String s1строка=литералов"Hello"; |
|
// |
String s3 = |
||
String s2строка=литералов"Hello"; |
// |
// |
|||
s1; одинаковыессылки |
// String |
|
|||
String |
s4 |
=объектnew String("Hello"); |
|
||
String |
s5 |
=объектnew String("Hello"); |
// String |
|
|
Строковые литералы хранятся в общем пуле. Это облегчает совместное использование памяти для строк с тем же содержанием в целях сохранения
памяти. Объекты строк, выделенные с помощью оператора new хранятся в куче (heap), а там нет разделяемого хранилища для одинакового контента (содержания).
Кратко о классе String
Строки String являются неизменяемыми, поэтому строковые литералы с таким контентом хранятся в пуле строк. Изменение содержимого одной строки непосредственно может вызвать нежелательные побочные эффекты и может повлиять на другие строки, использующие ту же память.
Обратитесь к API JDK для того чтобы ознакомиться с полным списком возможностей класса String в java.lang.String.
Методы класса String
//длина |
String |
int length() возвращаетдлину// |
boolean isEmpty() // то же самое thisString.length == 0 //сравнение
boolean equals(String another)НЕЛЬЗЯ//использовать'=='или'!='
длясравненияобъектов |
String в |
Java |
boolean equalsIgnoreCase(String |
another) |
|
int compareTo(Stringвозвращаетеслиэта0 строка another) |
// |
|
совпадаетanother; |
|
another; or >0 |
//еслилексикографически<0 меньше |
|
|
int compareToIgnoreCase(String another) boolean startsWith(String another)
boolean startsWith(String another, int fromIndex) //поискначинается fromIndex
Классы StringBuffer и StringBuilder
JDK предоставляет два класса для поддержки возможностей по изменению строк: это классы StringBuffer и StringBuilder (входят в основной пакет java.lang ).
StringBuffer используется для многопоточных программ StringBuilder для для однопоточных
Методы StringBuffer.
java.lang.StringBuffer. //Методы класса:
// конструкторы
StringBuffer() // инициализация пустой строкой StringBuffer(int size)// определяет размер при инициализации StringBuffer(Stringинициализируетясодержимымs s) //
int length()длинастроки// //Методыдляконструисодержимогоования
StringBuffer append(type arg) /*типможетбытьпримитивным, char[], String, StringBuffer, т.д.*/ //Методыдляманипуляцсодержимыми
StringBuffer delete(int start, int end) StringBuffer deleteCharAt(int index) void setLength(int newSize)
void setCharAt(int index, char newChar) StringBuffer replace(int start, int end, String s) StringBuffer reverse()
//Методыдлявыделенияцелого/частисодержимого char charAt(int index)
String substring(int start)
String substring(int start, int end) String toString()
//тодыдляMeпоиска
int indexOf(String searchKey)
int indexOf(String searchKey, int fromIndex) int lastIndexOf(String searchKey)
int lastIndexOf(String searchKey, int fromIndex)
Обратите внимание, что объект класса StringBuffer является обычным объектом в прямом понимании этого слова. Вам нужно будет использовать конструктор для создания объектов типа класс StringBuffer (вместо инициализации строки). Кроме того, оператор '+' не применяется к объектам, в том числе и к объектам StringBuffer . Вы должны будете использовать такой метод, как append() или insert() чтобы манипулировать StringBuffer .
Пример создания строки из частей
//СоздадимстрокутипаYYYY |
-MM-DD |
HH:MM:SS |
int year = 2010, month = 10, day = |
10; |
|
int hour = 10, minute = 10, second |
= 10; |
|
String dateStr = new StringBuilder().append(year).append("- ").append(month).append("").append(day).append("").append(hour)
.apend(":").append(minute).append(":").append(second).toString(); System.out.println(dateStr);
// StringBuilder более эффективный конкатенация String
String anotherDataStr = year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second; System.out.println(anotherDataStr);
Почему стоит использовать StringBuffer и StringBuilder
Объекты StringBuffer или StringBuilder так же, как и любые другие обычные объект хранятся в куче, а не совместно в общем пуле строк.
Следовательно, могут быть изменены, не вызывая нехороших побочных эффектов на другие объекты.
Продолжение GUI
•Графический интерфейс пользователя (GUI) в Java создается с помощью по меньшей мере трех типов объектов:
•компоненты
•события
•слушатели событий
•Мы ранее обсуждали компоненты, которые являются объектами, которые представляют элементы экрана
•Надписи (labels), кнопки (buttons), текстовые поля (text fields), меню и т.д.
•Некоторые компоненты контейнеров, которые содержат и позволяют организовывать другие компоненты
•Фреймы (frames), панели (panels), диалоги и т.д.
•Событие представляет собой объект, который представляет собой некоторую активность, на которою мы можем ответить некоторым образом
•Например, мы можем захотеть нашу программу, чтобы выполнить какое-либо действие, когда происходит следующее:
•Движение мыши
•Перетаскивание мышью
•Нажатие кнопки мыши (лев или прав)
•Нажатие кнопки GUI
•Нажатие клавиши клавиатуры
•Истечение времени по таймеру
•События часто соответствуют действия пользователя, но не всегда
Обработка событий в Java
События и слушатели
Стандартная библиотека классов Java содержит несколько классов, которые представляют собой типичные события. Компоненты, такие как кнопки, генерируют событие, когда оно происходит. Объект слушателя "ждет” события, которое должно произойти и реагирует соответствующим образом. Мы можем конструировать объекты слушателя и принимать любые действия, которые уместны при возникновении события.