[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]

No.133706 Reply
File: Rzinb1LRm0OwlCI8s...
Jpg, 49.89 KB, 735×742
edit Find source with google Find source with iqdb
Rzinb1LRm0OwlCI8sv0Q.jpg
File: bad-java-logo-300...
Png, 38.72 KB, 300×300
edit Find source with google Find source with iqdb
bad-java-logo-300x300.png

Тред именно для изучения Java. Все вопросы о нужности и другое можно обсудить в >>/s/.

Будем изучать вместе, а кодеры 90 лвл (а сколько всего уровней у кодера?) показывать в чем мы не правы и наставлять на путь истинный.

И сразу с инструментов, необходимых для того чтобы начать
JDK - java development kit http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads[...].html
как установить переменную Path https://www.java.com/ru/download/help/path.xml пример значения переменной - C:\Program Files\Java\jdk1.7.0_71
Удобный редактор кода (можете выбрать любой другой, но примеры буду приводить на нем) https://www.jetbrains.com/idea/download/ - версия комьюнити.
После установки редактора выбираем новый проект и указываем нашу папку с jdk, как показано на картинке.
>> No.133711 Reply
File: mk6MBm2A30u991Zd78YGA.jpg
Jpg, 37.19 KB, 468×334 - Click the image to expand
edit Find source with google Find source with iqdb
mk6MBm2A30u991Zd78YGA.jpg
Когда я в первый раз начал читать литературу и мне выложили первую программу - "Привет, Доброчан!" я был в недоумении - что это за хуита такая, которую я не понимаю, что за сраный String[] args, где объяснения зачем это всё кроме слов о том что так надо?
Потому мы с вами начнем ознакомление иначе.

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

В наборе JDK есть более 100 различных классов, идущих "в комплекте", позволяющих нам использовать их функционал, но мы в любом случае будем писать собственные классы (но непременно также будем использовать и возможности базового набора)

И первое что мы сделаем - создадим собственный класс. Созадим новый проект, на src правой кнопкой и как показано на картинке.

Итак, если вы тоже назвали ваш класс "Hikka", то вы увидите следующий код

public class Hikka {
}

Вот так объявляются классы. Слово public означает, что этот класс открыт для взаимодействия с другими классами, слово class объявляет собственно наш класс, а Hikka - название нашего класса (серьезные пацаны говорят, что название классов принято писать с большой буквы).

Java различает регистр букв и потому помните, что class hikka и class Hikka - совершенно разные классы.
Ну а фигурные скобки {
} показывают блок кода. Код размещенный внутри них будет относиться к этому классу. И внутри них можно также размещать другие фигурные скобки.
Итак: мы создали новый класс, который пока ничего не делает. Попробуйте сами.
>> No.133715 Reply
Вся прелесть в том, что классы описывают не просто конкретного Васю, а некую сущность. Сейчас мы создали сущность Hikkа, от которой будут порождаться конкретные экземпляры конкретных хикк - Васи, Валеры, Антона.
Не понятно? Скоро поймете.

Каждая программа работает с данными. И соответственно нужны способы во-первых хранить эти данные, а во-вторых производить с ними манипуляции.
Для хранения данных используются переменные. Разберем это подробнее.


В Java в переменных могут храниться либо непосредственно значения, либо ссылка на ячейку памяти, где хранится наш объект.
К первому типу относятся грубо говоря цифры и буквы (но не строки букв!)

Чтобы создать переменную мы пишем типПеременной имяПеременной.
Соответственно нам нужно знать имена этих типов. Начнем с цифр. Они делятся на целые и дробные (вещественные).
Целые:
тип byte - примечателен тем, что занимает в памяти всего байт. Диапозон значений в силу скудных ресурсов от -128 до 127
short - 2 байта, значения от -32 768 до 32 767
int - 4 байта - наиболее частый, в некотором смысле тип по умолчанию - значения от -2 147 483 648 до 2 147 483 647
long - 8 байт - диапозон значений - дохуя.
char - 4 байта. По странной для обычного человека логике буквы также можно выразить в виде числа. Но на кой черт оно нам надо? Тем более сейчас.

И два вещественных типа
float - 4 байта
double - 8 байтов

