package innerClass;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.Timer;
/**
* Ten program demonstruje sposób użycia klas wewnętrznych.
* @version 1.10 2004-02-27
* @author Cay Horstmann
*/
public class InnerClassTest
{
public static void main(String[] args)
{
TalkingClock clock = new TalkingClock(1000, true);
clock.start();
// Niech program działa, dopóki użytkownik nie wciśnie przycisku OK.
JOptionPane.showMessageDialog(null, "Zamknąć program?");
System.exit(0);
}
}
/**
* Zegar drukujący informacje o czasie w równych odstępach czasu.
*/
class TalkingClock
{
private int interval;
private boolean beep;
/**
* Tworzy obiekt TalkingClock.
* @param interval odstęp czasu pomiędzy kolejnymi komunikatami (w milisekundach)
* @param beep wartość true oznacza, że dźwięk ma być odtwarzany
*/
public TalkingClock(int interval, boolean beep)
{
this.interval = interval;
this.beep = beep;
}
/**
* Włączanie zegara.
*/
public void start()
{
ActionListener listener = new TimePrinter();
Timer t = new Timer(interval, listener);
t.start();
}
public class TimePrinter implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
Date now = new Date();
System.out.println("Kiedy usłyszysz dźwięk, będzie godzina " + now);
if (beep) Toolkit.getDefaultToolkit().beep();
}
}
}
package anonymousInnerClass;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.Timer;
/**
* Ten program demonstruje zastosowanie anonimowych klas wewnętrznych.
* @version 1.10 2004-02-27
* @author Cay Horstmann
*/
public class AnonymousInnerClassTest
{
public static void main(String[] args)
{
TalkingClock clock = new TalkingClock();
clock.start(1000, true);
// Niech program działa, dopóki użytkownik nie wciśnie przycisku OK.
JOptionPane.showMessageDialog(null, "Zamknąć program?");
System.exit(0);
}
}
/**
* Zegar drukujący informacje o czasie w równych odstępach czasu.
*/
class TalkingClock
{
/**
* Tworzy obiekt TalkingClock.
* @param interval odstęp czasu pomiędzy kolejnymi komunikatami (w milisekundach)
* @param beep wartość true oznacza, że dźwięk ma być odtwarzany
*/
public void start(int interval, final boolean beep) // tu !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
{
ActionListener listener = new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
Date now = new Date();
System.out.println("Kiedy usłyszysz dźwięk, będzie godzina " + now);
if (beep) Toolkit.getDefaultToolkit().beep();
}
};
Timer t = new Timer(interval, listener);
t.start();
}
}
Widzicie różnice między kodami. W drugim kodzie deklaracja zmiennych int interval, final boolean beep jest w metodzie "start"
a inicjacja jest w momencie wywołania metody i podania wartości parametrów.
Sory wcześniej w pyt.1. źle napisałem miałem na myśli deklaracje. Poprawiam pyt.1 które nadal jest aktualne:
- Czy zmienna zadeklarowana w parametrze metody (a inicjowana w momencie podania wartości do metody w momencie jej wywoływania) jest już zmienną lokalną (widzianą tylko w tej danej metodzie)?