• Getter,setter для чего нужны?

    @ColdSpirit
    Мне кажется, что возможность изменять параметры напрямую - это потенциальная ошибка в коде (кто-то может неправильно их использовать), также методы гет и сет выглядят более лаконично, например из-за того, что вы даете другому программисту информацию о том, что можно сделать с данным классом, а не сухую переменную.
    Также методы гет и сет можно модифицировать таким образом, чтобы они проверяли или изменяли входящие и выходящие данные как нужно, как примитивный пример - метод гетНейм, который берет строку ФИО и извлекает имя, без этого метода программисту-пользователю делать надстройки над классом для извлечения имени.
    Ответ написан
    Комментировать
  • Getter,setter для чего нужны?

    @dmitryKovalskiy
    программист средней руки
    Первый принцип ООП - инкапсуляция. Контроль доступа к полям и методам класса. Как вы их реализуете - ваше дело, но нужно сделать так чтобы было понятно назначение метода
    Ответ написан
    9 комментариев
  • Какая разница между этими способами ввода?

    EugeneP2
    @EugeneP2
    Java Dev
    Вместе с JDK можно скачать и исходный код стандартных библиотек джавы. В любой IDE, зажав CTRL и кликнув по имени того, или иного класса, можно перейти к его исходному коду и полюбопытствовать, что же там такое происходить...

    В вашем примере мы видим два конструктора, один принимает символьный поток (Reader), а другой - байтовый поток ("сырые" данные) (InputStream).

    Scanner предназначен для удобного чтения текста из потока, т.е. ему нужен символьный поток (Reader). А что он делает с байтовым поток? - правильно, оборачивает его в Reader:) И если зайти в код конструктора, то мы это увидем:
    public Scanner(InputStream source) {
            this(new InputStreamReader(source), WHITESPACE_PATTERN);
        }

    Все просто, в зависимости от доступного вам потока (Reader/InputStream), вы используете соответствующий конструктор Scanner-а. В вашем примере оба варианта делают одно и тоже.

    Библиотека java.io состоит из декораторов (паттерн такой), они как матрешки, вкладывая их один в другой, вы добавляете функционал.

    Байтовы поток, а нужен символьный? - пффф... обвернули его InputStreamReader. Нужна буферизация? - легко, Обвернули в BufferedReader.
    Ответ написан
    1 комментарий
  • Имеет ли смысл использовать git если вас работает 3 человека в команде?

    @Lolman
    Software Engineer
    Использовать систему контроля версий имеет смысл даже если разработчик всего один
    Ответ написан
    1 комментарий
  • Поток System.in - экземпляр абстрактного класса. Как такое возможно?

    @FoxInSox
    Во-первых создать экземпляр абстрактного класса можно, необходимо только реализовать абстрактные методы:
    InputStream is = new InputStream() {
    	@Override public int read() throws IOException {
    		return 123;
    	}
    };
    System.out.println(is.read());//123

    Во-вторых у InputStream'а целая гора наследников. Я не знаю как там формулировал Шилдт, но он наверняка не имел ввиду что System.in это именно экземпляр InputStream'а.

    В-третьих вы сами можете(должны) это проверить:
    System.out.println(System.in);//java.io.BufferedInputStream@5577140b

    Т.е. System.in конкретно на моей машине в моей jvm это экземпляр BufferedInputStream.

    PS больше пишите код. На одну прочитанную страницу книги должна быть написана одна страница кода.
    Ответ написан
    Комментировать
  • Как оптимальней?

    Язык программирования не указан, но во многих второй вариант вообще ошибочный - case выполняется по очереди и каждый следующий перезаписывает предыдущий. Это называется switch fallthrough и считается плохой практикой, поскольку может повлечь за собой неожиданные проблемы при невнимательности, как в данном случае.

    Ну и когда вы спрашиваете что "лучше" и "оптимальнее", нужно описывать критерии, по которым вы оцениваете лучшесть и оптимальность.
    Ответ написан
    6 комментариев
  • Как оптимальней?

    @deliro
    break
    Ответ написан
    Комментировать
  • Где можно проверить свои знания по теории Java?

    EugeneP2
    @EugeneP2
    Java Dev
    Лучший способ - это сходить на тех собеседование в ИТ контору
    Ответ написан
    Комментировать
  • Где можно проверить свои знания по теории Java?

    abs0lut
    @abs0lut
    Ответ написан
    Комментировать
  • Как работает класс object в этом кода?

    EugeneP2
    @EugeneP2
    Java Dev
    Object clone = x.clone();

    Это клон(копия) объекта класса Date.

    Дальше его нужно привести к типу Date
    Date cloneDate = (Date) clone;

    Почему clone() возвращает Object ? - потому как этот метод наследуется от класса Object, а так как все типы в джаве наследуют класс Object, следовательно clone() должен возвращать общий для всех типов тип - Object

    UPDATE:

    Для начала нужно разобраться, почему же все таки нужно переопределять метод clone(), а не воспользоватся наследуемой нативной реализацией данного метода. Все дело в том, что базовый метод клонирование выполняет только поверхностное копирование. Будут скопированные только значения полей класса. Для примитивных типов (int, byte, char), все будет норм, но если это массивы, коллекции, объекты (например Date), или ваши типы, то будут скопированы только ссылки на них. В итогу клонирования у нас будет два объекта, у которых поля ссылаются на одни и те же поля, и через эти поля можно повлиять на все объекты которые клонировались:

    class TestClone implements Cloneable {
        		
        		private Date date = new Date();
    
    			public Date getDate() {
    				return date;
    			}
    
    			public void setDate(Date date) {
    				this.date = date;
    			}
    
    			@Override
    			protected Object clone() throws CloneNotSupportedException {
    				return super.clone();
    			}
        	}
        	
        	TestClone a = new TestClone();
        	TestClone b = (TestClone) a.clone();
        	System.out.println(a.getDate());
        	System.out.println(b.getDate());
        	b.getDate().setYear(0);
        	System.out.println(a.getDate());
        	System.out.println(b.getDate());
    
    
    
    // Fri Jul 10 23:13:47 EEST 2015
    // Fri Jul 10 23:13:47 EEST 2015
    // изменили один, а поменялось два
    // Tue Jul 10 23:13:47 EET 1900
    // Tue Jul 10 23:13:47 EET 1900


    Такое не пройдет, если будут неизменяемые (immutable) классы, тот же String. У него нет методов для изменения состояния.

    Потому то и нужно переопределять метод clone и выполнять глубокое копирование всех изменяемых объектов на который ссылаются поля (если есть такие).

    class TestClone implements Cloneable {
        		
        		private Date date = new Date();
        		private String s = "string"; // этот не нужно клонировать
        		
    			public Date getDate() {
    				return date;
    			}
    
    			public void setDate(Date date) {
    				this.date = date;
    			}
    
    			@Override
    			protected Object clone() throws CloneNotSupportedException {
    				TestClone clone = (TestClone) super.clone();
    				if (this.date != null) {
    					clone.date = (Date) this.date.clone();
    				}
    				return clone;
    			}
        	}
    
    
    Fri Jul 10 23:25:16 EEST 2015
    Fri Jul 10 23:25:16 EEST 2015
    // теперь это действительно клоны
    Fri Jul 10 23:25:16 EEST 2015
    Tue Jul 10 23:25:16 EET 1900


    Почему JVM само не может выполнить глубокое клонирование? - Потому как JVM не в курсе насколько клонирование должно быть глубоким:) И как правильно нужно копировать поля, со всеми нюансами, которые задумал программист:)

    ИМХО: интерфейс маркер Cloneable обязателен, чтоб можно было понять, переопределен ли метод clone в класса или нет.

    TestClone с = new TestClone();
        	
        	if (с instanceof Cloneable) {
        		System.out.println("ок, меня можно клонировать");
        	}


    PS
    Есть готовое решение от google для глубокого клонирование.
    Отличная статья: Глубокое клонирование в Java без велосипедов
    Ответ написан
    8 комментариев
  • Удаление обработчиков событий в JAVA?

    по идеи отписываться не нужно.
    Вы создаете обработчик, класс реализующий интерфейс ActionListener, после этого создаете обработчик, метод addActionListener. Удалить слушателя можно методом removeActionListener.
    Ответ написан
    2 комментария
  • Java создание элементов массива!?

    Написание программ - это способ выражения своих мыслей. Для начала научитесь излагать свои мысли естественным языком, с этим у вас худо.
    Ответ написан
    2 комментария
  • Как найти строку в txt файле?

    EugeneP2
    @EugeneP2
    Java Dev
    File file = new File("src/main/resources/textfile.txt");
    
    	Scanner scanner = new Scanner(file);
    	try {
    	    
    	    while(scanner.hasNextLine()) {
    		String line = scanner.nextLine();
    		
    		String[] cols = line.split(" ");
    		
    		if (cols[4].equals("17.08.2015")) {
    		    System.out.println(line);
    		}		
    	    }
    	    
    	} finally {	    
    	    scanner.close();
    	}
    Ответ написан
    1 комментарий
  • Как получить список файлов в папке?

    zolt85
    @zolt85
    Программист
    Подпапки обходить рекурсивно. Список файлов можно получить при помощи метода listFiles , в который можно передать FilenameFilter
    Ответ написан
    Комментировать
  • Почему старый компьютер тормозит?

    @Mikhael1979
    админ в крупной компании
    Чтобы вернуть быстродействие сделайте 2 вещи:
    1. Замените термопасу на процессоре, смажьте или замените вентиляторы.
    2. Замените жесткий диск на новый.

    Рецепт проверен на 2-х сотнях старых ПК уровня Celeron 1.8 GHz - XP c антивирусом начинает шевелиться приемлемо для офисных задач.

    * если на материнской плате есть вздутые конденсаторы - их необходимо заменить (в ремонт плату несите).
    Ответ написан
    Комментировать
  • Почему старый компьютер тормозит?

    RomaZveR
    @RomaZveR
    CEO AlertMoney, PHP/Golang Developer
    Мой старичок 2006 года выпуска помер год назад. Сначала начал помирать хард - i/o стал очень медленным, соответственно любая программа, работающая с диском чуть ли не вешала систему. Затем диск окончательно помер (нулевая дорожка размагнитилась, да и SMART считал его вообще мёртвым во всех смыслах). Поменял на новенький терабайтник - первый месяц всё хорошо, но затем начал умирать процессор - любая средненькая программа грузила его 2 старых ядрышка на 100%, голая ось на 30-40% (молчу про запуск хрома), и в один прекрасный момент ПК вообще перестал включаться (глох при запуске).
    В общем ищи проблему в этих двух компонентах, маловероятно что умирает мать или ОЗУ, так как они обычно сразу, без прелюдий ломаются.
    Ответ написан
    1 комментарий
  • Какие цели преследует Dependency Injection?

    EvilsInterrupt
    @EvilsInterrupt
    System programming, Reversing Engineering, C++
    DI это способ создать интерфейсы там, где их не было ранее, но они вдруг понадобились сейчас. Интерфейсы вводятся не просто так, а для решения какой-либо задачи. Отойдя от программирования и взяв в качестве примера ситуацию с аппаратным обеспеченим, то мы поймем, что люди очень сильно выиграли когда решили разделить вычислительные средства на материнская плата, ЦПУ, ОЗУ, Жесткий диск и др. Да, они усложнили введя интерфейсы, но при этом повысилось удобство эксплуатации и возрасла скорость разработки. Скорость изготовления частей возрасло за счет того что отдельный компонент изготовить проще, чем целую систему! Более того компонент может быть с разными характеристиками, ценою и изготавливаться многими компаниями на различных производственных мощностях. Возвращаясь к DI : программист выигрывает за счет того что теперь значительно легко установить новый компонент. К примеру дав интерфейс программисту на стороне, дав ему модульные тесты(в качестве "живого" ТЗ) вы получаете дополнительное время, т.к. пока пилится компонент стороним программером Вы можете пилить другую часть системы, а принять работу можно по прохождению модульных тестов и быть уверенным, что это то что Вы хотели, если конечно хорошо продумали модульные тесты ;)
    Ответ написан
    Комментировать
  • Получение опыта!? Замкнутый круг или безвыходная ситуация?

    opium
    @opium
    Просто люблю качественно работать
    если раньше с опытом были проблемы, то сейчас когда есть интернет можно вообще не учиться а идти и опыт получать
    у вас есть неограниченный доступ к документации и поисковику
    гитхаб
    взяли написали сотню программ полезных опыта у вас вагон
    Ответ написан
    Комментировать
  • Что такое стандартные алгоритмы и структуры данных?

    @dj_raphael
    Алгоритмы:
    Сортировки: пузырек, быстрая, мерж и другие.
    Поиск, в основном бинарный.
    Обход графа в ширину, в глубину.

    Структуры:
    Списки, Очереди, Стеки, Словари - разные реализации
    Деревья(красно черное), графы

    Это основное что спрашивается, преподается почти во всех вузах страны.
    Ответ написан
    Комментировать