Итак, каждый хикка обязательно обладает каким-нибудь возрастом. И этот возраст целый и явно не может быть больше 128 лет. Так что создадим в нашем классе хикка переменную age. Посмотрите как это происходит.
public class hikka {
byte age;
}
Обратите внимание, что каждая операция должна заканчиваться точкой с запятой. Попробуйте.
>> No.133717 Reply
Казалось бы - мы сейчас создали переменную с именем age типа byte. Но не только это. Мы создали переменную класса хикка. Буквально мы говорим: каждый хикка обладает каким-то возрастом. И у каждого конкретного хикки будет конечно разное значение возраста.
Но у хикки есть еще и имя. Его уже нельзя выразить числом и в этом нам поможет ссылочный тип String (именно так, с большой буквы. Это на самом деле сложный тип, он состоит из набора упорядоченных букв, потому переменная и содержит только ссылку на ячейку памяти с этим набором. Но для нас такие тонкости сейчас несущественны) Вот как теперь выглядит наш класс.
public class hikka {
byte age;
String name;
}
Но вероятно мы все-таки хотим, чтобы наш хикка обладал неким возрастом и именем по умолчанию. Как известно анону раньше было 20 лет и он бородат. Как это сделать? Я думаю вы все поймете по примеру.
public class hikka {
byte age = 20;
String name = "Анонимус";
}
Как вы видите присваивать значения можно оператором =, при этом цифры можно вводить прямо так, а строки выделяются "" вот такими кавычками. Стоит ли говорить, что значение должно соответствовать типу переменной?
>> No.133719 Reply
File: B6PD1mc2tE2NsmtMFuYmQ.jpg
Jpg, 42.61 KB, 410×603 - Click the image to expand
edit Find source with google Find source with iqdb
B6PD1mc2tE2NsmtMFuYmQ.jpg
Ну, что касается полей класса мы немного разобрались. Но как это все заставить взаимодействовать?
Этому служат методы класса. Для того чтобы с этого класса могла запускаться программа он должен иметь метод, называющийся main, который имеет некоторые обязательные параметры.
Выглядит он так
public static void main(String[] args) {
}
public - модификатор доступа. Собственно версия public означает, что к этому методу можно получить доступ отовсюду.
static - означает, что этот метод принадлежит не каждому экземпляру, а классу в целом и не принадлежит его экземплярам (статическими могут быть также и переменные).
void - означает, что метод не возвращает значения. В ином случае здесь бы стоял тип возвращаемого значения. Например int, String и другие
main(String[] args) - аргс имя переменной, которая выступает в качестве параметра метода. Это имя может быть любым. String[] - тип переменной, представляющий собой массив из строк (квадратные скобки к любому типу создают массив переменных этого типа).
Наш класс теперь выглядит вот так
public class hikka {
byte age = 20;
String name = "Анонимус";
public static void main(String[] args) {
 }
}
Фигурные скобки выделяют блок кода, относящийся к этому методу. Код, написанный внутри них выполняется при запуске программы.
Теперь, если вы выше нажмете правой кнопкой на вкладке класса, то у вас появится опция запуска программы (см. картинку). Но поскольку сейчас метод пуст мы ничего не увидим.
Нам надо все-таки вывести на экран наше приветствие. Помните я говорил, что у нас имеется набор поставки из кучи классов в комплекте? Их возможности сейчас и будем использовать.
Вот так выглядит строчка, выводящая на экран содержимое в скобках
System.out.println(); или
System.out.print();
Строго говоря мы используем один из методов класса, хранящегося в переменной out класса System. Набирая эту строчку вы сможете заметить, что редактор будет предлагать на выбор множество других переменных и методов.
Разница между указанными двумя в том, что метод println() добавляет символ новой строки в конец и при следующем использовании метода вывода содержимое выведется на новой строчки. А print() будет выводить друг за другом.
Мы уже знаем как вводить строки - вот такая будет первая команда.
public class hikka {
byte age = 20;
String name = "Анонимус";
public static void main(String[] args) {
    System.out.println("Hello, Dobrochan!");
 }
}
Попробуйте. И запустите чтоб проверить.
Заодно голосуйте и пишите в личку - нужно ли продолжать.
>> No.133738 Reply
File: fate_zero___saber_by_sleii_no_baka-d53ox8u.png
Png, 884.81 KB, 980×597 - Click the image to expand
edit Find source with google Find source with iqdb
fate_zero___saber_by_sleii_no_baka-d53ox8u.png
>>133711
Вопросы (в качестве ответа хотелось бы видеть краткий ответ и подкрепляющую ссылку на stackoverflow.
1) Могу ли я назвать класс hikka?
2*) Могу ли я вообще не называть класс? И опиши ситуацию в которой мне может понадобиться анонимный класс.
>>133715
Java строго типизированный язык.
3) Есть ли у типов иерархия? Казалось бы тип float "расширяет" целые числа, поэтому когда мне захочется заиметь тип комплексных чисел, то не хотелось бы сложение писать заново. Есть ли класс для типов и зачем он может понадобиться? Hint: как перевести int во float и наоборот?
4) Статический язык позволяет отлавливать ошибки до компиляции программы. Что такое компиляция? Где лежат бинарные файлы? Что такое java-машина? Что такой compile-time error и runtime-error?
>>133717
5) Что такое mutable\immutable тип? Есть ли языки, где все типа immutable? А где все переменные лишь ссылки на ячейку, то есть никогда не происходит копирования? В чем профит?
6) Использовать byte для возраста, возможно, не лучшая идея. Плюс в том, что ты знаешь, что не бывает хикк с возрастом с вселенную, минус же в том, что возраст возможно нужен для расчетов, например, он участвует в формуле расчетов ипотечного кредита для хиккана. Как происходит арифметика для переменных разных типов?
7) Стоит ли age и name делать private, public, protected И что это значит? Что такое паттерн getter и setter И зачем он нужен?
8) Нахуй вообще весь код организовывать в Namespace и функции привязывать к классам?
>> No.133739 Reply
File: fate_zero___saber___by_kujiki_senpai-d4ytwmj.jpg
Jpg, 100.69 KB, 900×783 - Click the image to expand
edit Find source with google Find source with iqdb
fate_zero___saber___by_kujiki_senpai-d4ytwmj.jpg
>>133738
Алсо классы - это збс. И пишешь четко. Есть пожелание: хотелось бы поскорей увидеть for/if выражения. Желательно с приложенным кодом решения вот этой задачи:
https://projecteuler.net/problem=1
>> No.133740 Reply
>>133738
1. Да. Просто говорят что классы Принято называть с заглавной буквы, по соглашению программистов Code Conventions for the Java Programming language. Таким образом в твоем коде будет легче разобраться другим людям. Ознакомиться с ним можно здесь http://www.oracle.com/technetwork/java/javase/documentation/codeconvto[...].html
2. Нет, не можешь, каждый класс должен иметь имя.
3. Все в яве это классы. Потому нет никакого класса типов, каждый тип это класс. У рассмотренных типов нет иерархии в том контексте в котором ты спрашиваешь. (На самом деле все они как и любой класс наследуются от класса Object) О наследовании мы поговорим когда будем создавать объекты. Типа комплексных чисел в Java нет, но у меня тут в книжке указан пример класса комплексных чисел. Если понадобится - покажу.
Вот так например так объявлен класс String
public final class String extends Object
implements Serializable, Comparable<String>, CharSequence
final (запрет наследования) и implements (интерфейсы) разберем позднее.

Чтобы перевести int в float нужно сделать приведение типа.
Пишется это так, например.
int count = 1;
float delCount = (float) count;
4. Компиляция - перевод из написанного на понятном человеку коде языке в машинные коды. Но в java есть промежуточный этап - байт-коды, благодаря которым достигается мультиплатформенность (и лагучесть) java программ. Суть в том, что код переводится сначала в байт коды, понятные java-машине а уже она занимается в реальном времени на каждом компьютере переводом в машинный код.
При компиляции в java создаются файлы с расширением .class под каждый класс, написанный в нашей программе. В последующим можно набрать в консоли java имяКласса (с методом main) для его исполнения.
5.
> mutable\immutable тип?
Не понимаю. Есть ли в языки только со ссылочными типами - не знаю, думаю нет. Такой тип понадобился в виду того, что объекты стали слишком объемными, чтобы хранить их значение в переменной. Потому хранится только ссылка на него. Это имеет свои последствия, например при сравнении объектов сравниваются адреса ссылок. В таком случае одинаковые по содержанию строчки "Привет, доброчан!", но хранящиеся в разном месте будут иметь разные ссылки и соответственно считаться разными. Для решение этой проблемы в начальном по иерархии классе Object от которого наследуются все классы описан метод equals() который соответственно присутствует в каждом классе.
6.
При арифметики разных типов происходит приведение типов (которое я упомянул). Нет никаких проблем в том чтобы расширить byte до int явным образом, указав перед ним в скобках (int) как я показал.
Однако такое действие происходит автоматически при арифметике. C расширением типов проблем не возникает.
То есть мы можем написать так
int credit = age * 200;
и это не вызовет ошибки.
7. Это зависит от того, как наши классы будут взаимодействовать. Сейчас мы не придумали никакого механизма и не знаем, понадобится ли к ним доступ из другого класса.
Ты назвал модификаторы доступа
public - переменная класса видна отовсюду и обращаться к ней можно отовсюду.
отсутствие модификатора - виден в рамках пакета. При отсутствии указания пакета (как в классе хикка) классы хранятся в безымянном пакете
protected - виден этому классу и классам-наследникам
private - виден только этому классу

Тут мы и подходим к необходимости методов getter и setter.
Итак, в нашем классе хикка есть поле age. Но поскольку возраст просто так не изменяется мы не хотим, чтобы другие классы могли делать с ним что угодно, но хотим чтобы они знали наш возраст
поэтому мы прячем переменную age под модификатор private и создаем метод, возвращающий возраст нашего хикки.
Этот метод у нас будет public и он будет возвращать значение byte
Назовем его, опять же по соглашению с приставкой get и заглавной буквой
public byte getAge() {
}
Для возврата значения используется команда return значение.
Наш класс теперь выглядит так:
public class Hikka {
byte age = 20;
String name = "Анонимус";
public static void main(String[] args) {
    System.out.println("Hello, Dobrochan!");
}
public byte getAge() {
    return age;
}
}
Чего мы добились этим методом? Всякий иной класс сможет узнать значение нашего возраста через метод getAge(), но не сможет его изменить. Для изменения же мы можем setAge, где не просто присваивать значение переменный, а проводить проверку, скажем на то, чтобы наш хикка не был старше 100 лет.
8. Это парадигма объективно-ориентированного программирования. ruwiki://Объектно-ориентированное_программирование
>> No.133741 Reply
По запросу >>133739 немного отвлечемся от классов и объектов и изучим такие полезные инструменты как условия и циклы. Код будем писать в нашем методе public static void main(String[] args) { }

Любой нормальный организм не просто прет напролом, а действует в зависимости от ситуации. Потому нам необходимы механизмы, позволяющее задавать разное поведения в зависимости от того что происходит.
Давайте попробуем сделать так, чтобы школьники-хикки уходили с доброчана, а остальные остались.

Операция if (условие) работает с логическим типом данных.
Это еще один тип - тип boolean - который может принимать только два значения - false и true;
Стоит ли говорить, что переменные этого типа создаются уже известным нам способом boolean Имя переменной?
Но даже если мы не будем создавать конкретную переменную, само по себе выражение может иметь логический тип.
например:
(Возраст < (меньше) 18)
Если возраст будет 20 - то значение выражение ложно, если 16 то значение выражения истинно.
Итак, давайте попробуем.

Но тут мы столкнемся с проблемой - мы не сможем использовать поле age нашего хикки. А все потому, что еще ни одного хикки у нас не создано. С этим мы столкнемся позднее, а пока давайте создадим еще одну переменную имение age в нашем методе main. Она будет существовать только в рамках этого метода. И да, вы не ослышались, она может иметь такое же имя, как и поле. И, если мы не укажем обратного, то программа будет считать что мы работает с переменной этого метода, а не класса.
byte age;
age = 14;
Укажем сразу возраст. Теперь мы подошли сразу к условию. Для описания условия используется следующая схема if (условие) {
}
else {
}
Если наш код состоит только из одной операции, то фигурные скобки, означающие блок кода можно не писать. Если нам не нужен else, то его также можно не писать.
Итак, наше условие будет выглядеть так
if (age < 18)
System.out.prinln("Пока, Доброчан");
else
System.out.println("Привет, Доброчан");

Меняйте значение переменной age и смотрите, что программа будет выводить на экран.
Есть следующие способы сравнения
< - меньше
> - больше
== - равно
> = - больше или равно
<= - меньше или равно
Внимание! Напоминаю, что переменные String ссылочного типа - их следует сравнивать не через равенство, а через метод equals()
Дальше наш ждут циклы.
>> No.133742 Reply
File: sample_6cba716c88b05e8ad5b2adc646e17eb4.jpg
Jpg, 389.46 KB, 850×810 - Click the image to expand
edit Find source with google Find source with iqdb
sample_6cba716c88b05e8ad5b2adc646e17eb4.jpg
Стену текста не читал, но по опыту обучения других людей старшекласников средней адекватности джаве выявились проблемы.
1.Люди очень долго въезжают в отличия класса от экземпляра класса, статических и обычных полей класса у меня есть и знакомый быдлокодер который это не до конца понимал программируя нa c# за деньги. Даже после многочисленных примеров, которые они сами писали и запускали.
2.Проблемы с инициированнием объектов. Очень важно понимать что новые объекты появляются только после явнго или спрятанного в какую-то библиотеку вызова оператора new. До этого с ними ничего нельзя делать.

Разберитесь с этими моментами при обучении.
>> No.133745 Reply
>>133742
Спасибо, учту и обращу на это внимание.
>>133741
Умножение это звездочка. Здесь отобразилось неверно после того как запостил.
>> No.133748 Reply
Для выполнение многократных операций используются циклы.
Циклы также выполняются проверяя условие-логическое выражение. Общая запись цикла
while (условие) {
}
В фигурных скобках как обычно блок кода, который выполняется в рамках этого цикла. Если мы напишем while (true), то цикл уйдет в бесконечное исполнение и программа зависнет. Значит нам нужно делать условие, предусматривающее выход из цикла.
Для выхода из цикла предусмотрена команда
break;
Давайте для начала выведем на экран цифры от 1 до 10.
Создадим переменную
byte i = 1;
Напишем цикл
while (i <= 10) {
}
добавим в цикл вывод переменной на экран и увлечение переменной на единицу (для этого есть сокращенная команда ++, а для уменьшения --)
Получится такой код.
byte i = 1;
while (i <= 10) {
System.out.println(i);
i++;
}
Попробуйте, потом продолжите чтение.
Одна из модификаций этого цикла - цикл for. Он позволяет сократить запись, объединив в одну строчку как объявление переменной, так и ее изменение
Предыдущий цикл эквивалентен следующей записи
   for (int i = 1; i <= 10 ; i++) {
        System.out.println(i);
    }
Как вы видите он состоит из 3 частей, разделенных точкой с запятой.
Переменная ; условие ; изменение переменной. При компиляции цикл for превращается в тот же цикл while.

Итак, нам с вами поставлена задача. Есть набор последовательных цифр ( 1 до 10 или от 1 до 1000 - неважно). Нам нужно найти из них сумму тех чисел, которые кратны 3 и 5.
Понятно, что мы будем использовать циклы и условия. Но как найти кратность 3 и 5?
В нашем распоряжении есть следующие арифметические операции
+ - сложение
- - вычитание
/ - деление
  • - умножение
% - деление по модулю (грубо говоря эта операция дает остаток от деления)

Итак % - то что нам нужно. Ведь если число делится нацело на 3 и 5 то остаток равен нулю, верно? Вот и будет наше условие. Попробуйте написать цикл сами, прежде чем смотреть дальше решение

Вот как вышло для чисел от 1 до 10
int summ = 0;
    for (int i = 0; i < 10 ; i++) {
        if (i%3 == 0)
            summ+= i;
        if (i%5 == 0)
            summ+= i;
    }
    System.out.println(summ);
%%Запись summ+= i эквивалентна записи summ = summ + i;
Таким образом со знаком присваивания можно комбинировать любую арифметическую операцию.%%
Хоть и выведет правильный, но в этом алгоритме содержится ошибка. Ведь число 15 делится как на 3, так и на 5, а значит при переборе до 1000 будет сложено два раза.
Избежать этого мы можем либо включив второе if в блок else
else if (i%5 == 0)
Либо объединив в одном условии две ситуации.
Как же нам соединить два условия в одно?
В java есть 4 логические операции
! - отрицание (NOT)
&& - конънкция (AND)
|| - дизъюнкция (OR)
^ - исключающее ИЛИ (XOR)

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

Отрицание меняет значение истинности.
Конъюнкция истинна, только если оба операнда истинны
Дизъюнкция ложна, только если оба операнда ложны
Исключающее ИЛИ истинно , только если значения операндов различны.
Таким образом мы можем записать
if (i%3 || i%5)
И это более лучший вариант, потому как его вычисление потребляет меньше ресурсов чем цепь else if.

Итоговое решение задачки, предложенной >>133739 выглядит так
   int summ = 0;
    for (int i = 1; i <= 1000 ; i++) {
        if (i%3 == 0 || i%5 == 0)
            summ+= i;
    }
   System.out.println(summ);
>> No.133750 Reply
Домашнее задание.
Возьмите набор чисел от 1 до 200.
Посчитайте (используя один цикл) и выведете на экран сумму всех четных чисел и сумму всех нечетных чисел.
>> No.133755 Reply
>>133748
Поправка. Раз в условии below (что я пропустил), то мы конечно пишем i < 1000, а не меньше или равно.
>> No.133758 Reply
File: jihadi-john_3051871b.jpg
Jpg, 32.96 KB, 620×387 - Click the image to expand
edit Find source with google Find source with iqdb
jihadi-john_3051871b.jpg
Спасибо за тред! Кодеры 90 лвл, не забрасывайте только.
>> No.133762 Reply
File: Безымянный.png
Png, 7.25 KB, 430×289 - Click the image to expand
edit Find source with google Find source with iqdb
Безымянный.png
>>133750
Так?

Учил Джаву всего год назад, уже всё забыл.
>> No.133763 Reply
File: MAIN-Jihadi-John.jpg
Jpg, 102.22 KB, 2197×1463 - Click the image to expand
edit Find source with google Find source with iqdb
MAIN-Jihadi-John.jpg
>> No.133764 Reply
File: jihadi-john_3051871b.jpg
Jpg, 32.96 KB, 620×387 - Click the image to expand
edit Find source with google Find source with iqdb
jihadi-john_3051871b.jpg
>>133762
после if (i%2==0) не нужно писать "int суммачетных = 0".
И после того, как ты объявил переменную "cуммачетных" типа int, дальше перед этой переменной не нужно указывать ее тип.
>> No.133766 Reply
>>133762 Анон >>133764 всё говорит правильно. Тип переменной используется для ее объявления. Повторное объявление переменной в цикле с таким же именем вызовет ошибку (поскольку в методе уже есть одна такая).
Также, присваивая ей значение 0 ты фактически обнуляешь эту переменную каждое прохождение цикла.

Пояснения по коду: Переменные действительно могут называться буквами национальных алфавитов (в данном случае на русском), единственное ограничение - они не могут начинаться с цифры. И лучше не использовать знак доллара - компилятор его использует для своих целей.
Массив также можно объявлять через квадратные скобки в имени переменной.
Записи String[] args и String args[] равнозначны.
>>133763
Все верно. Единственное пояснение - пакет java.lang импортируется по умолчанию. Классы остальных пакетов ты не используешь.


>>133764
>> No.133768 Reply
File: jihadi-john_3051871b.jpg
Jpg, 32.96 KB, 620×387 - Click the image to expand
edit Find source with google Find source with iqdb
jihadi-john_3051871b.jpg
>>133766
Анон, как ты учил джаву? Книги, курсы, универ?
>> No.133770 Reply
>>133768
В моем университете не было программирования (я юрист). Java для меня очень похожа на ActionScript 3 (adobe flash), который я изучал по книге Колина Мука (хорошая книга).
Сейчас начал изучать Java (для этого и тред), сначала было 10 уровней на javarush (но они просят 30 долларов за месяц, а по такому курсу доллара не хочу я эти доллары покупать), сейчас я продолжаю по купленной толстой (750 страниц) книге. Там объясняется достаточно много тонкостей, мне она нравится. И я ее выбрал потому что там два раздела посвящено выводу данных на экран.

Написана она несколько сложно, потому по мере изучения (хотя эти уроки еще не дошли до места где я остановился) пробую рассказывать материал простым языком, не перегружая излишне.
>> No.133772 Reply
>>133770
Понял, мы с тобой вчера переписывались. Как книга называется?
>> No.133773 Reply
File: 20141212_144936.jpg
Jpg, 1447.67 KB, 2322×4128 - Click the image to expand
edit Find source with google Find source with iqdb
20141212_144936.jpg
>>133772
Да, мы перетекли из лектория.
Книга выглядит вот так. На самом деле взял я ее более-менее наобум, так что не спешу всем рекомендовать.
>> No.133843 Reply
Но вернемся к нашим классам и объектам. Я еще введу базовые инструменты по мере надобности, но вы уже знаете достаточно много.

Итак внимательный слушатель заметил, что мы не можем использовать переменные age и name класса хикка.
Действительно, у нас ведь еще не существует ни одного хикки. Как же его создать?

Для лучшей наглядности давайте создадим класс Доброчан (отдельным файлом) и создадим там метод main
> Hint: в нашем редакторе можно быстро его набрать используя сокращение psvm - public static void main
Вопрос: два метода мейн? так можно?
Ответ: да. И их часто делают чтобы отлаживать класс. При нескольких методах мейн входить в программу можно разными способами. Это как несколько отверстий у тян.

Экземпляр класса создается через оператор New типКласса()
Hikka h1 = new Hikka();
Hikka h2 = new Hikka();
Обратите внимание, что типы переменных h1 и h2 - Hikka - действительно, ведь наш хикка это полноправный java класс!
Обращаться к переменным и методам класса возможно через точку. Помните как мы записываем System.out.prinln()?
Давайте дадим хиккам имена.
h1.name = "Валера";
h2.name = "Антон";

Задание: выведете на экран возраст и имена любого хикки.
> Hint: в нашем редакторе можно быстро набрать команду вывода используя сокращение sout
Но вот беда. Мы не можем изменить возраст нашего хикки, а ведь всего-то хотели установить его один раз, при создании. Что же теперь делать его ради этого public?

Для выяснения этого вопроса нам надо рассмотреть методы класса и методы конструкторы.
Метод (функция) это такая хуита, которая имеет название, как переменная, но в отличие от нее делает блок полезного кода. Думаю определение достаточно академическое. Общая запись метода выглядит так
типВозвращаемогоЗначения/void имяМетода ( ) {
}
Вот так выглядел наш метод getAge
byte getAge() {
}
Остальные параметры не обязательные. Один из таких необязательных параметров это модификатор доступа. Мы с ним знакомились в предыдущих сеансах.
Чтобы тот метод могли видеть все классы мы поставили public
Отсутствие модификатора доступа тоже модификатор доступа! Это видимость на уровне пакета.
И, если поля отвечают на вопросы - что он имеет. То методы на вопрос "что он может делать?"
А что может наш хикка? Запускать космические корабли? Конечно же нет! Он может двачевать капчу!

Давайте создадим теперь наш метод.
public void двачевать() {
System.out.prinln("Доброчан, есть одна тян");
}
Теперь вызовем его из класса доброчан.
h1.двачевать();
Но это довольно скучно. А вот куда интересней - это аргументы метода. В наших скобках мы можем записать переменные, которые будут аргументами этого метода. Вот самая простая демонстрация этой вещи
public void двачевать(String message) {
System.out.prinln(message);
}
Мы записываем в скобках аргументы и далее можем использовать их так, будто бы они переменные.
Сответственно мы должны в этот метод при его вызове "вложить" соответствующие переменные в соответствующем порядке.
Вот так
h1.двачевать("Есть одна тян");
А вот еще пример - метод, возвращающий квадрат.
int квадрат(int num) {
return int * int;
}

Домашнее задание: напишите метод, высчитывающий и возвращающей факториал числа, указанного в качестве аргумента. Выведете на экран факториал 10.


Password:

[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]