Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Для чего нужны квадратные скобки? |
Автор: korob2001 8.7.2004, 01:45 | ||||
Привет! Вот дошёл до первой программы в книге и сразу появился вопрос. Есть класс:
При создании метода класса public static main( String[] args ) { ..... }, я не совсем понял то, что выделино красным цветом. Точнее сказать недопонял. Насколько я понимаю: String[] - указывает что передаваемые аргументы в метод должны иметь тип String. args - указывает что методу по идее должны передаваться аргументы ( параметры ). Если я верно понимаю, отсюда 2 вопроса: 1. Что означают квадратные скобки после String? 2. Если мы указали что методу должны передаваться параметры ( args ), но ведь на самом деле мы ничего не передаём. Как это обьяснить? 3. В книге написано что, методы в Java это тоже что и функции в других языках программирования. Например в Perl я создаю туже функцию:
Так вот к чему я: если в приведённой Perl программе удалить ту строку, на которой я просил обострить внимание, то ничего не произойдёт. Другими словами, я не пойму где программе Java вызывается метод. Или программа она выполняется вся, без какого либо управления? Извините за такие глупые вопросы. Но я просто пытаюсь решать проблемы по мере их возникновения. Заранее благодарен, Денис. |
Автор: Domestic Cat 8.7.2004, 02:15 | ||||||||
Massiv.:
JVM schityvaet komandnye argumenty v jetot samyj massiv, skazhem pri zapuske java Test a bc cde args budet takim: args[0] = "a" args[1] = "bc" args[2] = "cde" dlja java Test args budet pustym
Znachit, plohaja kniga. Najdite knigu poluche, t.k. metod - jeto ne funkcija. Posmotrite na sajte Sun, tam horoshij tutorial: http://java.sun.com/docs/books/tutorial/index.html PS. sorry za translit, vremeni net. PPS. Zavtra mogu otvetit' popodrobnee, no "zavtra" oznachaet okolo 16.00 po Moskve |
Автор: korob2001 8.7.2004, 03:20 | ||||
Книга "Философия Java" 3-е издание ( Брюс Эккель ). Вроде нормальная, у меня пока только 2 книги по Java.
ОК. В принципе, первые два вопроса отпали, по ним всё понял. Если вас не затруднит напишите пояснее по поводу третьего вопроса. Спасибо. |
Автор: ElectricalStorm 8.7.2004, 09:40 |
Вам нужно сначала про ООП почитать ... так как Ява чистый ООП язык (почти ![]() Что мне кажется важно понять в начале: 1) Забудте про процедурно ориентированые языки думайте даже о самой ерунде как об объекте ... со своими свойствами (полями) и поведением (методами) 2) Думате о классе как о фабрике объектов 3) Научитесь выделять сущность |
Автор: DarkDS 8.7.2004, 13:02 | ||||||||
Не совсем так. В Яве для того чтобы вызвать метод нужно к нему обратится точно так же как и в перле и в других языках программирования. Но для того чтобы запустить программу нужно как то показать, откуда ей нужно работать. Так в паскале для этого есть основной блок бегин-енд, в сях есть основной метод маин и тд и тп. Так и в Яве для того чтобы указать что этот класс может запускатся как программа задается метод майн и при запуске его JVM вызывает именно этот метод. То есть при запуске программы из консоли (
А уж в этом методе могут быть созданы все остальные классы и вызваны их методы. Что к стати и делается (вызываются методы вывода в поток (в данном случае в консоль):
|
Автор: Domestic Cat 8.7.2004, 15:32 | ||||
Книга Эккеля очень хорошая (правда я говорю о "Thinking in Java", может перевод такоu? ); но тогда я не поuму ваших вопросов. Впервые в книге args[] встречается в главе 2 и сразу же обэсняется что [] обозначает массив. Pravda, в этоu же главе написано:
что требует пояснений. Метод может делать то же что и функция (например, решить систему уравнений); однако кроме того он может изменять состояние обьекта (или других обьектов), меняя их поля. Паскалевская функция такого принципиально делать не может. Поэтому забудьте о функциях, и думайте о методах как о неких "ручках" или "кнопках", через которые вы взаимодействуете с обектом. Функция - это нечто самодостаточное, вы можете, например, функцию "factorial (int n) {.....}" вставить в любую программу (в процедурных языках, таких как C); метод же неотделим от обекта также как и кнопка Reset неотделима от компьютера, то есть она то отделима, но тогда зачем она нужна ? (опустим static методы для простоты). Почитайте того же Еккеля внимательнее, не торопитесь; самое главное - освоить ООП (далее см. пост ElectricalStorm ![]() |
Автор: ovod 8.7.2004, 20:32 |
Есть ли электронный вариант вышеозначенного чтива на русском? Скоро поеду в Питер, куплю в мягкой обложке, но уже не терпится. Насчет доступа к полям объектов их дельфевой функции. Можно их менять, записывая новое значение прям в память (о способах обхода прямой записи в контекст чужого приложения многое уже написано и сказано). Хотя.. сам не делал, спорить не буду. Только ли пробелами можно разделять командные аргументы? Как сделать, чтоб например символом подчеркивания? |
Автор: Domestic Cat 8.7.2004, 22:27 | ||||||
Electrical Strom
Почему? 100% ООП язык. ovod
Ето к чему?
Только пробелами, иначе аргумент будет одноu строкоu. |
Автор: korob2001 10.7.2004, 01:34 |
Большое спасибо всем. Извиняюсь за исчезновение, сыну вчера исполнился год, был не в состоянии подойти к компу. ;) Вроде всё понял, правда - смутно. ОК послушаю вашего совета постараюсь не думать о процедурных языках. Перечитаю всё сначала. Ещё раз спасибо. |
Автор: redrick 12.7.2004, 07:43 |
рискну прокоментировать всё-таки про String[] : в Java, как кто-то сверху сказал почти всё - объекты, так вот String[] - это тоже объектный тип и квадратные скобки не более чем часть его имени. Для меня это тоже было открытием в своё время - после C и C++ квадратные скобки прочно ассоциируются с оператором или ещё чем-нибудь там если я тут написал таки фигню - исправьте плз |
Автор: Sun 12.7.2004, 11:09 |
Квадратные скобки указывают что это массив объектов типа String. Но в Java массив это чуть больше чем область памяти, хранящая указатели на объекты. Массив сам является объектом, у которого есть свои методы. Например у него есть метод length(), возвращающий колличество элементов массива. |
Автор: DarkDS 12.7.2004, 13:49 | ||||
Причем его можно и привести к объекту ![]()
|
Автор: korob2001 12.7.2004, 14:08 | ||
Лично у меня квадратные скобки асоциируются с массивом. ;) |
Автор: Domestic Cat 12.7.2004, 15:16 | ||||
Sun:
length не метод, а public поле; длина ряда массива находится так:
|
Автор: redrick 16.7.2004, 18:19 |
здесь часто идёт такая путаница с вектором (Vector) у которого как раз есть такой метод |
Автор: Domestic Cat 16.7.2004, 19:51 |
Скорее с методом класса String. |
Автор: redrick 16.7.2004, 23:39 |
эх, щас админы на флуд начнут ругаться =) |