powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопросы новичка.
83 сообщений из 83, показаны все 4 страниц
Вопросы новичка.
    #38684956
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день всем! Начинаю осваивать Java, и на первых парах возникает много вопросов. Буду рад если поможете разобраться. Периодически буду выкладывать сюда вопросы.

Вопрос №1: Можно ли создать экземпляр вложенного статического класса вне пределов класса, в который он вложен ?
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38684959
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreenВопрос №1: Можно ли создать экземпляр вложенного статического класса вне пределов класса, в который он вложен ?
Можно. Следующий!
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38684973
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, а вдруг ТС на экзамене или тесте? :)
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38684980
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanBlazkowicz, а вдруг ТС на экзамене или тесте? :)
Удачи ему. :)
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38684991
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напоминает армии - старшие издеваются над младшими =)). А человек реально хочет разобраться. Переформулирую вопрос:
Есть класс:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
package vnutrennie_classi.vlogenii_static;

public class Vlogenii_static {
	static private final int CONSTANT1 = 10;
	final int CONSTANT3 = 33;
	void foo(){
		Inner a = new Inner();
		a.metod2();
		// окружающий класс имеет доступ ко всем статическим членам вложенного статичекого класса(даже приватным). 
		System.out.println(Inner.CONSTANT2*3);
	}
	
	public static class Inner{
		static private final int CONSTANT2 = 10;
		int c=10;
		void metod2(){
			System.out.println(CONSTANT1*CONSTANT2);
		}
	} 
	
	public static void main(String[] args) {
		// Вложенный статический класс имеет доступ о всем статическим членам окружающего класса.
		System.out.println(CONSTANT1*Inner.CONSTANT2);
		// Нельзя напрямую обратиться к нестатическим членам окружающего класса.
		// но можно создать его екземпляр и от него получить их.
		//System.out.println(CONSTANT3); - Ошибка!!!
		Vlogenii_static class1 = new Vlogenii_static();
		class1.foo();
		System.out.println(class1.CONSTANT3);
		
		Inner b = new Inner();
		System.out.println(b.c);
	}
}



В этом же пакете создал другой класс, в котором хотел узнать смогу ли я там как-нибудь создать класс Inner и посмотреть что от туда (внешнего класса мне будет доступно).
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38684993
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как создать класс Inner во внешнем классе ?
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38684997
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreenКак создать класс Inner во внешнем классе ?
Вот опять. Проблема одна. А вопрос другой. У вас же вопрос о том как ссылаться на внутрений класс.
Вопрос ведь не в том как создать класс или его экземпляр.

Код: java
1.
2.
vnutrennie_classi.vlogenii_static.Vlogenii_static.Inner inn;
inn = new vnutrennie_classi.vlogenii_static.Vlogenii_static.Inner();
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38685002
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант создать экземпляр класса в котором размещен статический вложенный класс
Код: java
1.
Vlogenii_static a = new Vlogenii_static()

и от него создать нужный
Код: java
1.
a.new Inner();

не работает.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38685006
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все работает, спасибо, буду дальше разбираться.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38685011
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ужасная привычка разбирать неправильные use-cases перешла от С++ к Java.

Нет это прям болезнь какая-то....
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38685014
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreenВариант создать экземпляр класса в котором размещен статический вложенный класс
Код: java
1.
Vlogenii_static a = new Vlogenii_static()

и от него создать нужный
Код: java
1.
a.new Inner();

не работает.
Это синтаксис для не-статических вложеных классов.
Настоятельно рекомендую читать официальные Java туториалы. Они очень простые и легко читаются даже с базовым английским.
http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38689635
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос №2: Правильно ли я понимаю следующее?

Код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
package nasledovanie;

public class PrisvaevaniePeremennoiTipaAObiektaPodklassaTipaB {
	class A{
		// Свойства класса А.
		int a;
		boolean b;
		String c;
		
		// Конструктор класса А по умолчанию.
		A(){
			a = -1;
			b = false;
			c = "Empty";
		}
		
		// Конструктор с 3 параметрами.
		A(int a, boolean b, String c){
			this.a = a;
			this.b = b;
			this.c = c;
		}
		
		// Метод класса А.
				void methodA(){
					System.out.println("Метод класса А.");
				}
	}
	
	class B extends A{
		// "Личные свойства класса B"
		double d;
		
		// Конструктор по умолчанию класса B.
		B(){
			super();
			d = -1; 
		}
		
		// Конструктор с 4 параметрами для класса B.
		B(int a, boolean b, String c, double d){
			super(a, b, c); // Если опустить эту конструкцию, то будет вызван конструктор по умолчанию суперкласса
			this.d = d;
		}
		
		// Переопределенный метод класса А.
		void methodA(){
			System.out.println("Переопределенный метод класса А. d = "+d);
		}
		
		// Метод класса B;
		void metodB(){
			System.out.println("Метод класса B.");
		}
	}
	
	public static void main(String[] args){
		PrisvaevaniePeremennoiTipaAObiektaPodklassaTipaB classMain = new PrisvaevaniePeremennoiTipaAObiektaPodklassaTipaB();
		A a3 = classMain.new A(2, true, "Hello!");
		B b4 = classMain.new B(2, true, "Hello!", 56.9);
		B bx;
		// Переменной типа А присваиваем значение ссылки на переменнную типа B.
		a3 = b4;
		
		// Ошибка !!!
		//a3.d; Переменная a3 может знать только о тех членах класса, которые в ней описанны.
		// Ошибка !!! Тоже и с методами.
		// a3.methodB();
		a3.methodA(); // Однако, если класс B имеет переопределенный метод, то вызываться будет именно он.
		
		bx = (B)a3;
		System.out.println(bx.d); // Значение переменной d не было утеряно.
		
	}
}



а). При присвоении переменной суперкласса значения переменной подкласса, сам подкласс полностью сохраняет свое состояние, а при работе с ним как объектом суперкласса на него как бы налаживаеться фильтр этого класса ? Из примера получается так, так как мы не потерялди значение переменной "d"?

б). Суперкласс получивший ссылку на подкласс не может ссылаться на переменные и методы принадлежащие только подклассу, кроме переопределенных методов, даже если в них используются выражения с переменными принадлежащими только подклассу?
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38689644
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с). При приведении типа суперкласса к типу подкласса все поля суперкласса присваиваются полям подкласса, а "личные" поля подкласса сохраняют свои значения которые были до этого ?
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38689647
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блджад. Убил-бы тех кто на собеседовании задаёт "вопросы вселенского" масштаба.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38689653
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я просто стараюсь изучать джаву по принципу - "Понимание лучше запоминания". Когда понимаешь что и как, сам можешь делать выводы в непонятных ситуациях. А если просто зубрить, то часто неиспользуемое забывается.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38689662
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreen, вопрос в том что кроется за этими странными синтетическими примерами.
Вот тут в смежной ветке по сям один чел парился разбором С++ исходника. Причем
такого исходника которого в природе не бывает. Ну вот такие вот у него сублимации.
Нету ориентира. Вот и парится. Уже вес терять начал.

И тебе совет дам.

Учи работу с коллекциями и мультипоточность. Когда сможешь решить любую задачу - на
Collections и Multithreading - будешь сеньор-джава-помидор и тебе будет абсолютно пофиг какие классы запилены.
Вложеные или внешние статические там или еще бохзнает какие абстрактные.

А этот пример выкинь в топку. Он бесполезен для бизнес логики. В нём нет сакрального
смысла и он не отвечает на вопросы философских камней и богов.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38689767
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreenВопрос №2: Правильно ли я понимаю следующее?
Очень плохо с терминологией.
1) Поля это не свойства. Свойства в Java это get/set методы. Свойства как и обычные методы могут быть виртуальными. Поля не могут.
2) У переопределенных методов нужно ставить аннотацию @Override. Помогает чтению кода без IDE и контролирует изменения в родительском классе.
3) Есть класс-предок (родитель) и класс-наследник. Термины "подкласс" и "супер-класс" используются редко. Особенно "подкласс", так как не всегда очевидно речь о наследнике или вложенном классе.
4) Нужно четко разделять - объект (экземпляр класса) и класс. "сам подкласс полностью сохраняет свое состояние" это в данном случае бред.

Создаётся объект типа B. Ссылка типа A (переменная) может указывать на объект типа B, потому что B это A. Но ссылка она лишь всего "указывает" на объект. Сам объект от этого никак не меняется. "Состояние" это свойства объекта. Хотя у класса тоже может быть "состояние". Но это совсем другая тема.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38695446
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос №3.
Интерфейс может иметь модификатор abstract как для самого себя так и для объявлений методов. Зачем ? Там же все и так вроде бы как неявно описывается им, или все таки есть ситуации где это не так ?
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38695479
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
interface I {
  void C();
  abstract void A1();
  abstract void A2();
}

abstract class C implements I {
  public void C() {}
  public void A1() {}
  abstract void A2();
}

?
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38695480
korshun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreen, http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.1.1.1

9.1.1.1. abstract Interfaces

Every interface is implicitly abstract.

This modifier is obsolete and should not be used in new programs.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38707313
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос №4.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
package exeptions;

import java.util.Random;

public class MyExeption {
	public static void main(String[] args) throws MyNewExeption {
		Random rnd = new Random();
		int a = rnd.nextInt(20);
		System.out.println(a);
		
		try{
		if(a>10)
			throw new MyNewExeption(a);
		}catch(MyNewExeption e){
			System.out.println(e);
			e.printStackTrace();
		}
	}
}

class MyNewExeption extends Exception{
	
	int detail;
	
	public MyNewExeption(int a) {
		detail = a;
	}
	public String toString(){
		return "Ошибка, a>10";
	}
}



При многоразовом запуске программы, получаются разные результаты:
иногда :
Код: java
1.
2.
3.
4.
Ошибка, a>10
	at exeptions.MyExeption.main(MyExeption.java:13)
14
Ошибка, a>10

, иногда наоборот:
Код: java
1.
2.
3.
4.
17
Ошибка, a>10
Ошибка, a>10
	at exeptions.MyExeption.main(MyExeption.java:13)


+ вариант где исключение не создается и просто выводится число до 10.
Почему так происходит ?
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38707315
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreenRandom rnd = new Random();
При многоразовом запуске программы, получаются разные результаты:

Программа использует Random, но результат ожидается одинаковый? Или что?
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38707317
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл убрать throws в описание метода main, но это на результат не влияет.Интересно, почему в некоторых случаях обработчик исключения срабатывает даже раньше, чем вывод переменной до блока try-catch?
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38707319
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В одном случае сначала выводится результат
Код: java
1.
System.out.println(a);

потом
Код: java
1.
System.out.println(e);

потом
Код: java
1.
e.printStackTrace();

.
В другом случае, сначала
Код: java
1.
e.printStackTrace();

потом
Код: java
1.
System.out.println(a);

потом
Код: java
1.
System.out.println(e);
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38707321
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreen,

System.out и System.err это два разных потока вывода. В некоторых случаях порядок вывода err и out в реальную консоль может различаться. Если я правильно понял ваш вопрос. А то какие "обработчики" мутные. У вас в коде нет "обработчиков".
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38707322
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreen,

Поменяй e.printStackTrace() на e.printStackTrace(System.out) и тогда будет стабильно одинаково.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38707336
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторSystem.out и System.err это два разных потока вывода. В некоторых случаях порядок вывода err и out в реальную консоль может различаться. Если я правильно понял ваш вопрос. А то какие "обработчики" мутные. У вас в коде нет "обработчиков".
Да все правильно, я слышал про потоки, что они могут работать независимо, но пока с ними не разбирался. Вроде понятно стало. Спасибо. А по поводу кода, это просто пример создания своего исключения, сильно не заморачивался(обработчик имелось ввиду блок catch).
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38707343
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreenДа все правильно, я слышал про потоки, что они могут работать независимо, но пока с ними не разбирался.

Нет. Это не те потоки. Это потоки ввода\вывода (IO Stream).
System.err это один поток печати.
System.out это второй поток печати.
Они разные.
Ваша IDE или java.exe направляют оба этих потока в свою консоль.


faustgreenВроде понятно стало. Спасибо. А по поводу кода, это просто пример создания своего исключения, сильно не заморачивался(обработчик имелось ввиду блок catch).
ОК. Просто дело не в обработке исключения а в выводе на консоль.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38769352
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос №5.
Разбираюсь с методами класса java.util.concurrent.Semaphore(в примере ниже они расмотренны в 1 потоке, просто для ознакомления с методами)

код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
package concurrent;

import java.util.concurrent.Semaphore;
// поток может выполнять код ограниченный semaphore.ecquire и semaphore.release(для одного и того же semaphore)
// захватив этот семафор при наличии свободных разрешений.
public class Semaphore_semaphoreMetods {
	// Создаем объект семафора.
	static Semaphore semaphore = new Semaphore(6); // работают одновременно 6 потока(либо 1 поток которые захвати все 5 разрешений).
	
	public static void main(String[] args) throws InterruptedException {
		Semaphore_semaphoreMetods obj1 = new Semaphore_semaphoreMetods();
		obj1.semaphoreMetods(semaphore);
	}
	
	void semaphoreMetods(Semaphore semaphore) throws InterruptedException{
		System.out.println("Получение доступных разрешений для семафора. Их текущее количество - " + semaphore.availablePermits());
		System.out.println();
		
		semaphore.acquire(); // захват одного разрешения семафора (Метод может порождать исключение)
		System.out.println("Захвачено 1 разрешение семафора с помощью метода semaphore.acquire()");
		System.out.println("Получение доступных разрешений для семафора. Их текущее количество(после захвата одного) - " + semaphore.availablePermits());
		System.out.println();
		
		semaphore.acquire(3); // Захват сразу трех разрешений.
		System.out.println("Захвачено 3 разрешение семафора с помощью метода semaphore.acquire(3)");
		System.out.println("Получение доступных разрешений для семафора. Их текущее количество(после захвата трех) - " + semaphore.availablePermits());
		System.out.println();
		
		int acquireCount = semaphore.drainPermits(); // Захват всех свободных разрешений.
		System.out.println("Захвачены все свободные разрешения семафора в количестве - " + acquireCount + " с помощью метода semaphore.drainPermits()");
		System.out.println("Получение доступных разрешений для семафора. Их текущее количество(после захвата всех осташихся свободных) - " + semaphore.availablePermits());
		System.out.println();
		
		int waitingCount = semaphore.getQueueLength();
		System.out.println("Получение количества запросов ожидающих семафор через команду semaphore.getQueueLength()");
		System.out.println("Число ожидающих запросов на захват семафора - " + waitingCount);
		System.out.println("Пробуем захватить еще 3 разрешение и заново проверяем число ожидающих потоков");
		semaphore.acquire(3); // Тут мы висим, так как все разрешения семафоа заняты.
		System.out.println("Получение количества запросов ожидающих семафор через команду semaphore.getQueueLength()");
	}
}



В предпоследней команде метода semaphoreMetods я попытался захватить 3 разрешения семафора, у которого они все закончились и на этой команде повис.
Вопрос: Правильно ли я понимаю, что если все разрешения семафора заняты, то последующий вызов метода ecquire() приведет к блокеровке выполнения этого потока, и соответственно, здесь же я не смогу получить количество ожидающих потоков. Т.е. я стал в очередь на семафор и хочу посмотреть сколько еще запросов на захват стоит паралельно с ним ?
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38769408
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вроде бы разобрался, возвращаеться не количество разрешений, а количество ожидающих потоков. + Из другого потока можно снять блокировку(правда какой поток при этом потеряет семафор - не известно(если их много)):


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
package concurrent;

import java.util.concurrent.Semaphore;
// поток может выполнять код ограниченный semaphore.ecquire и semaphore.release(для одного и того же semaphore)
// захватив этот семафор при наличии свободных разрешений.
public class Semaphore_semaphoreMetods {
	// Создаем объект семафора.
	static Semaphore semaphore = new Semaphore(6); // работают одновременно 6 потока(либо 1 поток которые захвати все 5 разрешений).
	
	public static void main(String[] args) throws InterruptedException {
		Semaphore_semaphoreMetods obj1 = new Semaphore_semaphoreMetods();
		obj1.semaphoreMetods(semaphore);
	}
	
	void semaphoreMetods(Semaphore semaphore) throws InterruptedException{
		System.out.println("Получение доступных разрешений для семафора. Их текущее количество - " + semaphore.availablePermits());
		System.out.println();
		
		semaphore.acquire(); // захват одного разрешения семафора (Метод может порождать исключение)
		System.out.println("Захвачено 1 разрешение семафора с помощью метода semaphore.acquire()");
		System.out.println("Получение доступных разрешений для семафора. Их текущее количество(после захвата одного) - " + semaphore.availablePermits());
		System.out.println();
		
		semaphore.acquire(3); // Захват сразу трех разрешений.
		System.out.println("Захвачено 3 разрешение семафора с помощью метода semaphore.acquire(3)");
		System.out.println("Получение доступных разрешений для семафора. Их текущее количество(после захвата трех) - " + semaphore.availablePermits());
		System.out.println();
		
		int acquireCount = semaphore.drainPermits(); // Захват всех свободных разрешений.
		System.out.println("Захвачены все свободные разрешения семафора в количестве - " + acquireCount + " с помощью метода semaphore.drainPermits()");
		System.out.println("Получение доступных разрешений для семафора. Их текущее количество(после захвата всех осташихся свободных) - " + semaphore.availablePermits());
		System.out.println();
		
		int waitingCount = semaphore.getQueueLength();
		System.out.println("Получение количества потоков(!не запросов) ожидающих семафор через команду semaphore.getQueueLength()");
		System.out.println("Число ожидающих запросов на захват семафора - " + waitingCount);
		System.out.println();
		
		System.out.println("Создаем параллельный поток, в котором проверяем количество ожидающих семафора потоков. Поток наичнает работу с задеожкой, поэтому главный поток успевает запросит еще 3 разрешения");
		NewThread newThreed = new NewThread(semaphore);
		newThreed.start();
		System.out.println();
		
		System.out.println("Пробуем захватить еще 3 разрешение и заново проверяем число ожидающих потоков");
		semaphore.acquire(3); // Тут мы висим, так как все разрешения семафора заняты. Висим до тех пор, пока паралелльный поток, например, не освободит 1 или несколько разрешений(даже если он их не занимал).
		System.out.println("Продолжение работы!");
	}
}

class NewThread extends Thread{
	Semaphore semaphore;
	
	public NewThread(Semaphore semaphore){
		this.semaphore = semaphore;
	}
	
	@Override
	public void run(){
		try {
			sleep(1000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("(Параллельный поток №1)Число потоков запросивших 1 или несколько разрешений, которые находяться в очереди на ожидании - " + semaphore.getQueueLength());
		
		semaphore.release(3); // Для продолжения работы в методе main после предпоследней команды, необходимо освободить миним 3 разрешения, так как main ждет захвата 3 разрешений.
	}
}



появился новый вопрос: можно ли получить количество разрешений, которые ожидающие потоки запросили ?
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38770562
Andrew1411
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreen,

/**
* Returns the current number of permits available in this semaphore.
*
* <p>This method is typically used for debugging and testing purposes.
*
* @return the number of permits available in this semaphore
*/
public int availablePermits() {
return sync.getPermits();
}
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38770564
Andrew1411
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreen,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
    /**

    /**
     * Returns the current number of permits available in this semaphore.
     *
     * <p>This method is typically used for debugging and testing purposes.
     *
     * @return the number of permits available in this semaphore
     */
    public int availablePermits() {
        return sync.getPermits();
    }


     * Returns an estimate of the number of threads waiting to acquire.
     * The value is only an estimate because the number of threads may
     * change dynamically while this method traverses internal data
     * structures.  This method is designed for use in monitoring of the
     * system state, not for synchronization control.
     *
     * @return the estimated number of threads waiting for this lock
     */
    public final int getQueueLength() {
        return sync.getQueueLength();
    }



и так далее... Смотрите код класса, все станет понятным
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38793195
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос №6:

Ключевое слово assert и его использование:

код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
package modifiers;

public class AssertDemo {
	public static void main(String[] args) {
		for (int i = 10; i>0; i--){
			System.out.println(i);
			assert (i == 5) : "i = 5";
		}
	}
}



Вывод на консоль:
Код: java
1.
2.
3.
10
Exception in thread "main" java.lang.AssertionError: i = 5
	at modifiers.AssertDemo.main(AssertDemo.java:7)



Вопросы:
1). Почему не были выведены числа 9 8 7 6 ?
2). По умолчанию проверка утверждений(assert) отключена ?(чтоб заработоло хотя бы так, в Eclipse запускал программу с параметров VM -ea).
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38793201
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
faustgreenЯ просто стараюсь изучать джаву по принципу - "Понимание лучше запоминания". Когда понимаешь что и как, сам можешь делать выводы в непонятных ситуациях. А если просто зубрить, то часто неиспользуемое забывается.

к сожалению, во многих компаниях больше хотят слышать от тебя ответы на собеседовании как в школе - "чтоб от зубов отскакивало", при этом похоже, что вопрос опыта применения всего этого для них не так и важен...

что толку вызубрить теорию, если не применял в реале, только не говорите, что все будет ок. как показывает опыт, теория без практики мало что значит...
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38793202
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первый вопрос отпал - перепутал логику в выражение (нужно i!-=5).
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38793216
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторк сожалению, во многих компаниях больше хотят слышать от тебя ответы на собеседовании как в школе - "чтоб от зубов отскакивало", при этом похоже, что вопрос опыта применения всего этого для них не так и важен...

что толку вызубрить теорию, если не применял в реале, только не говорите, что все будет ок. как показывает опыт, теория без практики мало что значит...

Ну без теории практику не начнешь. Сейчас я java пытаюсь учить следующим образом:
1) Читаю раздел из книги (Шилдт "Полный справочник по Java SE6").
2) Основные моменты помечаю для себя, в виде небольшого конспекта. (пригодится для повторения на собеседование).
3) Пробую прочитанное на простых примерах.

4).потом думал написать какой нибудь простенький сайт на сервлетах + hibernate + spring (правда с ними тоже еще нужно разбираться), а потом с этим багажом пробывать устраиваться на работу. Впринципе можно и без этого пункта обойтись, но для меня принципиальный вопрос - стартовая зп.

Сюда бросаю те вопросы, с которыми самому не получается разобраться.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38793266
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
faustgreenдля меня принципиальный вопрос - стартовая зп.
вам до этого пункта, как до Киева рачки )
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38794853
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос №7:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
package generic;

public class SimpleParamClass<T> {
	T ob;
	
	public SimpleParamClass(T ob) {
		this.ob = ob;
	}
	
	T getOb(){
		return ob;
	}
	
	void showType(){
		System.out.println("Тип Т - " + ob.getClass().getName());
	}
	
	public static void main(String[] args) {
		SimpleParamClass<String> obj1 = new SimpleParamClass<String>("String");
		obj1.showType();
		SimpleParamClass<Integer> obj2 = new SimpleParamClass<Integer>(new Integer(50));
		obj2.showType();
	}
}



Строку
Код: java
1.
SimpleParamClass<String> obj1 = new SimpleParamClass<String>("String");

я могу записать, как
Код: java
1.
SimpleParamClass<String> obj1 = new SimpleParamClass<>("String");


в чем отличие этих записей ?
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38795312
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вторая запись - это сокращенная форма, которая появилась в жаве 1.7
Это т.н. Diamond Syntax

отличий вроде как нет.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38802168
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может кто подскажет, какие требования предъявляются к java junior программисту(В плане технологий). т.е. что нужно изучить в первую очередь ?
Например:
1). java SE:
а) ООП.
б) Многопоточность.
в) Исключения.
г) Коллекции.
...
2) ...

хотя в 2-х словах. Спасибо.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38802189
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreenт.е. что нужно изучить в первую очередь?
Scala изучай в первую очередь.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38802217
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно будет и до него доберемся, а пока хотелось бы с java-ой разобраться. Смотрел вакансии, во многих требования отличаются, вот и подумал может есть какой минимальный базовый набор и добрые люди подскажут. А там дальше будет видно, что нужно для работы. Пока обучение движется медленно, много материала для изучения .... (.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38802221
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотелось бы услышать мнение людей только начавших работать: что спрашивли на собеседовании, с чем столкнулись на первых этапах работы ?
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38802316
YamahaR1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczfaustgreenт.е. что нужно изучить в первую очередь?
Scala изучай в первую очередь.
Т.е. вы хотите сказать что для новичков порог вхождения в Scala ниже чем в Java?
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38802322
YamahaR1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreenНужно будет и до него доберемся, а пока хотелось бы с java-ой разобраться. Смотрел вакансии, во многих требования отличаются, вот и подумал может есть какой минимальный базовый набор и добрые люди подскажут. А там дальше будет видно, что нужно для работы. Пока обучение движется медленно, много материала для изучения .... (.

Collection, Thread, IO, JDBC
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38802326
YamahaR1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreenМожет кто подскажет, какие требования предъявляются к java junior программисту(В плане технологий). т.е. что нужно изучить в первую очередь ?
Например:
1). java SE:
а) ООП.
б) Многопоточность.
в) Исключения.
г) Коллекции.
...
2) ...

хотя в 2-х словах. Спасибо.

Ну в принципе вы тут все правильно написали, разберитесь с SE а потом переходите на servlets, spring, etc.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38802329
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczfaustgreenт.е. что нужно изучить в первую очередь?
Scala изучай в первую очередь.
Ого.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38802332
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
faustgreenМожет кто подскажет, какие требования предъявляются к java junior программисту(В плане технологий). т.е. что нужно изучить в первую очередь ?
Например:
1). java SE:
а) ООП.
б) Многопоточность.
в) Исключения.
г) Коллекции.
...
2) ...

хотя в 2-х словах. Спасибо.

везде по разному. я недавно был в компании, где от джуниора требовалось знание популярных фреймворков: servlets, jsf, struts, hibernate, maven и еще каких-то.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38802334
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну и спринг тоже
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38802348
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё зависит от организации куда идёшь. Часто бывает что собеседование - уродское.
Тебя спрашивают не то что нужно для работы а какие-то пространные вопросы на тему
hash, serializable, и compareTo. Вобщем лучше всего на первом собеседовании вытрясти
из девочек максимум инфы о том КТО вас будет собеседовать и КАК. И здесь же стоит
оговорить что вас спрашивать НЕ БУДУТ. Например английский. Вобщем нужно
сразу поставить себя как делового чела который ценить деньги и время. Сходу
потребовать стананчик кофе. Сидеть в кресле вразвалку. Шутить на тему
офисов гугла. Шутить на тему доллара.

Удачи.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38802369
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
или пишут какие-то экзотические исключения и просят тебя перехватить их все. зачем помнить всю иерархию, если ide стразу мне покажет, что я делаю не так?

или ты предоставляешь в резюме ссылку на работающее приложение на не один день работы с использованием например struts, а у тебя спрашивают, а как получить значение поля бина в jsp?
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38802372
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
запариваться на изучении каких-то технологий для джуниора бессмысленно. Опыт рулит. В свящи с этим, лучше всего взять и написать среднюю по сложности программу, в которой обязательно есть база, многопоточность, работа с сетью и файлами.
Ну какой-нибудь бот или сервер. Как только функционал готов - рефакторинг, подключение Hibernate\Spring, перевод на мавен. По соотношению время\качество оптимальный вариант, конечно еще круче если есть опытный товарищ на сверку кода и пинок под зад, но тут понятно что трудно.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38802384
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174а у тебя спрашивают, а как получить значение поля бина в jsp?

Вполне возможно просто ожидают услышать "через EL". Не самый плохой вопрос, и кстати да, говорящий о многом. И еще не всегда спрашивают чтобы зарубить - иногда спрашивают чтобы оценить опыт
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38802410
YamahaR1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никrema174а у тебя спрашивают, а как получить значение поля бина в jsp?

Вполне возможно просто ожидают услышать "через EL". Не самый плохой вопрос, и кстати да, говорящий о многом. И еще не всегда спрашивают чтобы зарубить - иногда спрашивают чтобы оценить опыт

Собеседование тоже опыт, так что чем больше ходишь на всякие собеседования тем больше прокачиваешься в каверзных вопросах :)
И да, по поводу написания программы средней сложности +1, главное что бы было интересно и не перегорел :)
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38802905
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо!
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38803039
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+100 к опыту если пойти волонтёром в какой-нить проектик. Бесплатно. Месяц будут пинать
зато вырастешь в своих глазах и на собеседовании будешь увереннее.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38810014
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос №8:
В классе Object есть метод
Код: java
1.
protected native Object clone() throws CloneNotSupportedException;



1). Он же не абстрактный, а просто написан на другом языке?
2). Почему метод clone() не доступен пока его не переопределишь ? (Модификатор protected тут не причем ?)

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
package test;

public class Test3 {
	public static void main(String[] args) {
		A a = new A();
		a.clone(); // метод недоступен, пока закоментирован код внизу.
	}
}


class A{
	protected int i;
	//protected Object clone(){
	//	return new A();
	//}
}
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38810042
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38810052
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в Object нет реализации этого метода
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38810100
YamahaR1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreenВопрос №8:
В классе Object есть метод
Код: java
1.
protected native Object clone() throws CloneNotSupportedException;



1). Он же не абстрактный, а просто написан на другом языке?
2). Почему метод clone() не доступен пока его не переопределишь ? (Модификатор protected тут не причем ?)

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
package test;

public class Test3 {
	public static void main(String[] args) {
		A a = new A();
		a.clone(); // метод недоступен, пока закоментирован код внизу.
	}
}


class A{
	protected int i;
	//protected Object clone(){
	//	return new A();
	//}
}



1) Модификатор native означает что метод был реализован на другом языке отличном от Java через JNI;
2) У clone модификатор доступа protected (видимость на уровне пакетов), для доступа вам надо добавить интрефейс Cloneable и переопределить метод clone в своем классе.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38810231
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хм ... у меня вроде получилось переопределить метод, не используя интерфейс Clonable()
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
package test;

public class Test3 {
	public static void main(String[] args) {
		A a = new A();
		a.setI(10);
		A b;
		b = (A) a.clone();
		System.out.println("i = " + b.i);
	}
}


class A{
	protected int i = 0;
	void setI(int i){
		this.i = i;
	}
	
	@Override
	protected Object clone(){
		return this;
	}
}


Вроде все работает, хотя наверное будут какие то последствия такой работы.
ps. Тут вроде никакой практической пользы нет, просто стало интересно почему переопределенный метод виден, а если его не переопределять, то не виден(видимость же не зависит от того переопределен он или нет, наверное, тут что связанной с самой реализаций метода(так как он native) и базой языка).
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38810235
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
упс... туплю ... вместо клона вернул ссылку на тот же объект.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38810346
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у этого метода нет реализации в предке, поэтому переопределять полюбэ, и соглашение такое, что надо применять интерфейс Cloneable к классу
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38810441
Андрей461117
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
faustgreen, оставил коммент
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38810925
DDiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
модификатор protected обозначает что данный метод виден в пакадже где объявлен класс и во всех потомках этого класса.
то что вы написали, это аналог вот этого, только называется иначе
Код: java
1.
2.
3.
4.
5.
public A getCopy() {
    A a = new A();
    a.setSomeField(this.getSomeField());
    return a;
}


