Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопросы новичка. / 25 сообщений из 83, страница 1 из 4
01.07.2014, 16:32
    #38684956
faustgreen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка.
Добрый день всем! Начинаю осваивать Java, и на первых парах возникает много вопросов. Буду рад если поможете разобраться. Периодически буду выкладывать сюда вопросы.

Вопрос №1: Можно ли создать экземпляр вложенного статического класса вне пределов класса, в который он вложен ?
...
Рейтинг: 0 / 0
01.07.2014, 16:33
    #38684959
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка.
faustgreenВопрос №1: Можно ли создать экземпляр вложенного статического класса вне пределов класса, в который он вложен ?
Можно. Следующий!
...
Рейтинг: 0 / 0
01.07.2014, 16:44
    #38684973
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка.
Blazkowicz, а вдруг ТС на экзамене или тесте? :)
...
Рейтинг: 0 / 0
01.07.2014, 16:49
    #38684980
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка.
wadmanBlazkowicz, а вдруг ТС на экзамене или тесте? :)
Удачи ему. :)
...
Рейтинг: 0 / 0
01.07.2014, 16:55
    #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
01.07.2014, 16:57
    #38684993
faustgreen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка.
Как создать класс Inner во внешнем классе ?
...
Рейтинг: 0 / 0
01.07.2014, 17:01
    #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
01.07.2014, 17:05
    #38685002
faustgreen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка.
Вариант создать экземпляр класса в котором размещен статический вложенный класс
Код: java
1.
Vlogenii_static a = new Vlogenii_static()

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

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

Нет это прям болезнь какая-то....
...
Рейтинг: 0 / 0
01.07.2014, 17:13
    #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
07.07.2014, 17:11
    #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
07.07.2014, 17:16
    #38689644
faustgreen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка.
с). При приведении типа суперкласса к типу подкласса все поля суперкласса присваиваются полям подкласса, а "личные" поля подкласса сохраняют свои значения которые были до этого ?
...
Рейтинг: 0 / 0
07.07.2014, 17:20
    #38689647
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка.
Блджад. Убил-бы тех кто на собеседовании задаёт "вопросы вселенского" масштаба.
...
Рейтинг: 0 / 0
07.07.2014, 17:27
    #38689653
faustgreen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка.
Я просто стараюсь изучать джаву по принципу - "Понимание лучше запоминания". Когда понимаешь что и как, сам можешь делать выводы в непонятных ситуациях. А если просто зубрить, то часто неиспользуемое забывается.
...
Рейтинг: 0 / 0
07.07.2014, 17:47
    #38689662
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка.
faustgreen, вопрос в том что кроется за этими странными синтетическими примерами.
Вот тут в смежной ветке по сям один чел парился разбором С++ исходника. Причем
такого исходника которого в природе не бывает. Ну вот такие вот у него сублимации.
Нету ориентира. Вот и парится. Уже вес терять начал.

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

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

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

Создаётся объект типа B. Ссылка типа A (переменная) может указывать на объект типа B, потому что B это A. Но ссылка она лишь всего "указывает" на объект. Сам объект от этого никак не меняется. "Состояние" это свойства объекта. Хотя у класса тоже может быть "состояние". Но это совсем другая тема.
...
Рейтинг: 0 / 0
13.07.2014, 20:04
    #38695446
faustgreen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка.
Вопрос №3.
Интерфейс может иметь модификатор abstract как для самого себя так и для объявлений методов. Зачем ? Там же все и так вроде бы как неявно описывается им, или все таки есть ситуации где это не так ?
...
Рейтинг: 0 / 0
13.07.2014, 21:16
    #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
13.07.2014, 21:16
    #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
28.07.2014, 14:35
    #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
28.07.2014, 14:38
    #38707315
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка.
faustgreenRandom rnd = new Random();
При многоразовом запуске программы, получаются разные результаты:

Программа использует Random, но результат ожидается одинаковый? Или что?
...
Рейтинг: 0 / 0
28.07.2014, 14:41
    #38707317
faustgreen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка.
Забыл убрать throws в описание метода main, но это на результат не влияет.Интересно, почему в некоторых случаях обработчик исключения срабатывает даже раньше, чем вывод переменной до блока try-catch?
...
Рейтинг: 0 / 0
28.07.2014, 14:43
    #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
28.07.2014, 14:45
    #38707321
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы новичка.
faustgreen,

System.out и System.err это два разных потока вывода. В некоторых случаях порядок вывода err и out в реальную консоль может различаться. Если я правильно понял ваш вопрос. А то какие "обработчики" мутные. У вас в коде нет "обработчиков".
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопросы новичка. / 25 сообщений из 83, страница 1 из 4
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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