Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Разъясните такой момент......... / 12 сообщений из 12, страница 1 из 1
12.09.2006, 16:28
    #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
12.09.2006, 16:35
    #33981606
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разъясните такой момент.........
скорее всего выводится последний цифр из тех, что возвращаются rs-ом, так?

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

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

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

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

2 peter6636:
по ходу, если вы хотите использовать методы/переменниые классов, то используите правильный синтаксис включающий имя самого класса а не его екземпяров:
MyClass.someMethod()
...
Рейтинг: 0 / 0
12.09.2006, 18:49
    #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
12.09.2006, 18:54
    #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
12.09.2006, 19:13
    #33982225
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разъясните такой момент.........
LeonidvОчень просто. Надо, во-первых, подучить основы ООП и понять разницу между методами класса и методами объекта. Подозреваю, кстати, что вы и пля id модификатор статик применяли, иначе компилятор по рукам надает.

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

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


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