Inicializando Arrays

Inicializar um array significa colocar valores dentro dele. Esses valores são primitivos quando se trata de um array de primitivos, e referências a objetos (endereços de memória) quando se trata de um array de objetos. Nesse último caso o elemento pode estar também guardando o valor null.
Os elementos individuais no array são acessados através de número de índice. O número de índice sempre começa em zero. Isso significa que um array de 10 elementos começa no índice zero e termina no índice nove. Caso tente acessar um índice que não existe, a exceção ArrayIndexOutOfBoundsException será lançada.

import java.util.Date;

public class InicializacaoArrays {
      public static void main(String[] args) {
            /* array de primitivos com 2 elementos
             * os elementos inicial com seus
             * valores default - 0 */
            int[] codigos = new int[2];
            System.out.println(codigos[0]);//0
            System.out.println(codigos[1]);//0
           
            /* array de objetos com 2 elementos
             * inicializados com seus
             * valores default - null */
            Date[] datas = new Date[2];
            System.out.println(datas[0]);//null
            System.out.println(datas[1]);//null
            //ArrayIndexOutOfBoundsException
            System.out.println(datas[2]);
           
            //array de duas dimensões
            int[][] valores = new int[2][];
            /* a primeira posição do array foi
             * inicializada com um array de 5
             * elementos */
            valores[0] = new int[5];
            /* a segunda posição do array foi
             * inicializada com um array de 2
             * elementos */
            valores[1] = new int[2];
      }
}

Inicializando Elementos em um Loop

Objetos de array têm apenas uma variável pública, que é length, a qual retorna o número de elementos do array. Essa variável normalmente é utilizada para controle de um loop, para que não saia do escopo do array.

public class Loop {    
      public static void main(String[] args) {
            int[] array = new int[5];
            //length é a qtd de elementos do array
            for (int i = 0; i < array.length; i++)
                  System.out.println(array[i]); //0
      }
}


Construindo e Inicializando Arrays em uma Linha

Uma maneira de inicializar e construir um array na mesma linha de código é a seguinte:

int [] d = {6,8,9};
O tamanho desse array será delimitado pelo número de elementos entre chaves. Essa sintaxe também pode ser utilizada para arrays multidimensionais:
int[][] s = {{5,2,4,7}, {9,2}, {3,4}};


Arrays de Primitivos

Arrays primitivos podem receber qualquer valor que pode ser implicitamente combinado com o tipo do array declarado. Por exemplo, um array de int pode receber qualquer valor que caiba em uma variável de 32-bits.

public class AtribuicaoArrayPrimitivos {
      public static void main(String[] args) {
            int[] array = new int[4];
            /* um array de primitivos podem guardar
             * qualquer valor que possa ser
             * implicitamente convertido para o
             * tipo do array */
            byte b = 4;
            char c = 'c';
            short s = 10;
            array[0] = 1;
            array[1] = b;
            array[2] = c;
            array[3] = s;
      }
}

Arrays de Objetos

Se o tipo do array é uma classe, então é possível atribuir aos elementos do array objetos de qualquer subclasse do tipo declarado.
Se o array é do tipo interface, os elementos do array podem ser de qualquer tipo de instância de classe que implemente essa interface. Ou seja, qualquer elemento que passe pelo teste IS-A com o tipo do array pode ser atribuído.


class Carro { }

class Civic extends Carro { }

public class AtribuicaoArrayObjetos {   
      public static void main(String[] args) {
            /* um array de objetos pode guardar
             * referências de objetos do tipo do
             * array ou do tipo de suas subclasses*/
            Carro[] carros = new Carro[2];
            carros[0] = new Carro();
            carros[1] = new Civic();
      }
}

Atribuições de Arrays de Uma Dimensão

Arrays primitivos, uma vez declarados com um tipo, jamais poderão ser instanciados ou receber outro tipo de array. Por exemplo, uma variável byte pode ser atribuída a uma variável int, porque o container de byte é menor que o de int. porém, com arrays de primitivos isso não acontece; não é possível atribuir um array de byte a um array de int; o array de int só pode receber um outro array que seja do tipo int.
Arrays que guardam objetos, ao contrário dos primitivos, não são restritivos, ou seja, um array pode receber um outro array do tipo de sua subclasse. Essa regra também vale para interfaces.

class Pessoa { }

class PFisica extends Pessoa { }

public class SCJP {    
      public static void main(String[] args) {
            int[] arrayInt = new int[2];
            int[] arrayInt2 = new int[3];
            byte[] arrayByte = new byte[2];
            /* arrays de primitivos só podem receber
             * outros arrays do mesmo tipo do array
             * declarado */
            arrayInt = arrayInt2;
            arrayInt = arrayByte;
           
            Pessoa[] arrayP = new Pessoa[2];
            Pessoa[] arrayP2 = new Pessoa[3];
            PFisica[] arrayPF = new PFisica[2];
            /* arrays de objetos podem receber outros
             * arrays do mesmo tipo do array declarado
             * ou arrays do tipo de um subclasse */
            arrayP = arrayP2;
            arrayP = arrayPF;
      }
}

Atribuições de Arrays Multidimensionais

Ao atribuir um array previamente declarado, o array que estiver sendo atribuído deve ter a mesma dimensão que o que está recebendo.


Fonte: SCJP Sun Certified Programmer for Java 6 Study Guide

0 comentários:

Postar um comentário