2013-11-26 2 views
2

В Java, в соответствии с Java Language Specification 12.1.4 основной метод должен быть объявлен следующим образом:Почему только String [] args в java вместо Object [] args?

public static void main(String[] args){ 
    //code of program 
} 

С использованием String[] args мы можем получить аргументы командной строки. Иногда эти аргументы командной строки необходимо преобразовать в соответствующий тип. Предположим, если вы поставили любое число 123 в качестве аргумента, и вы хотите, чтобы преобразовать его в int то можно использовать один из следующих методов преобразования:

int n1=Integer.valueOf(args[0]); 
//or 
int n2=Integer.parseInt(args[0]); 

Но, если ява могли бы обеспечить использование в Objects[] args вместо String[] args затем мы можем легко конвертировать из одного типа в другой, для этого примера преобразования будет происходить следующим образом:

public static void main(Object[] args){ 
    int n1=(Integer)args[0]; 
} 

Я не получаю это, почему Java использовали String[] args и не Object[] args?

+4

Простой. Как передать объект через вашу командную строку? –

+0

Командная строка предоставляет строки. Как бы вы различали строку и целое число? Просто быть числовым значением недостаточно, чтобы считать его целым числом. –

+2

Ravi - Хорошо думать за пределами того, что мы делаем в настоящее время. FYI - Powershell/.NET/C#/Командлеты могут действительно сделать что-то вроде этого http://msdn.microsoft.com/en-us/library/ms714395%28v=vs.85%29.aspx http: //crazorsharp.blogspot .com/2009/12/PowerShell, как-командная строка-arguments.html – mikey

ответ

7

Java разработан с учетом переносимости, поэтому программы Java будут вызываться различными операционными средами. Если среда пропускает объекты Java до main, это приведет к слишком большим ограничениям для системы звонящего, потому что у этой системы будет задача «понять» вход и преобразовать ее в объекты Java.

Струны, с другой стороны, универсальны: все операционные среды имеют их. Поэтому спецификации Java требовали строки, зная, что ваша Java-программа сможет обрабатывать и понимать их лучше, чем внешняя среда.

2

всякий раз, когда вы читаете от Console по умолчанию String именно по этой причине они сделали это как String[] array.

, если вы используете:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
System.out.print("Enter String"); 
String str = br.readLine(); 

Строка переменной str по содержит строку, поскольку br.ReadLine() дает снабжать струной, тетивой и т.п.

2

Это просто потому, что арг пришел из-за пределов Яве с операционной системой, и как это не может создавать объекты Java, это может пройти только строки. Строки

Чтобы вызвать программу java с консоли, это будет примерно так:

c:\java MyProgram 123 

Невозможно узнать, что SO передает объект, это всего лишь строка.

1

Потому что вы не можете передать объект через аргумент командной строки. Вместо этого естественно интерпретировать переданные аргументы как Strings.

1

public static void main(String[] args) - основной метод, который выполняется при выполнении файла класса $java MyClass input1 input2.

1

Поскольку операционная система не передает переменные введенные аргументы в JVM. Если у вас есть Object[] args, JVM не может действительно вывести такие типы без операционной системы. Это также общий контракт (в Java, конечно) «стандартного» (например, предка C/C++) Main function.

1

Может быть, потому, что «String» - это массив последовательности символов, который принимает непрерывную память и может быть введен с использованием стандартной клавиатуры. В противном случае, как основной метод будет обрабатывать литье типов.

Смежные вопросы