IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Java. Проблема с классами. (https://www.imho.ws/showthread.php?t=91892)

Sam Dark 01.09.2005 18:59

Java. Проблема с классами.
 
Проблема в следующем: у класса reader не виден метод read.

Код:

public class reader
{
 
  public static Vector read(String fileName, String charsetName)
  {
    ...
  }

  public static Vector read(String fileName)
  {
    ...
  }
}


/7y3uK 01.09.2005 23:43

1. Не может быть! Как ты его пытаешься вызвать...
2. оформлять Java код таким образом - не культурно :) Классы нужно называть с большой буквы. Желательно чтобы имя класса, даже если он в пакете, не дублировало имени класса из стандартных пакеджей :contract: (это я про "reader")... :biggrin:
Код:

1)
public class MyFileReader  :biggrin: { 
   
    public static Vector read(String fileName, String charsetName) {
        return new Vector();
    }
}

2) из другого класса дергается

MyFileReader.read(fileName, encoding);

если нет, то проверь заимпортен ли соответсвующий пакет с этим классом...

Надеюсь ты не в нотпаде пишешь :)

Trotil 02.09.2005 00:05

В книге "Секреты программирования на Java" читаю буквально следующее:
Цитата:

Модификатор static позволяет сделать метод доступным даже в том случае, когда клас, к которому он принадлежит, не реализован. Методы, объявленные статическими, неявным образом используют также модификатор final - иными словами, переопределить статический метод невозможно.
Если действительно так, тогда понятно, почему код не работает. НО! Во всех других источниках этого не указано и следовательно с точки зрения синтаксиса все верно.

/7y3uK 02.09.2005 11:05

Я бы сказал, что понимать это нужно не совсем так :)

1) Когда вы пишете просто public класс, то в любом случае можете создать объект через new , т.к. у любого объекта есть дефолтный конструктор без параметров... ну и соответственно можете получить через экземпляр класса доступ ко всем public методам и филдам... Обычно такие классы, в которых лежат только паблик методы, называют x...xTools, но это несколько не укладывается в ООП, т.к. возвращает нас к процедурному программированию... Если необходимо использовать в нескольких классах одни и те же ститк файнал филды, то для этого обычно делают интерфейс, в котором они описываются, и имплементят в классы, в которых необходимо использовать одни и те же данные... Но это имеес тмысл, если таких классов больше чем 2 :)

2) Модификатор static подразумевает следующее: все статик филды будут существовать в единственном экзмпляре в рамках одного процесса (это очень грубо говоря), т.е. если в каком-то объекте есть статический филд static String s = "stroka", то соответственно можно не создавая объект получить ссылку на этот филд и работать с ним, т.о. он будет один и тот же для всех эеземпляров этого класса - в одном экземпляре поменяли значение - поменялся для всех - именно так обычно делают кэширование некоторых переменных... надо быть осторожным :) Что касается статических методов, то ту все тоже самое - метод можно дергать не создавая экземпляров класса... Но при этом никто! не запрещает его перекрыть у наследника... Ведь вызывается-то он через имя класса, а не через созданый объект...

3) Что касается модификатора final - необходимо понимать, что этот модификатор не позволяет изменить только ССЫЛКУ на объект, но отнюдь не блокирует для изменения содержимое этого объекта, к примеру содержимое public static final Map myMap = new HashMap(); всегда можно поменять - тут тоже необходимо быть осторожным и понимать что делаешь :)


Часовой пояс GMT +4, время: 06:17.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.