powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопросы новичка.
8 сообщений из 83, страница 4 из 4
Вопросы новичка.
    #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
8 сообщений из 83, страница 4 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопросы новичка.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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