Uzupełnienie podstaw

0
  1. Czy zmienna zainicjowana w parametrze metody jest już zmienną lokalną widzianą tylko w tej danej metodzie?
  2. Czy początek ciała metody zaczyna sie od klamry otwierającej czy już od deklaracji metody wraz z parametrami.

Takie uzupełniające szczegółowe pytania ale chciałbym to dokładnie wiedzieć. Pozdro

0
class KlasaA {
   public void deklaracjaMetody(String parametrMetody) {
     //ciało metody
   }
}
 

a jeśli chodzi o pkt. 1 to nie wiem czy w ogóle można inicjować parametr metody, można go overloadować: http://stackoverflow.com/questions/997482/does-java-support-default-parameter-values

0
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:

  1. 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)?
0

pytanie jest podchwytliwe jak dla mnie, bo parametr != zmienna lokalna
Kiedy przekazujesz parametr do metody, to tworzona jest zmienna parametru przy wywołaniu tej metody i jest ona tylko w "scopie" tej metody. Czyli jak ciało metody zostaje wykonane do końca to zmienne te są usuwane.
Lepiej, żeby inni się wypowiedzieli, bo to jest tricky ;)

Ale chyba o to chodzi: http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.3 podpunkt 4.

0

Ktoś inny sie wypowie?

0
public class Application
{
  public static void main(String[] args)
  {
    new Application();
  }

  Application() {
    String zmienna = "cos";  // inicjalizowany tutaj i widoczny tutaj
    someMethod(zmienna);
  }

  void someMethod(String string) {
      System.out.println(string); // parametr string jest widoczny tutaj
  }

  void otherMethod() {
     // parameter "string" nie jest tu widoczny
  }
}
  1. Przeważnie termin "ciało metody" odnosi się do kodu, który ona wykonuje. Więc tak, od klamry do klamry.

PS: W innych językach da się ustalać domyślne wartości parametrów

public function method($variable = 4)
{
    echo $variable;
}

I tutaj faktycznie ta ustalona wartość jest dostępna tylko w tej metodzie. To czy ten parametr to zmienna lokalna czy nie to kwestia sporna. Zachowują się w ten sam sposób, ale parametr to zawsze parametr.

0
  1. 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?

Tak :)

0

Wysarczyło tylko potwierdzic czy dobrze mysle, tak jak to zrobił Promar. Dzieki Promar. Temat wyczerpany do zamknięcia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1