Массивы в Java — коротко и понятно

Массивы в отличие от элементарных типов byte, int, float относятся к ссылочным. Это значит, что вы оперируете не самим массивом, а указателем на него. Так запись

int [] a;

не обявляет массив массив, а создает именно указатель на целочисленный массив. Для того чтобы воспользоваться самим массивом его надо сначала создать с помошью ключевого слова new (которое кстати, используется для создания не только массивов но и обектов) например вот так:

int [] a = new int[3];

В результате выполнения этой операции мы создаем массив из 3 переменных типа int. При этом нумерация переменых начинается с нуля. Для того чтобы получить самое первое значение мы должны использовать запись:

a[0]

а для того чтобы получить последний элемент из массива

a[2]

Элементы в массиве могут быть любого типа, не только элементарного, но и ссылочного. Можно так же указать начальные значения для элементов массива вручную при его создании:

int [] a = {1,2,3};

Для создания двумерного массива используется такая конструкция:

int [][] a;

тогда обращаемся к элементу массива мы так:

a[0][0]

Фактически такой двумерный массив является просто массивом массивов и этим тоже можно пользоваться 🙂

Ну вот, если ничего не забыл, то самое основное чем можно пользоваться указал.

Вам понравилось? Было полезно? Поделитесь!

Опубликовать в Facebook
Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Яндекс
Запись опубликована в рубрике Java основы языка, Новичку с метками , , , , . Добавьте в закладки постоянную ссылку.

15 комментариев на «Массивы в Java — коротко и понятно»

  1. Александр говорит:

    я так понял если я не создам массив при помощи ключевого слова new, то компилятор выдаст ошибку, когда я буду заносить в массив какое-нибудь значение.
    Например:
    int [] a;
    a[0] = 1;
    и ещё, нельзя сделать так?
    int [3] a;
    чтобы было сразу создан массив из 4 ячеек (0,1,2,3)?

    • davidmd говорит:

      Когда вы объявляете массив таким вот образом:
      int [] arr; Вы фактически не создаете объекта. Вы просто объявляете переменную. Можно считать что с ней не связан никакой объект пока вы не напишите
      arr=new int[3] А значит, компилятор действительно выбросит ошибку. Он знает что есть переменная a но не знает какой объект с ней связан. А после использования new к переменной привязывается новый объект (Массив ведь тоже объект в Java!). Отсюда же вытекает и ответ на ваш второй вопрос. Поскольку этап объявления переменной и этап ее инициализации вовсе не одно и то же, то так делать нельзя.

  2. Virus говорит:

    ключевое слово new создает экземпляр классоа, а java на 99% состоит из этих самых классов. Исключением являются только примитивные типы (int, byte, short, char, long, float, boolean, double). Даже String которые мы можем объявить без ключевого слова new является объектом. (example: String s = «some text»; )

    • davidmd говорит:

      Ага, о чем я и говорю!
      Кстати, Астемир, тебе Макаренко звонила? Говорила на тему проекта?

  3. Virus говорит:

    Дыа :). Все ок. Я с вами 🙂

  4. Virus говорит:

    Я на моб тебе скинул. Я мыло потерял

  5. AVL говорит:

    А в чем разница между
    int [] a
    и
    int a []
    ?

    • davidmd говорит:

      Я честно говоря никогда не задумывался 🙂 Но вроде какой-то особой разницы нет. По крайней мере, присваивать друг другу можно

  6. Fimka говорит:

    Это, скорее всего, создатели придумали, чтобы переходить на Java было легко. Ведь в одном языке с одной стороны ставят, в другом с другой

  7. Сергей говорит:

    Если не трудно ответьте пожалуйста на вопрос. 🙂
    В данной программе
    public class VarArgs {
    public static void vaTest (int…v) {
    System.out.print(«Количество аргументов: «+ v.length+ » Содержимое: «);
    for (int x:v)
    System.out.print(x+ «; «);
    System.out.println();
    }
    public static void main (String args []) {
    vaTest();
    При вызове метода vaTest с отсутствующим параметром компилятор не ругается. Но в следующей программе в строке «vaTest ();» выдает ошибку:
    «reference to vaTest is ambiguous, both method vaTest(int…) in Array.»
    Почему он так поступает не могу понять :(.

    public class VarArgs3 {
    static void vaTest (int …v){
    System.out.print(«Кол-во агрументов: «+v.length+ » «);
    for (int x:v)
    System.out.print(x+» «);
    System.out.println();
    }
    static void vaTest (boolean …v){
    System.out.print(«Кол-во агрументов: «+v.length+ » «);
    for (boolean x:v)
    System.out.print(x+» «);
    System.out.println();
    }
    static void vaTest (String msg, int …v){
    System.out.print(msg+»Кол-во агрументов: «+v.length+ » «);
    for (int x:v)
    System.out.print(x+» «);
    System.out.println();
    }
    public static void main (String args []){
    vaTest («Кря-кря «, 2, 70, 0);
    vaTest (true,false,true);
    vaTest ();

    }
    }

  8. Сергей говорит:

    Ответ узнал. Коммент можно удалять. Извините за беспокойство 🙂

    • davidmd говорит:

      На всякий случай отвечу, если не возражаете 🙂 Ну, чтоб кто-то другой воспользовался 🙂
      методы не могут отличаться только типом параметров 🙂

  9. Сергей говорит:

    Дополню ваш ответ. 🙂
    Компилятор ругается из-за неопределенности. Т.к. вызов метода vaTest () может быть преобразован в обращение к vaTest (int …v) или к vaTest (boolean …v)

  10. Сергей говорит:

    Ответьте пожалуйста на вопрос. 🙂
    Есть класс в котором содержится конструктор массива и метод выводящий элементы массива с помощью рекурсии.
    public class RecTest {
    int values [];
    RecTest (int i) {
    values = new int [i];
    }
    void printArray (int i){
    if (i==0) return;
    else printArray(i-1);
    System.out.println(«[«+ (i-1)+»] «+ values[i-1]);

    }
    }

    Следующий класс создает массив из 10 элементов. Динамически инициализирует его значениями от 10 до 19 и выводит содержимое массива
    public class Recursion2 {
    public static void main (String args []){
    RecTest ob = new RecTest(10);
    int c=10;
    for (int x=0; x<ob.values.length; x++) {
    ob.values[x]=c;
    c++;
    }
    ob.printArray(10);
    }
    }
    Программа работает , но если переписать цикл следующим образом
    public class Reursion3 {
    public static void main (String args []){
    RecTest ob = new RecTest(10);
    int c=10;
    for (int x: ob.values) {
    ob.values[x]=c;
    c++;
    }
    ob.printArray(10);
    }
    }
    То выводится на экран следующее
    [0] 19
    [1] 0
    [2] 0
    [3] 0
    [4] 0
    [5] 0
    [6] 0
    [7] 0
    [8] 0
    [9] 0
    Почему в 1-ом элементе оказывается 19, а в остальных остаётся "0"?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *