hubert
41 уровень

Уровень 23: план уровня и доп. материалы

Пост из группы Архив info.javarush.ru
3681 участников
План уровня:
  • final и другие ключевые слова java
  • Внутренние классы
  • Внутренние статические классы
  • Внутренние анонимные класса, примеры

Курс Java Что еще можно посмотреть на досуге: Ответы на вопросы к собеседованию по теме уровня. Всё про final читаем в 7 главе Философии Java Внутренние классы подробно описаны в 10 главе Философии Java http://www.ibm.com/developerworks/ru/library/j-jtp1029/ http://www.quizful.net/post/inner-classes-java http://easy-code.ru/lesson/java-nested-classes
Нашли классную ссылку к материалу данной темы? Добавьте ее сюда в виде комментария. Возможно, именно Ваша ссылка поможет другому человеку стать программистом и улучшить свою жизнь!

Вернуться к плану обучения
Вернуться к обучению
java онлайн
на JavaRush
Комментарии (33)
  • популярные
  • новые
  • старые
Для того, что бы оставить комментарий вы должны авторизироваться
Nicson777 27 уровень
21 сентября 2016, 14:23
Достаточно наглядно: TreeMap vs HashMap
www.youtube.com/watch?v=85a-sHg5otU
Nicson777 27 уровень
21 сентября 2016, 13:37
Что подразумевается под «учиться гуглить»?
Немного поставил в тупик вопрос про «отправка email из java программы».
Нашёл документацию об этом, но чтобы протестировать это, нужно разобраться с библиотекой javax…
Или суть в том, чтобы научится находить нужный ответ в google в необходимой ситуации?
Если кто смог отправить email таким образом, отпишитесь)
imp 31 уровень, Москва
17 октября 2016, 12:36
javax это явно не самый простой способ отправки
самый простой имхо через сокеты ( то есть общение напрямую с смтп сервером )

public class MailTest {
static PrintStream ps = null; // посылка сообщений
static DataInputStream dis = null; // получение сообщений
public static void send(String str) throws IOException
{
ps.println(str); // посылка строки на SMTP
ps.flush(); // очистка буфера
System.out.println(«Java sent: » + str);
}
public static void receive() throws IOException
{
String readstr = dis.readLine(); // получение ответа от SMTP
System.out.println(«SMTP respons: » + readstr);
}
public static void main (String args[]) throws IOException, InterruptedException {
String HELO = «HELO gazprom.ru»;
String MAIL_FROM = «MAIL FROM: user@gazprom.ru »;
String RCPT_TO = «RCPT TO: pikselnsk@yandex.ru »;
String DATA = «DATA»; // начало сообщения
String FROM = «from: user@gazprom.ru»;
String SUBJECT = «subject: tema »;
String BODY = «Hello my friend! Java sent this!»;
String END = ".";
Socket smtp = null; // сокет SMTP
try { // заметка: 25 — это стандартный номер порта SMTP
smtp = new Socket(«mx.yandex.ru», 25);
OutputStream os = smtp.getOutputStream();
ps = new PrintStream(os);
InputStream is = smtp.getInputStream();
dis = new DataInputStream(is);
}
catch (IOException e)
{
System.out.println(«Error connection: » + e);
}
try { // скажем SMTP helo
receive(); // получение ответа SMTP
send(HELO);
receive(); // получение ответа SMTP
send(MAIL_FROM); // посылка на SMTP
receive(); // получение ответа SMTP
send(RCPT_TO); // посылка адресату SMTP
receive();
send(DATA); // начинается посылка на SMTP
receive(); // получение ответа SMTP
send(FROM);
send(SUBJECT);
send(BODY); // по
misha_skafenko 41 уровень, Винница
10 сентября 2016, 19:15
оставлю здесь может мой пример поможет кому-то с дженериками и?

public class Test<T> {
    private T t;

    public Test(T t) {
        this.t = t;
    }

    public void printAnotherAnyClass(Test<?> instanse) {
        System.out.println(instanse.t);
    }

    public void printJustThisClass(Test<T> instanse) {
        System.out.println(instanse.t);
    }

    public void printJustObject(Test<Object> instanse) {
        System.out.println(instanse.t);
    }



    public static void main(String[] args) {
        Test<String> stringTest = new Test<>("string");
        Test<Integer> integerTest = new Test<>(1);
        Test<Object> objectTest = new Test<>(new Object());

        stringTest.printJustThisClass(stringTest);
//        stringTest.printJustThisClass(integerTest);            //wrong
//        stringTest.printJustThisClass(objectTest);       //wrong

        stringTest.printJustObject(objectTest);
//        stringTest.printJustObject(stringTest);                   //wrong
//        stringTest.printJustObject(integerTest);               //wrong

        stringTest.printAnotherAnyClass(integerTest);
        stringTest.printAnotherAnyClass(stringTest);
        stringTest.printAnotherAnyClass(objectTest);


    }
}
DmitrySD 26 уровень
19 июля 2016, 23:03
присоединяюсь к вопросу nanoezhik про ArrayList<?>… ничего толкового не нагуглил.
как использовать не понял… при попытке написать что то типа:
ArrayList<?> dro =new ArrayList<>();
dro.add("String_Value");


IDEA ругается:
ошибка!!!
remain4life 41 уровень
29 апреля 2016, 13:25
Народ, немного не разберусь в терминологии, у Эккеля написано, что
… Определение класса может размещаться внутри определения другого класса. Такие классы называются внутренними (inner class)…
… Если связь между объектом внутреннего класса и объектом внешнего класса не нужна, можно сделать внутренний класс статическим (объявить его как static). Часто такой класс называют вложенным (nested)...


Однако в рекомендованной статье www.quizful.net/post/inner-classes-java пишется, что
… вложенный класс — это класс, который объявлен внутри объявления другого класса…
… Вложенные классы делятся на статические (в примере выше StaticNestedClass — это именно он) и нестатические (non-static). Собственно нестатические вложенные классы имеют и другое название — внутренние классы (inner classes). Внешний класс (outer class) мы иногда будем называть еще обрамляющим классом…

Также лекция 3 почему-то называется "Вложенные классы", хотя там присутствует только определение "внутренний".

Просьба знающих разъяснить как классы правильно называть.
Joysi 41 уровень
29 апреля 2016, 13:42
Как я думаю, тут добавляются проблемы перевода. Идем к первоисточнику (Oracle документация):
docs.oracle.com/javase/tutorial/java/javaOO/nested.html

Определение nested(вложенного) класса.
The Java programming language allows you to define a class within another class. Such a class is called a nested class

Terminology: Nested classes are divided into two categories: static and non-static. Nested classes that are declared static are called static nested classes. Non-static nested classes are called inner classes
То есть вложенные бывают статические и не-статические, не-статические вложенные также называют внутренними(inner).

+ в догонку…
There are two special kinds of inner classes: local classes and anonymous classes.
Joysi 41 уровень
29 апреля 2016, 13:44
Если есть время — очень хорошо описано тут — pr0java.blogspot.ru/2015/08/1.html
remain4life 41 уровень
29 апреля 2016, 14:59
Спасибо, кажется, что ключевой всё же стала фраза: "… Программисты, пишущие на Java, не пришли к единому мнению по поводу именования различных типов внутренних классов. Поэтому вы можете обнаружить, что в разных ситуациях их называют по-разному..." :)
lexel 39 уровень, Passau
19 марта 2016, 16:12
Не хватает закрывающей фигурной скобки
lexel 39 уровень, Passau
14 марта 2016, 08:47
Ошибка в коде
Должно быть
public Car () со скобками
class Door без скобок
nanoezhik 41 уровень
20 ноября 2014, 10:44
Вопрос по разделу «Учимся гуглить»:
Для чего "?" в коде ArrayList<?>. Я так и не нагуглил… может кто подскажет ответ?
INSIDIUS 41 уровень
21 ноября 2014, 21:18
Загугли generics java
wildfish 24 уровень
15 декабря 2014, 15:56
shcho_isle 11 уровень, Киев
6 августа 2015, 12:08
Как я понял, суть в том, что
List<object>
не покроет все списки. Например, если нам нужно передать в метод такой параметр:
List<все что угодно>
— то
List<object>
для этого не подойдет.

Для этого и нужен
List<?>
Willstealer 29 уровень
11 ноября 2015, 05:47
как я понял? это что то типа родителя всех типов
хотя совсем не уверен
Amado 23 уровень, Владивосток
17 февраля 2017, 21:46
Хороший ответ про ArrayList<?>:
The is a wildcard character for a generic type. Normally you declare an array list like:

ArrayList<String>
Where the type is specified exactly. The list will contain Strings. But sometimes you want to make a method or a class that takes an ArrayList of any type, or you want a field that points an ArrayList of any type

public void removeFirstItem(ArrayList<?> target) {
...
}
Now this method can take an ArrayList<String>, or an ArrayList<Long>, etc, and do some operation on it.

Similiary you can have a local variable:

ArrayList<?> someList;
someList = new ArrayList<String>();
someList = new ArrayList<Long>);
This works, whereas:

ArrayList<String> someList = new ArrayList<String>();
someList = new ArrayList<Long>();
Will not, since someList is specified as an ArrayList<String>, so only ArrayList<String> can be assigned to it.
new-Object 30 уровень
4 ноября 2014, 17:05
Когда добавится материал как на лекциях 1-21? Через основной курс очень не удобно смотреть.
MindIbniM 41 уровень
29 сентября 2014, 12:49
Очень понравилось у Хорстманна на тему анонимных классов: «Идея ввести в язык безымянные внутренние классы оказалась удачной, или это только великолепное средство создавать никому не понятные программы?»
Byshevsky 16 уровень
8 марта 2016, 22:56
Согласен с Хорстманом ))
Не ну реально этот идиотизм с внутренними классами только для того чтобы писать никому не понятные программы. Вот в лекционном примере, на кой хрен вводить класс Дор, а не написать поле дор к классу Кар?
Чем этот код
public class Car
{
 int height = 160;
 ArrayList<Door> doors = new ArrayList<Door>();

 public Car
 {
  doors.add(new Door());
  doors.add(new Door());
  doors.add(new Door());
  doors.add(new Door());
 }

class Door()
 {
  public int getDoorHeight()
  {
   return (int)(height * 0.80);
  }
 }
}


лучше этого:
public class Car
{
    int height = 160;
    ArrayList<Double> doors = new ArrayList<Double>();

    public Car()
    {
        doors.add(height*0.8);
        doors.add(height*0.8);
        doors.add(height*0.8);
        doors.add(height*0.8);
    }
}


кроме лишних строчек кода, и лишних минут того кто будет разбираться с этой писаниной?
ab_random 31 уровень, Санкт-Петербург
9 марта 2016, 00:33
Тем, например, что ваши двери имеют только высоту, в лекционном же примере, без особых изменений в остальном коде, им можно задать дополнительно ширину, цвет, материал и еще кучу других полезных фишек.
Кроме того, если хотите более реальный пример, на внутренних классах LinkedList реализован.