Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Для чего нужны квадратные скобки? 
:(
    Опции темы
korob2001
Дата 8.7.2004, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 1
Всего: 61



Привет!
Вот дошёл до первой программы в книге и сразу появился вопрос. Есть класс:
Код

// HelloDate.java
import java.util.*;

public class HelloDate {
        public static void main( String[] args ) {
                 System.out.println("Hello! The time now: ");
                 System.out.println( new Date() );
       }
}

При создании метода класса public static main( String[] args ) { ..... }, я не совсем понял то, что выделино красным цветом. Точнее сказать недопонял.
Насколько я понимаю:
String[] - указывает что передаваемые аргументы в метод должны иметь тип String.
args - указывает что методу по идее должны передаваться аргументы ( параметры ).
Если я верно понимаю, отсюда 2 вопроса:
1. Что означают квадратные скобки после String?
2. Если мы указали что методу должны передаваться параметры ( args ), но ведь на самом деле мы ничего не передаём. Как это обьяснить?
3. В книге написано что, методы в Java это тоже что и функции в других языках программирования. Например в Perl я создаю туже функцию:
Код

#!/usr/bin/perl -w
use strict;
sub HelloDate {
     print "Hello! The time now:\n";
     print scalar localtime;
}
HelloDate; # Внимание! Вызов функции.

Так вот к чему я: если в приведённой Perl программе удалить ту строку, на которой я просил обострить внимание, то ничего не произойдёт. Другими словами, я не пойму где программе Java вызывается метод. Или программа она выполняется вся, без какого либо управления?
Извините за такие глупые вопросы. Но я просто пытаюсь решать проблемы по мере их возникновения.

Заранее благодарен,
Денис.

Это сообщение отредактировал(а) korob2001 - 8.7.2004, 01:50


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Domestic Cat
Дата 8.7.2004, 02:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Цитата
1. Что означают квадратные скобки после String?


Massiv.:
Код

String[] array = new String[3];
String array[] = new String[] {"Java", "the", "best"};

Цитата
2. Если мы указали что методу должны передаваться параметры ( args ), но ведь на самом деле мы ничего не передаём. Как это обьяснить?


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
Цитата
В книге написано что, методы в Java это тоже что и функции в других языках программирования.


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

Это сообщение отредактировал(а) Domestic Cat - 8.7.2004, 02:19


--------------------

PM   Вверх
korob2001
Дата 8.7.2004, 03:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 1
Всего: 61



Цитата

Znachit, plohaja kniga. Najdite knigu poluche, t.k. metod - jeto ne funkcija.

Книга "Философия Java" 3-е издание ( Брюс Эккель ). Вроде нормальная, у меня пока только 2 книги по Java.
Цитата

Zavtra mogu otvetit' popodrobnee, no "zavtra" oznachaet okolo 16.00 po Moskve

ОК. В принципе, первые два вопроса отпали, по ним всё понял. Если вас не затруднит напишите пояснее по поводу третьего вопроса.
Спасибо.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
ElectricalStorm
Дата 8.7.2004, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 547
Регистрация: 22.1.2004

Репутация: 5
Всего: 9



Вам нужно сначала про ООП почитать ... так как Ява чистый ООП язык (почти smile.gif ) когда поймете все принцыпы ООП тогда и Ява легко пойдет ....

Что мне кажется важно понять в начале:

1) Забудте про процедурно ориентированые языки думайте даже о самой ерунде как об объекте ...
со своими свойствами (полями) и поведением (методами)

2) Думате о классе как о фабрике объектов

3) Научитесь выделять сущность





--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
DarkDS
Дата 8.7.2004, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

Репутация: 11
Всего: 16



Цитата(korob2001 @ 8.7.2004, 01:45)
Код

#!/usr/bin/perl -w
use strict;
sub HelloDate {
     print "Hello! The time now:\n";
     print scalar localtime;
}
HelloDate; # Внимание! Вызов функции.

Так вот к чему я: если в приведённой Perl программе удалить ту строку, на которой я просил обострить внимание, то ничего не произойдёт. Другими словами, я не пойму где программе Java вызывается метод. Или программа она выполняется вся, без какого либо управления?

Не совсем так.
В Яве для того чтобы вызвать метод нужно к нему обратится точно так же как и в перле и в других языках программирования.
Но для того чтобы запустить программу нужно как то показать, откуда ей нужно работать. Так в паскале для этого есть основной блок бегин-енд, в сях есть основной метод маин и тд и тп. Так и в Яве для того чтобы указать что этот класс может запускатся как программа задается метод майн и при запуске его JVM вызывает именно этот метод. То есть при запуске программы из консоли (
Код
java HelloDate
) будет вызван метод майн того класса, который указан (в примере класс HelloDate)
А уж в этом методе могут быть созданы все остальные классы и вызваны их методы.
Что к стати и делается (вызываются методы вывода в поток (в данном случае в консоль):
Код

                System.out.println("Hello! The time now: ");
                System.out.println( new Date() );
)
PM MAIL   Вверх
Domestic Cat
Дата 8.7.2004, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Цитата
Книга "Философия Ява" 3-е издание ( Брюс Эккель ). Вроде нормальная, у меня пока только 2 книги по Ява.


Книга Эккеля очень хорошая (правда я говорю о "Thinking in Java", может перевод такоu? ); но тогда я не поuму ваших вопросов. Впервые в книге args[] встречается в главе 2 и сразу же обэсняется что [] обозначает массив. Pravda, в этоu же главе написано:

Цитата
In many languages (like C and C++), the term function is used to describe a named subroutine. The term that is more commonly used in Java is method, as in “a way to do something.” If you want, you can continue thinking in terms of functions. It’s really only a syntactic difference, but this book follows the common Java usage of the term “method.”


что требует пояснений. Метод может делать то же что и функция (например, решить систему
уравнений); однако кроме того он может изменять состояние обьекта (или других обьектов), меняя их поля. Паскалевская функция такого принципиально делать не может. Поэтому забудьте о
функциях, и думайте о методах как о неких "ручках" или "кнопках", через которые вы взаимодействуете с обектом. Функция - это нечто самодостаточное, вы можете, например, функцию "factorial (int n) {.....}" вставить в любую программу (в процедурных языках, таких как C); метод же неотделим от обекта также как и кнопка Reset неотделима от компьютера, то есть она то отделима, но тогда зачем она нужна ? (опустим static методы для простоты).

Почитайте того же Еккеля внимательнее, не торопитесь; самое главное - освоить
ООП (далее см. пост ElectricalStorm smile.gif)


--------------------

PM   Вверх
ovod
Дата 8.7.2004, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 5.6.2004

Репутация: нет
Всего: 1



Есть ли электронный вариант вышеозначенного чтива на русском? Скоро поеду в Питер, куплю в мягкой обложке, но уже не терпится.

Насчет доступа к полям объектов их дельфевой функции. Можно их менять, записывая новое значение прям в память (о способах обхода прямой записи в контекст чужого приложения многое уже написано и сказано). Хотя.. сам не делал, спорить не буду.

Только ли пробелами можно разделять командные аргументы? Как сделать, чтоб например символом подчеркивания?
PM MAIL   Вверх
Domestic Cat
Дата 8.7.2004, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Electrical Strom
Цитата
так как Ява чистый ООП язык (почти  )


Почему? 100% ООП язык.

ovod
Цитата
Насчет доступа к полям объектов их дельфевой функции. Можно их менять, записывая новое значение прям в память (о способах обхода прямой записи в контекст чужого приложения многое уже написано и сказано). Хотя.. сам не делал, спорить не буду.

Ето к чему?

Цитата
Только ли пробелами можно разделять командные аргументы? Как сделать, чтоб например символом подчеркивания?


Только пробелами, иначе аргумент будет одноu строкоu.

Это сообщение отредактировал(а) Domestic Cat - 8.7.2004, 22:28


--------------------

PM   Вверх
korob2001
Дата 10.7.2004, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 1
Всего: 61



Большое спасибо всем.
Извиняюсь за исчезновение, сыну вчера исполнился год, был не в состоянии подойти к компу. ;)
Вроде всё понял, правда - смутно.
ОК послушаю вашего совета постараюсь не думать о процедурных языках. Перечитаю всё сначала.
Ещё раз спасибо.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
redrick
Дата 12.7.2004, 07:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 547
Регистрация: 7.1.2004
Где: Москва

Репутация: 3
Всего: 5



рискну прокоментировать всё-таки про String[] :
в Java, как кто-то сверху сказал почти всё - объекты, так вот String[] - это тоже объектный тип и квадратные скобки не более чем часть его имени. Для меня это тоже было открытием в своё время - после C и C++ квадратные скобки прочно ассоциируются с оператором или ещё чем-нибудь там

если я тут написал таки фигню - исправьте плз


--------------------
Имею Мнение Хрен Оспоришь   
PM MAIL ICQ   Вверх
Sun
Дата 12.7.2004, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Account removed
***


Профиль
Группа: Экс. модератор
Сообщений: 1611
Регистрация: 14.8.2002

Репутация: 8
Всего: 48



Квадратные скобки указывают что это массив объектов типа String. Но в Java массив это чуть больше чем область памяти, хранящая указатели на объекты. Массив сам является объектом, у которого есть свои методы. Например у него есть метод length(), возвращающий колличество элементов массива.


--------------------
Account removed
PM MAIL   Вверх
DarkDS
Дата 12.7.2004, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

Репутация: 11
Всего: 16



Цитата(Sun @ 12.7.2004, 11:09)
Массив сам является объектом, у которого есть свои методы.

Причем его можно и привести к объекту smile.gif
Код
String[] s = new String[10];
Object o = (Object)s

PM MAIL   Вверх
korob2001
Дата 12.7.2004, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 1
Всего: 61



Цитата

Для меня это тоже было открытием в своё время - после C и C++ квадратные скобки прочно ассоциируются с оператором или ещё чем-нибудь там

Лично у меня квадратные скобки асоциируются с массивом. ;)


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Domestic Cat
Дата 12.7.2004, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Sun:
Цитата
Квадратные скобки указывают что это массив объектов типа String. Но в Java массив это чуть больше чем область памяти, хранящая указатели на объекты. Массив сам является объектом, у которого есть свои методы. Например у него есть метод length(), возвращающий колличество элементов массива.


length не метод, а public поле; длина ряда массива находится так:

Код

String[] array[] = new String[5][6];
int n1 = array.length;
int n2 = array[0].length;



--------------------

PM   Вверх
redrick
Дата 16.7.2004, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 547
Регистрация: 7.1.2004
Где: Москва

Репутация: 3
Всего: 5



здесь часто идёт такая путаница с вектором (Vector) у которого как раз есть такой метод


--------------------
Имею Мнение Хрен Оспоришь   
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0898 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.