powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Разъясните такой момент.........
12 сообщений из 12, страница 1 из 1
Разъясните такой момент.........
    #33981569
Фотография peter6636
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит есть бин StudentBean,в бине методы
Код: plaintext
1.
2.
3.
4.
5.
   public   static   void  setID( int  i){
       id=i;
   }
    public   static   int  getID(){
        return  id;
   }
.............................
Есть другой класс,в котором есть такое:
Код: plaintext
1.
2.
3.
4.
5.
6.
 
 Vector values= new  Vector();
 while (rs.next()){
 StudentBean studB= new  StudentBean();
                     studB.setID(rs.getInt( 1 ));
                     values.add(studB);
}
Далее я вывожу результат в консоль:
Код: plaintext
1.
2.
3.
 for ( int  i= 0 ;i<values.size();i++){
                     s=(StudentBean)values.elementAt(i);
                     System.out.println("ID="+s.getID());
                  }

В результате получаю все одинаковые id в консоли,после того как убрал в методах getID,setID приставку статик,все отлично,все айди разные.
Вот не могу немножко въехать,почему именно так.Что такое статик переменная и когда она инициализируется я понимаю,не могу понять,почему все айди были одинаковые,ведь каждый раз я вставлял разные
...
Рейтинг: 0 / 0
Разъясните такой момент.........
    #33981606
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скорее всего выводится последний цифр из тех, что возвращаются rs-ом, так?

static переменная общая для класса и всех его экземпляров. то есть меняя в одном объекте, автоматом меняете ее в другом. вот и все
...
Рейтинг: 0 / 0
Разъясните такой момент.........
    #33981640
OU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OU
Гость
авторЗначит есть бин StudentBean,в бине методы ...
в вашем примере у вас не бин. Mетоды бина должны быть методами обьекта а не класса.
авторВ результате получаю все одинаковые id в консоли
результат закономерный учитывая факт использования методов класса а не обьектов.
...
Рейтинг: 0 / 0
Разъясните такой момент.........
    #33981690
Фотография peter6636
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deadyскорее всего выводится последний цифр из тех, что возвращаются rs-ом, так?

static переменная общая для класса и всех его экземпляров. то есть меняя в одном объекте, автоматом меняете ее в другом. вот и все
спасибо
...
Рейтинг: 0 / 0
Разъясните такой момент.........
    #33981701
Фотография peter6636
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OU авторЗначит есть бин StudentBean,в бине методы ...
в вашем примере у вас не бин. Mетоды бина должны быть методами обьекта а не класса.
авторВ результате получаю все одинаковые id в консоли
результат закономерный учитывая факт использования методов класса а не обьектов.
но ведь обект это экземпляр класса который работает с методами этого класса,не могу понять вашу мысль,разъясните если не сложно
...
Рейтинг: 0 / 0
Разъясните такой момент.........
    #33981801
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень просто. Надо, во-первых, подучить основы ООП и понять разницу между методами класса и методами объекта. Подозреваю, кстати, что вы и пля id модификатор статик применяли, иначе компилятор по рукам надает.

Суть вот в чем. Есть статические методы, которые принадлежат именно классу. (Тут надо понимать, что класс это отдельная сущность). Работа с такими методами может вестись без создания экзмепляра класса, напрямую. То есть вы могли делать так:
Код: plaintext
1.
StudentBean.setID(StudentBean.getID());
Эти методы ничего не знают об объектах класса, которые как-бы в другом поле живут. Методы объекта создаются (грубо если, не грубо не знаю) при создание объекта класса. То есть когда вы делаете вызов оператора new. Методы объекта имеют доступ как к методам класса (static) так и к методам объекта (все, которые не static). Но, у класса статическое поле общее для всех объектов класса (и не только для них). Другими словами, это получается этакая глобальная переменная (если, конечно, у нее поле видимости public).

Классический пример использования полей static - это подсчет созданных объектов.
...
Рейтинг: 0 / 0
Разъясните такой момент.........
    #33981953
OU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OU
Гость
авторно ведь обект это экземпляр класса который работает с методами этого класса
ну и что, классы и екземпляры классов это разные веши. У вас физически сушествует (в пределах одной JVM)
всего один класс и N-ое число его екземпляров, каждии из которых может использовать переменные и методы самого класса.
авторМетоды объекта создаются (грубо если, не грубо не знаю) при создание объекта класса.методы не создаутся в принципе. Класс содержит описание метода либо имплементацию метода для себя и/или своих екземпяров.

2 peter6636:
по ходу, если вы хотите использовать методы/переменниые классов, то используите правильный синтаксис включающий имя самого класса а не его екземпяров:
MyClass.someMethod()
...
Рейтинг: 0 / 0
Разъясните такой момент.........
    #33982147
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
peter6636но ведь обект это экземпляр класса который работает с методами этого класса,не могу понять вашу мысль,разъясните если не сложно

