Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: static varible в функции ; redimention of arrays  (Прочитано 12132 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« : 10-01-2005 14:11 » 

Помогите пожалуйста!

1)
В C++ можно сделать переменные, которые сушествуют только в функции, но при этом сохраняют свое значение :

void test(const int nDiff)
{
    static int nTest = 0;
    nTest += nDiff;
}

А как это сделать в яве???


2)
Далее : есть массив, причем изначально неизвестно, сколко элементов он будет содержать. В VB есть Redim, в C++ - malloc/realloc. А как это сделать в яве???
Записан

холоднокровней, Маня, Ви не на работе
---------------------------------------
четкое определение сущности бытия:
- А мы в прошлом или в будущем?- спросила Алиса.
- Мы в жопе, - ответил кролик.
- А "жопа" - это настоящее? - спросила Алиса.
- А "жопа" - это у нас символ вечности.
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 10-01-2005 14:52 » 

1.  Статический метод класса.
Код:
 public class C {
    protected static int nTest = 0;

    public void test(int nDiff) { nTest += nDiff; }
}

2.  В яве есть класс java.util.Vector
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #2 : 11-01-2005 08:34 » 

npak,

во-первых, огромное спасибо!
По поводу вопроса 1): сделать эту переменную членом класса - не очень красиво, приятнее, если она является локальной переменной в функции. А вот как это сделать? Или это дохлый номер? Ага
Записан

холоднокровней, Маня, Ви не на работе
---------------------------------------
четкое определение сущности бытия:
- А мы в прошлом или в будущем?- спросила Алиса.
- Мы в жопе, - ответил кролик.
- А "жопа" - это настоящее? - спросила Алиса.
- А "жопа" - это у нас символ вечности.
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 11-01-2005 12:46 » 

Malaja

в Java нет отдельных функций.  Всякая функция может быть только методом некоторого класса.

Если ты хочешь, чтобы с твоей функцией были ассоциированы некоторые данные, и никто и никогда не смог бы до этих данных добраться, то сделай так:
Код:
public final class MyFunc {
   
    private static int nTest = 0;
       
    private MyFunc() {
    }
   
    public static void myFunc(final int nDiff) {
        nTest += nDiff;
    }
}

final class -- это запрещение наследования, никто не сможет поменять поведение через наследование.
private static int nTest -- никто извне класса не сможет изменить значение поля
private MyFunc() -- для полноты ещё запрет на создание объектов данного класса, что бы не замусоривать память объектами, так как используются только статические методы.
public static void myFunc(final int nDiff) -- статическая функция, к которой может обратиться метод любого класса. final int это тоже самое, что const int в С++

Обращение к функции будет выглядеть так:
Код:
MyFunc.myFunc(diff);
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Serega
Гость
« Ответ #4 : 11-01-2005 12:59 » 

Если она локальная для функции то зачем её делать статической ?
А если значение должно сохраняться между вызовами, то она уже не локальная т.к. отвечает за логику работы всего класса а не отдельной функции
Записан
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #5 : 11-01-2005 16:22 » 

npak,

спасибо за инфу!

Serega,

Ты понимаешь, эта переменная все-таки больше локальная, чем глобальная, поэтому я и хотела ее сделать "неумирающей" толко щ одной единственной функции, а не во всем классе, т.к. по сути своей она не имеет никакого серьезного смысла, это просто вспомогательный трюк. Я всегда стараюсь делат как можно меньше классовых переменных, а все вспомогательные либо передавать как параметры, либо делать их в функции обычними static.

Похоже, что в яве такой возможности нет.
Записан

холоднокровней, Маня, Ви не на работе
---------------------------------------
четкое определение сущности бытия:
- А мы в прошлом или в будущем?- спросила Алиса.
- Мы в жопе, - ответил кролик.
- А "жопа" - это настоящее? - спросила Алиса.
- А "жопа" - это у нас символ вечности.
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 12-01-2005 07:24 » 

Malaja,

Как справедливо заметил Серёга, статическая переменная влияет на поведение всего класса, поэтому разработчики Java (и C#, кстати, тоже) такие переменные вынесли в класс.

Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #7 : 12-01-2005 07:31 » 

npak,

все ясно! Просто я попыталась поыти в Java с C++ - ным самоваром! А это всегда наказуемо! Ага

Еще раз огромное спасибо за информацию и извинения за глупый вопрос!
Записан

холоднокровней, Маня, Ви не на работе
---------------------------------------
четкое определение сущности бытия:
- А мы в прошлом или в будущем?- спросила Алиса.
- Мы в жопе, - ответил кролик.
- А "жопа" - это настоящее? - спросила Алиса.
- А "жопа" - это у нас символ вечности.
.
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 12-01-2005 19:51 » 

э! а про статические переменные внутри методов?!!! Они есть и работают так же!
Записан
Serega
Гость
« Ответ #9 : 12-01-2005 22:20 » 

э! а про статические переменные внутри методов?!!! Они есть и работают так же!
это гон, так делать нельзя !
« Последнее редактирование: 13-01-2005 07:49 от Serega » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 12-05-2005 18:17 » 

Вот экспериментальная попытка скомпилить класс с статической переменной в ф-ии:
Цитата
Illegal modifier `static'. Only `final' was expected here.
Да и в описании языка написано что так нельзя...
« Последнее редактирование: 20-12-2007 20:41 от Алексей1153++ » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines