2013-10-14 3 views
1
public class Document1 { 
    public static void main(String[] args) { 
    String i = "A"; 
    eg(); 
    } 

    public static void eg(){ 
     System.out.println(" " + i); 
    } 
} 

Я не понимаю, почему это не работает.Доступ к другим переменным метода в java?

+2

Зачем ожидать, что это сработает? –

+0

Переменная i недоступна для метода eg(), поскольку она не входит в область видимости. Вы должны прочитать немного больше о переменных, методах и их объеме. – Alex

+13

Если у вас есть бутылка виски в вашем автомобиле, вы можете выпить ее в своей комнате? Нет. Если у вас нет «getter», который приносит его вам из автомобиля: D – Maroun

ответ

4

scope

Вы получаете ошибку компилятора в приведенной ниже способом.

public static void eg(){ 
     System.out.println(" " + i); 
    } 

Потому что i является локальным переменным основным методом. Вы не можете получить доступ к другим методам.

Что вы можете сделать, передайте эту переменную туда, где хотите.

public static void main(String[] args) { 
    String i = "A"; 
    eg(i); 
    } 

    public static void eg(String param){ 
     System.out.println(" " + param); 
    } 
+0

thank youu, извините, это очень простой вопрос. Я новичок в java ... и программировании вообще ... – abarnybox

1

Вы должны пройти i в качестве аргумента метода eg().

В коде i это локальная переменная в основной метод. Поэтому к нему не может быть применен ваш метод eg().

Try:

public static void main(String[] args) { 
    String i = "A"; 
    eg(i); 
    } 
0

Поскольку eg() метод не знает о переменной i. Его только в рамках метода main(). Вам нужно либо передать его методу eg(), либо сделать его переменной экземпляра (в данном случае статической переменной).

public static void main(String[] args) { 
    String i = "A"; 
    eg(i); 
} 

public static void eg(String i){ 
    System.out.println(" " + i); 
} 
0

Вы не можете получить доступ к String i из вашей функции eg(), потому что он был объявлен в рамках main. Вы можете объявить i в глобальной области, поставив String i над вашей основной функцией. Или передать его в качестве параметра для вашей функции, такие как:

public static void eg(String i){ 

и изменить вызов функции:

eg(i); 
0

Это вопрос из области видимости. Ваша функция eg() не может «видеть» переменную i, потому что она не находится в ее представлении. Если, однако, вы сделали следующее:

public class Document1 { 
    String i = "A"; 

    public static void main(String[] args) { 

     eg(); 
    } 

    public static void eg(){ 
     System.out.println(" " + i); 
    } 
} 

Тогда это будет работать, потому что теперь область переменных является файл всего класса, а не только основной метод.

2

Потому что i существует только в основном объеме. вы должны пройти i внутри eg функция, как это eg(String param).

1

Это то, что известно как вопрос scope. scope - это область кода, в которой видна переменная.Например:

for(int x = 0; x < 10; x++) 
{ 
    // x can only be used inside this loop. 
} 

Другой пример, если вы объявить локальную переменную внутри метода:

private void doSomething() 
{ 
    String value = "this can only be used inside doSomething()"; 
} 

Here является довольно полезным ссылка объясняя концепцию.

Для вашей проблемы вы просто объявили переменную внутри метода. Вы должны сделать это параметризованный метод:

public void eg(String i) 
{ 
    // Your code as normal. 
} 
0

Это все делать с переменной сферы - «объем», что означает, где переменная доступна.

В вашем коде i является «локальной переменной», которая имеет область действия только в пределах метода, который объявлен (и фактически только после это объявлено). Вот почему другой метод не может «видеть» его.

Параметры методов также рассматриваются как локальные переменные.

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

После этого у вас есть static переменные, объем которых есть каждый экземпляр - всего один экземпляр для каждого класса, в котором он определен.


Чтобы «исправить» ваш код, вы можете:

  • передать переменную в качестве параметра метода eg()
  • создать static переменную, которая будет объявлена ​​вне метода (ов)
  • потому что ваши методы статичны, переменная экземпляра не помогла бы, но работала бы, если бы вы создали методы методов методов (нестатические) и создали экземпляр вашего класса
Смежные вопросы