метод clone класса Object таки реализован и работает (о чём нам говорит native) и он действительно копирует объект, для этого достаточно вызвать super.clone(). Но если ваш класс не имплементит интерфес Cloneable, но попытка вызвать этот метод приведёт к CloneNotSupportedException
вот как-то так оно работает если не накосячил
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public class Main {

    static class A implements Cloneable {
        public String s ;

        A(String s) {this.s = s;}

        @Override
        protected A clone() throws CloneNotSupportedException {
            return (A) super.clone();
        }
    }

    public static void main(String[] args) throws CloneNotSupportedException {
        A original = new A("This is original object");

        A clone = original.clone();
        clone.s = "This is clone object";
        System.out.println("s = " + original.s);
        System.out.println("s = " + clone.s);
    }
}


как видно, я ничего не копирую руками, всё делает clone()
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38816205
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос №9
Начал разбирать коллекции. Заметил такую штуку для класса ArrayList :
Код: java
1.
2.
3.
public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{...}



Код: java
1.
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {...}



Класс AbstractList<E> уже имплементит интерфейс List<E>(и, следовательно, если я правильно понимаю, в классе ArrayList<E> методы класса List<E> будут присутствовать), зачем еще раз имплементить интерфейс List<E> в самом классе ArrayList? Или это просто "лишние строки" (ничего плохого не делают, но по сути не нужны)? Например, если из объявления класса ArrayList убрать
Код: java
1.
implements List<E>

, все будет работать также как и раньше ?
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38816211
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreen,

Чтобы было понятнее.
http://stackoverflow.com/a/4387445
Та же история с Serializable, например. Стоит помечать этим интерфейсом каждый сериализуемый класс, даже если у классов общий сериализуемый предок. Просто чтобы было очевидно при чтении кода.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38817838
Cpt. Gray
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите, плизз

Изучаю jdbc, БД MySQL

Есть таблица Клиент (id, name) и класс Клиент

Вопрос: где правильно задавать Id для записи и как его получать потом?
Например, когда создаю объект класса Клиент id оставить = 0 (как-то не очень красиво)
а потом после вставки в таблицу вернуть id згенерированный БД?

Или сделать статик поле в классе Клиент и проставлять всем новым объектам Клиента id+1? (но тогда программа после выключения и включения начнет считать id с 0 :( ) (тоже не красиво как-то)
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38817842
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38818117
host.13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А неплохо ТС-то за работу взялся. При таком подходе и упорстве через год-другой плевать уже на кризисы будет ))
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38836069
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос №10:

Если в коде ниже поменять тип массива на int , то list будет содержать 1 элемент со значением ссылки на массив.(при типе Integer в примере выводятся числа из массива) Почему ?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class Arrays_ {
	public static void main(String[] args) {
		Integer myArray1[] = {1, 5, 2, 6, 3, 4};// С int-ом такая штука не прокатывает.
		
		List myList = Arrays.asList(myArray1);
		
		System.out.println(myList);
	}
}
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38836076
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще сопутствующий вопрос: Можно ли массив типа int привести к массиву типа Integer?
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38836086
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreenИ еще сопутствующий вопрос: Можно ли массив типа int привести к массиву типа Integer?
Нет.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38836096
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreenЕсли в коде ниже поменять тип массива на int , то list будет содержать 1 элемент со значением ссылки на массив.(при типе Integer в примере выводятся числа из массива) Почему ?

По-тому что и Автобоксинг и Varargs в Java это синтаксический сахар, реализованый на уровне компилятора, а не платформы. То есть их как бы нет в Java.

При автобоксинге компилятор просто пытается добавить в код конвертацию из примитива в обертку и обратно. И делает это только там где может угадать. Поэтому разница между примитивом и оберткой не стирается. Есть масса сценариев где примитивы и обертки ведут себя по-разному. То есть просто код конвертации не нужно писать самому. Но он есть. Это и называется "синтаксический сахар".
Точно так же реализованы и varargs. Которые на самом деле просто массив.

Arrays.asList() требует на входе массив объектов. Integer[] это уже массив объектов. Поэтому на выходе получем список Integer.
int[] это не массив объектов. Но он сам по себе объект. Поэтому компилятор для vararg оборачивает его в массив объектов. И потом пытается уже из этого массива создать список. Поэтому в списке только один элемент, так как у нас на входе только один объект.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38836097
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreen
Код: java
1.
		Integer myArray1[] = {1, 5, 2, 6, 3, 4};


Все соглашения о кодировании требуют писать скобки после типа, так как они относятся к типу, а не к имени переменной.
Правильное форматирование:
Код: java
1.
		Integer[] myArray1 = {1, 5, 2, 6, 3, 4};
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38836098
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все понятно и доходчиво =). Спасибо.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38836321
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174у этого метода нет реализации в предке, поэтому переопределять полюбэ, и соглашение такое, что надо применять интерфейс Cloneable к классу
в каком месте тут переопределение?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
public class Nellu implements Cloneable {
    int i;
    long l;
    String s;

    public Nellu(int v) {
        i = v;
        l = v;
        s = Integer.toString(v);
    }

    @Override
    public String toString() {
        return "Nellu{i=" + i + ", l=" + l + ", s='" + s + "'}";
    }

    public static void main(String[] args) throws CloneNotSupportedException {
        Nellu n = new Nellu(9876);
        System.out.println(n);
        n = (Nellu) n.clone();
        System.out.println(n);
    }
}
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38836322
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DDiverмодификатор protected обозначает что данный метод виден в пакадже где объявлен класс и во всех потомках этого класса.
то что вы написали, это аналог вот этого, только называется иначе
Код: java
1.
2.
3.
4.
5.
public A getCopy() {
    A a = new A();
    a.setSomeField(this.getSomeField());
    return a;
}



метод clone класса Object таки реализован и работает (о чём нам говорит native) и он действительно копирует объект, для этого достаточно вызвать super.clone(). Но если ваш класс не имплементит интерфес Cloneable, но попытка вызвать этот метод приведёт к CloneNotSupportedException
вот как-то так оно работает если не накосячил
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public class Main {

    static class A implements Cloneable {
        public String s ;

        A(String s) {this.s = s;}

        @Override
        protected A clone() throws CloneNotSupportedException {
            return (A) super.clone();
        }
    }

    public static void main(String[] args) throws CloneNotSupportedException {
        A original = new A("This is original object");

        A clone = original.clone();
        clone.s = "This is clone object";
        System.out.println("s = " + original.s);
        System.out.println("s = " + clone.s);
    }
}



как видно, я ничего не копирую руками, всё делает clone()а. ну или вот :)
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38838216
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос №11 В коде ниже метод interrupt вызывается до метода sleep(не в момент его работы(ожидания заданного промежутка времени)). Получается, что метод sleep бросает исключение если флаг прерывания установлен в true, независимо от того в какой момент времени он был установлен?


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
package javaUtil;

import java.util.Observable;
import java.util.Observer;

class Watcher implements Observer{
	@Override
	public void update(Observable o, Object arg) {
		if ((int) arg <100){
			System.out.println("Внимание! Обнаружен валютчик! Зафиксирована продажа ниже установленного курса!");
			((BeingWatched) o).PosaditVTurmu();
		}
	}
}

class BeingWatched extends Observable{
	void counter(int count){
		for(; count>=0; count--){
			int b = sell();
			setChanged();
			notifyObservers(new Integer(b));
			
			try {
				Thread.sleep(0);
			} catch (InterruptedException e) {
				count=-1;
			}
		}
	}
	
	int sell(){
		int a =(int) (Math.random()*530);
		System.out.println("Продан доллар по курсу - " + a);
		return a;
	}
	
	void PosaditVTurmu(){
		System.out.println("Валютчик отправлен в тюрьму!");
		Thread.currentThread().interrupt();
	}
}


public class Observer_ {
	public static void main(String[] args) {
		BeingWatched observered = new BeingWatched();
		Watcher abservering = new Watcher();
		observered.addObserver(abservering);
		observered.counter(100);
	}
}
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38838221
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreenПолучается, что метод sleep бросает исключение если флаг прерывания установлен в true, независимо от того в какой момент времени он был установлен?
Конечно. На то он и флаг.
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38838430
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос №12: Что планировалось: Таймер 3 раза запускает задачу и все закрывается. Что получили: Поток в котором выполняется задача, продолжает висеть в состоянии Runnable. Как завершить выполнение программы по истечении 3-хразового выполнения задачи? И собственно почему он висит ?
Можно все убить сделав myTimer.cancel(), но перед этим нужно выждать время(Thread.sleep(x);) пока завершится выполненее задачи, а его мы точно знать не можем. А join в главном потоке не получилось использовать так он будет ждать завершения, а его нет(завершения).

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
package javaUtil;

import java.util.Timer;
import java.util.TimerTask;

public class Timer_ {
	public static void main(String[] args) {
		Timer myTimer = new Timer();
		NewTask tsk = new NewTask();  
		System.out.println("Запуск задачи по таймеру(сначала ждем 2 секунд, потом каждые 2 секунды):");
		myTimer.schedule(tsk, 2000, 2000);
	}
}

class NewTask extends TimerTask{
	int j = 3;
	
	@Override
	public void run() {
		int i = 10;
		while (i>0){
			i--;
			System.out.println("Hello " + i);
		}
	
		j--;
		if (j == 0){
			cancel();
			System.out.println("Поток задания - демон ? - " + Thread.currentThread().isDaemon());
			System.out.println("Имя потока - " + Thread.currentThread().getName());
			System.out.println("Состояние потока - " + Thread.currentThread().getState());
		}	
	}
}
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38838436
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И можно ли убить поток(или просто его получить) класса, который мы сами не создавали ? Например, в майне создаем класс, который запускается в своем отдельном потоке, как узнать в каком (получить на него ссылку)?

... main ....{
ClassX x = new ClassX(); // при создании класса запускается поток. Как его оттуда достать ?
...
}
...
Рейтинг: 0 / 0
Вопросы новичка.
    #38869409
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может кто в кратце расказать о путях развития java программиста? Я пока представляю 2 ветки: web - написание сайтов, и разработка мобильных приложений(android). Что перспективнее? И сложно ли перескачить из одного русла в другое?
...
Рейтинг: 0 / 0
83 сообщений из 83, показаны все 4 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопросы новичка.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]