2016-04-22 2 views
-3
public static int f(String input) { 

    public static Stack<Character> stack = new Stack<Character>(); 

     int n = 0; 

     for (int i = 0; i < input.length(); i++) { 

       if (input.charAt(i) == 'd') 
         stack.push('d'); 

       else if (input.charAt(i) == 'b') { 

         if (!stack.empty() && stack.pop() == 'd') n++; 
       } 
     } 

     return n; 
} 

я просто хочу знать значение статического ключевого слова в создании объекта ... просто вставил весь код здесьЧто делает статичность при создании объекта?

+4

ошибка синтаксиса? Вы не можете объявить локальную переменную static таким образом, она не будет компилироваться. – azurefrog

+1

Вы уверены, что не изменили эти первые две строки? – azurefrog

+2

Ключевое слово 'static' ничего не значит для * создания объекта *' Stack', даже если вы получили эту компиляцию кода, перевернув первые две строки. Это означает что-то в области поля 'stack', но не имеет никакого влияния на вызов' new Stack () '. – Andreas

ответ

0

Что все остальные сказали до сих пор, все верно, но я немного уточню ваш вопрос о том, что «значение статического ключевого слова в ob ject creation "есть.

Статические переменные сохраняются в течение всего жизненного цикла класса (так, по существу, с самого начала и до конца вашей программы). Но в вашем коде вы объявляете переменную стека внутри метода, так что вся переменная создается и уничтожается при каждом запуске этого метода. Поэтому на самом деле не имеет смысла давать ключевое слово static. Эти переменные предназначены для совместного использования между каждым экземпляром создаваемого вами класса. Поэтому вы должны создавать эту статическую переменную один раз, когда запускается ваша программа.

(Есть тонна ресурсов в другом месте объяснить, когда/где использовать статический)

Вот пара я нашел полезным при изучении:

+0

спасибо за ссылки !! – abhinav

0

Как @azurefrog говорит, что не будет работать - я предполагаю, что вы скопировали и наклеила линию

public static Stack<Character> stack = new Stack<Character>(); 

от верхней части вашего класса для иллюстрации. Если это так, вы нарушили свой пример.

Предполагая, что я прав, и это объявление изнутри вашего класса, а не внутри этого статического метода, тогда ответ на ваш вопрос будет состоять в том, что будет только один экземпляр переменной stack, независимо от числа экземпляров, которые вы создаете из класса, в котором он находится: т.е. все экземпляры, которые вы создаете для своего класса, будут видеть/содержать один и тот же экземпляр из stack, и в любом месте, где он адресован извне (действительный, учитывая, что он является общедоступным), должно быть ссылаясь на него как ClassName.stack, а не instanceName.stack

Смежные вопросы