Заочники 2020-2021 / java_zaoch_sem_1
.pdfусловиянужноперенестиконец.Дляэтогоиспользуетсяцикл do while.
Например,
do {
n++;
} while (n < 10);
Циклы for – оченьраспространеннаяязыковаяконструкция.Вней
количествоповторений контролипеременной,игрольающейуется
счетчиобновлянакаитждой.Напримермойр,ции
for (int i = 0; i < 10; i++) {
System.out.println(i);
} |
|
Первыйэлемоп раторант |
for обычновыполняинициализациюсчетчика, |
второйформулируетусловие |
выпотецикла,ненияатретийопределяет |
способобновлениясчетчика. |
|
Длятого,чтобыпрерватьвыполнениецикла,следуетвоспользоваться |
|
ключесловомым |
break. |
for (int i = 0; i < 10; i++) {
System.out.println(i); if (i > 5) {
break;
}
}
11
Объекты, |
лассы |
|
ЯзыкJava |
являетсяполностьюобъектно |
-ориентирязыкованным |
программиров.Поэтомуосновевсехпрограмм, ннаиэтомсанныхя |
|
|
языке,являютсяклассы. |
|
|
Далееприведенпримерсозданияпростогокласса |
User. |
public class User { private String login;
private String passHash;
public User(String login, String passHash) { this.login = login;
this.passHash = passHash;
}
public String getLogin() { return login;
}
public void setLogin(String login) { this.login = login;
}
public String getPassHash() { return passHash;
}
public void setPassHash(String passHash) { this.passHash = passHash;
}
}
12
Создклначинаетсясниестрочкиа |
|
|
|
public class User |
|
|
|
,гдеpublic ( |
модификатор доступадлякласса,будутрассмотрпозднеены |
), |
|
ключевоес |
ловоclass |
закоторымследуетназвкласса. ние |
|
В Java существуетсоглашение(полностьюкотм рымжнознакомитьсяпо
ссылке http://www.oracle.com/technetwork/java/codeconventions-150003.pdf),
чтоприименованиииспользуетсяподход« |
camel case»При.этомназвание |
|
||
классовначинаютсябольшойбуквы,названияпеременных,методовс |
|
|
||
маленькой. |
|
|
|
|
Длясозданияэкземпляраклассанеобходимовоспользоваться |
|
|
||
конструктором. |
Например, |
|
|
|
User user = new User(“my_login”, “pass_hash”); |
|
|||
Врезультатебудетсоздан |
|
экземпляркласса |
User,укотоперогоеменная |
|
login равна« |
my_login»,аpassHashравен« |
pass_hash»Вданном. приестьере |
|
|
толькоодин.Всегострукторвклассеможетбытьп оизвольное |
|
|
||
количествоконструкторов.Есклассеявноинеуказаниодного |
|
|
||
конструктора, неговсеравноестьодинстурктор |
– конструкторпо |
|||
умолчан.Напр, имерю |
User user = new User(); Т.е.констукторпоумолчанию |
|
||
– конструкторбезпараметров. |
|
|
||
Дляобъявленияк |
|
онструктосуществуетследующиепр.оваила |
|
|
public User(String login, String passHash) { |
|
|
||
…} |
|
|
|
|
Вначалеидет |
модификатор доступа (вданномслучpublic),з названиетем |
|
||
классаивскобквходныепараметрыдляинициализации. |
|
|
||
Поляэкземпложнобъсяравить |
помощьюключеслоfinalваого |
.Такое |
||
поледолжнобытьпроинициализприсозданиобъектов. ировано |
|
После |
||
инициализацтакегоп значенлянельбудетизменить.я |
|
|
||
private final String login; |
|
|
13
Ещеоднимключесло,котвомымиспроежноприобъяльзовать |
лении |
|
объекта,является |
static. Поле,иммодификаторющее |
static,существует |
одномэкземпдлякаждогол.яреасса |
|
|
private static int nextId; |
|
|
Статическиепеременныеиспользуютсякрайнередко.Еслииспользуются |
|
|
static переменные,это,скореевсего,гово |
ритопроблемахв |
|
проектиркласс.Авотиспользованиеании |
static конвстречаетант |
|
постоянно. |
|
|
private static double PI = 3.14; |
|
|
Конст,какпр,аименуютсянтывилоиспользуябуквытолько |
верхнего |
|
регистра. |
|
|
Деструкторовязыке |
Java н.Те..удалятьобъе |
ктпослетого,каконнужен |
нетнеобходимости |
– онбудаленавтоматическиетсборщикоммусора. |
|
Пакеты
Язык Java позволяетобъедиклассынаборы, ятьазываемыепакетами |
|
||
(package). Пакетыоблегчаюторганизациюрабп тызволяютотдели ь |
|
||
классы,созданные |
|
однимразработчиком, классов,разработанныхдругим. |
|
Встандартнойпоставке |
|
Java можновстрследующиепакетытить: java.lang, |
|
java.итutil,.д.Стандартныепакетыjavaязыка.net |
|
Java представляютсобой |
|
иерархичныеструктуры.Подобнокаталнадискегам |
|
ом,пьютераакеты |
|
могутбытьвложедивдругой.нВсестандаыпакепритынадлежатые |
|
||
иерархиямjava,Такжепакjavaxиспотыд.уникальностиьзуютсяимен |
|
||
классов.Напри,еслипомеклассститьр |
|
User впакет ru.miet, тополноеимя |
|
классабудет |
ru.miet.User. Сточкизрения |
Java классы ru.miet.User и |
com.miet.User дваабсолютноразныхклассаиконфликтаимбудет.
Импортированиеклассов
Классможетиспользвсеклассыизобсвапактивьсенногота общедоклаиздругихспакетовсытупные.
14
Доступкк лассамиздругихпакетовможнополучитьдвумяспос.В бами -
первых,можноуказывимялноепапередкетатьименемкаждогокласса.
Например:
ru.miet.User user = new ru.miet.User();
Очевидно,чтоэтотспособслишкутомителен.Болеепростой |
|
распространенныйспособпредусматриваприменениключевогот |
слова |
import. Всамомначалеклассаобъявляем. |
|
import ru.miet.User; |
|
Идалеевкодеможнопростописать: |
|
User user = new User(); |
|
Чтобывручнуюнепрописыватьвсе |
import в Eclipse есть комбинацияклавиш |
Ctrl + Shift + O, котпораязволиттоматическипрописатьвсен достающие import.
15
Наследование
Классы,суперклассыиподклассы
Наследование Java осуществляетсяпомощьюключесло аого |
extends. |
|
Напр,опклассишемр |
Administrator, которыйбудетрасширятькл |
ассUser. |
public class Administrator extends User { |
|
|
… |
|
|
} |
|
|
Класс User втакомслучаеназываетсясупеилиродительскимкл,ассом |
|
|
класс Administratorподклассомили |
дочерним.Дочернийклассшире«» |
|
родительск.Т..в войства,котестьродительскомгорые |
|
|
инкапсулируютсявдочерний,такжевдочернийклассможнодобавить |
|
|
носвые.ойства |
|
|
Класс Object
Вязыке |
Java всеобънеобрявктынаымследуютсязоклассам |
Object. |
Этотклассявляетсяродительскимдляабсолютновсехкласс.Поэтомув в |
|
|
каждомклассеесть |
следующиеметод |
|
•public int hashCode()
•public boolean equals()
•public void wait()
•public void notify()
•public String toString()
Этотсписокнепол.П ознакомитьсядробнсовсееможнотодами
тут http://docs.oracle.com/javase/8/docs/api/index.html?java/lang/Object.html.
Подробнееразбетолькоизвсехемметодов.
16
hashCode() и equals()
Методequals() |
проверяетэквивалентнылидваобъекта.Вклассе |
Object |
данный методпроверяеттолькоодн |
– ссылаютсялиобеп ременныйна |
|
одинтотжеобъект. |
|
|
hashCode() – генерирует хэш-коддляобъекта.Дляабсолютноодинак вых |
||
двухобъектов |
хэш-коддолженсовпадать.Еслижехэш |
-кодыбъектов |
рав,этонзначитыечтообъект |
|
ыбудутравны.Эобъясняется |
коллизиейхэш |
-функций. |
|
Дваобъектав |
Java нельзясравниватьчерез«==»,.к.прииспользовании |
этогооператбудетпронаверяодинратотжеобъектсьсылаются объекилинет. ы
toString()
Метод toString() позволяет преобвстрразъект.Эбываетоватькучасто полезно.На,привывконсольмерможнодеуказатьпросто
System.out.println(user);
Метод toString() вызоветсяавтоматически.
Разумеетсякаждыйизэ ихрехметпереопределитьдовжновсвоем кла.Вссе гдалиэтонадодел?Зависитоттьконкретнойзадачи.В
некоторыхобязательнекоторых,в нет.И адогдабязательно переопре,нометодыдолжныучителятьневсеполя. вать
Переопределениеметодов
Принаследованииможнопереопределитьметодродительског |
окласса.При |
этомуметодовобязательнодолжнасовпсигн.датьура |
|
public class User() { |
|
public void printName() { |
|
System.out.println(“I’m user.”) |
|
} |
|
} |
|
17
public class Admin extends User { @Override
public void printName() { System.out.println(“I’m admin.”)
}
}
Длятого,чтобызапретитьпереопреметонужновоспользоватьсяделение ключесловомым final. public class User() {
public final void printName() { System.out.println(“I’m user.”)
}
}
Точнотакжеможзапретитьнаследованиеоткласса.
public final class User() { public void printName() {
System.out.println(“I’m user.”)
}
}
Абстрклассыктные
Чтсоабсбыздаклтрь,необходимоактныйссобъявитьегокак |
abstract. |
public abstract class User { |
|
} |
|
Нельзясоздэкземпатьбстрла.ярктногосса |
|
Такжеможносоздаабсметодрактныйь. |
|
public abstract String getName(); |
|
Такойметсоднеожетидолженржатьлабыть |
обязательно |
переопределенвдочернемклассе. |
|
18
Модификаторыдоступа
ВсеговJava |
сущчемодификатораствуеттыредоступа: |
|
||
• |
Областьвидимо |
стиограниченаклассом( |
private). |
|
• |
Областьвидимостинеограничена( |
public). |
•Областьвидимостиограниченапакетвсемидклассами
(protected).
• Областьвидимостиограниченапакетом |
(поумолчанию)Никакого. |
модификаторауказыватьненадо. |
|
Интерфейсы
ИнтерфейсывJava |
неявляютсяклассами.Онипредставляютсобой |
|
множесттребованийпредъявляемых, кклассу. |
|
|
public interface Comparable { |
|
|
int compareTo(Object other); |
|
|
} |
|
|
Интерфейсобъявляетсяпомощьюключесловаого |
|
interface исодержитв |
себесписо кметодов.Реализацииметодбытьнеможет.Такжевв |
|
|
интещеможнорфейсахразмещатькакие |
-либостатическиеконстанты. |
|
Реализацияинтерфейсаосуществляетсяследующимобразом: |
|
|
public class User implements Comparable { |
|
|
public int compareTo(Object other) { |
|
|
// … тутреализацияметода |
|
|
} |
|
|
} |
|
|
ВJava нетмноженас,ледованиятвенногоклассымогутреализовывать |
|
|
сколькоугодноинтерфейсов. |
|
|
Приобъявленииметодовинтерф,какправило, указываютсяейсе |
|
|
модификаторыдоступа,потомучто |
-умолчаниюявляются |
public. |
Дляреализацииинтерфейсанеобязательноявнымобрасоздаватьклассом.
Comparable c = new Comparable() {
19
public int compareTo(Object other) { |
|
// … тутреализацияметода |
|
} |
|
} |
|
Вданномслучае |
new Comparable(){…} называетанонимнымкла. сясом |
Enum
В Java,какивбольшинствеязыковпрограммирования,существует |
|
|
возмсозтипжностьдаперечислениенных« »Например. , |
|
|
public enum DAYS { |
|
|
sunday, monday, wednesday |
|
|
} |
|
|
Воспользоватьсякаким |
-либозначениемможноследующимобразом: |
|
DAYS d = DAYS.monday; |
|
|
Объектипа enum’a можносравниватьчерезоператор«==» |
. |
Collections
В Java большоеколичестворазныхколлекций:ма, пс,стеки,выски
очереди,наборы.Всеколлекциив Java реализуютинтерфейс java.util.Collection.Подробнеенемможнопрочитатьтут http://docs.oracle.com/javase/8/docs/api/index.html?java/util/Collection.html
Всеегореализацииимеютопредсп .Рассмотримленнуюцификусамые популярные:
•java.util.ArrayList – посвоейсутиобычныймассиввозможностью динамическименятьдлину.
•java.util.LinkedList – классп.ическийсок
Всенеобходимыеметодыопипоссылке,анырасполагающейсявыше.
Рассмотримпримериспользования LinkedList. List<Long> list = new LinkedList<Long>();
20