Определение длины массива в основном методе - PullRequest
0 голосов
/ 12 июня 2018

В Java, если длина массива определяется в время компиляции , как определяется длина аргумента args в

public static void main(String[] args) { ... }

в время выполнения ?

Ответы [ 4 ]

0 голосов
/ 12 июня 2018

Имя массива по сути является адресом массива.Вы можете объявить массив String[] args, но он не будет инициализирован, пока вы не укажете его на адрес или тип String[] args = new String[N].Теперь, когда в параметре есть массив, он не инициализируется, так как ни на что не указывает.Но когда вы передаете массив в качестве аргумента функции, такой как main(arguments), String [] args получает адрес массива аргументов во время выполнения, а затем запускается основная функция.

Когда вы запускаетеЗапрограммировав и введя некоторые данные, Java принимает входные данные в виде массива String, где каждый аргумент разделяется пробелом на входе, а затем передает его основной функции в программе Java.Таким образом, строковый массив args [] не инициализируется в начале, а «получает» адрес строкового массива аргументов, который был бы взят во время выполнения в качестве входных данных.

Надеюсь, это поможет!

0 голосов
/ 12 июня 2018

Длина массива не определяется во время компиляции, она определяется во время выполнения.Обратите внимание:

String[] makeMeAStringArray(int size) {
    return new String[size];
}

main массив аргументов только что создан с похожим кодом в инструменте java.

Пример ( живая копия ):

class Example
{
    static String[] makeMeAStringArray(int size) {
        return new String[size];
    }
    public static void main (String[] args) throws java.lang.Exception
    {
        int n = (int)(Math.random() * 100);
        System.out.println("n = " + n);
        String[] a = makeMeAStringArray(n);
        System.out.println("a.length = " + a.length);
    }
}
0 голосов
/ 12 июня 2018

Когда вы создаете массив, он имеет фиксированную длину.Тем не менее, он не должен быть постоянным во время компиляции.Это допустимо, например:

for (int i = 0; i < 10; ++i)
{
    int[] arr = new int[i]; 
}

При передаче массива методу:

public void foo(int[] arr) { //...

вы не указываете размер.Это просто должен быть массив.Длина не определяется сигнатурой метода.

Таким образом, комбинация этих двух вещей означает, что нет ничего особенного в том, как объявляется метод main.

0 голосов
/ 12 июня 2018

String [] args - это аргумент, который принимает метод main.Это может быть любой длины.Вам просто нужно определить длину массива, когда вы его объявляете.И даже тогда это не должно быть буквальным числом.Это просто необходимо фиксированной длины.

String[] s = new String[variable]

Переменная variable должна быть целым числом и может иметь любое значение.

...