static - это глобальная переменная для данного класса.

Совсем на пальцах:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
 public   class  StudentBean {
    /**
     * обычная переменная - поле класса
     */
     public   int  m_id1;
    /**
     * статическая переменная - глобальная для всех объектов
     */
     public   static   int  m_id2;

    /**
     * стандартный метод доступа для обычного поля
     * @return int
     */
     public   int  getId1() {
         return  m_id1;
    }

    /**
     * стандартный метод доступа для обычного поля
     * @param id1 int
     */
     public   void  setId1( int  id1) {
         this .m_id1 = id1;
    }

    /**
     * статический метод доступа для глобальной переменной
     * @param id2 int
     */
     public   static   void  setId2( int  id2) {
        m_id2 = id2;
    }

    /**
     * статический метод доступа для глобальной переменной
     * @return int
     */
     public   static   int  getId2() {
         return  m_id2;
    }
}

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
 public   class  StudentBeanStarter {
     public   static   void  main(String[] args) {
        // Статический метод можно вызывать без создания экземпляра класса
        StudentBean.setId2( 1 );
        // нельзя так поступать с нестатическим методом
        // StudentBean.setId1(1); // тут будет ошибка
        System.out.println("статическое поле содержит число "+StudentBean.getId2());
        
        StudentBean bean1 =  new  StudentBean();
        StudentBean bean2 =  new  StudentBean();
        
        // поскольку id1 объявлено нестатическим - у разных объектов значение будет свое
        bean1.setId1( 1 );
        bean2.setId1( 2 );
        System.out.println("BEAN1.ID1 = "+bean1.getId1());
        System.out.println("BEAN2.ID1 = "+bean2.getId1());
        
        // id2 объявлено статическим, и является общим длля всех экземпляров
        bean1.setId2( 4 );
        // Кстати, обрати внимание, статические методы можно вызывать не только через класс, но и через объекты,
        // но суть от этого не меняется. bean1.getId2() и bean2.getId2() означают StudentBean.getId2()
        System.out.println("BEAN1.ID2 = "+bean1.getId2());
        System.out.println("BEAN2.ID2 = "+bean2.getId2());
        
        bean2.setId2( 3 );
        System.out.println("BEAN1.ID2 = "+bean1.getId2());
        System.out.println("BEAN2.ID2 = "+bean2.getId2());
    }
}
...
Рейтинг: 0 / 0
Разъясните такой момент.........
    #33982168
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и собственно результат:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
статическое поле содержит число 1
BEAN1.ID1 = 1
BEAN2.ID1 = 2
BEAN1.ID2 = 4
BEAN2.ID2 = 4
BEAN1.ID2 = 3
BEAN2.ID2 = 3


=====================================
Страну, в которой все ходят на бровях,
на колени не поставишь...
=====================================
...
Рейтинг: 0 / 0
Разъясните такой момент.........
    #33982225
Фотография peter6636
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonidvОчень просто. Надо, во-первых, подучить основы ООП и понять разницу между методами класса и методами объекта. Подозреваю, кстати, что вы и пля id модификатор статик применяли, иначе компилятор по рукам надает.

Суть вот в чем. Есть статические методы, которые принадлежат именно классу. (Тут надо понимать, что класс это отдельная сущность). Работа с такими методами может вестись без создания экзмепляра класса, напрямую. То есть вы могли делать так:
Код: plaintext
1.
StudentBean.setID(StudentBean.getID());
Эти методы ничего не знают об объектах класса, которые как-бы в другом поле живут. Методы объекта создаются (грубо если, не грубо не знаю) при создание объекта класса. То есть когда вы делаете вызов оператора new. Методы объекта имеют доступ как к методам класса (static) так и к методам объекта (все, которые не static). Но, у класса статическое поле общее для всех объектов класса (и не только для них). Другими словами, это получается этакая глобальная переменная (если, конечно, у нее поле видимости public).

Классический пример использования полей static - это подсчет созданных объектов.
ничего нового ты мне не сказал дружок
...
Рейтинг: 0 / 0
Разъясните такой момент.........
    #33982572
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, я вам не "дружок". А во-вторых, очень странно. Люди которые это знают, не задают таких вопросов.
...
Рейтинг: 0 / 0
Разъясните такой момент.........
    #33982958
Фотография peter6636
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonidvВо-первых, я вам не "дружок". А во-вторых, очень странно. Люди которые это знают, не задают таких вопросов.
ты что обиделся на меня? тогда извини
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Разъясните такой момент.........
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]