import java.util.*;
public class Fila {
private List clientes = new ArrayList();
private List caixas = new ArrayList();
}
O que seria isso?um jeito de inicializar os atributos fora do construtor??? num entendi?
import java.util.*;
public class Fila {
private List clientes = new ArrayList();
private List caixas = new ArrayList();
}
O que seria isso?um jeito de inicializar os atributos fora do construtor??? num entendi?
O que vc não entendeu?
Foram inicializadas duas variáveis globais privadas na classe pública Fila…
Caso não exista nenhum outro código depois, elas não serão usadas em nenhuma outra parte, pois não existem métodos públicos para manuseá-las…
Ok?
Opa, equívoco…
Na realidade, não foram inicializadas ainda, foram instanciadas…
Bem, pelo que vc disse eh mais ou menos o que eu entendi…cada objeto da classe quando instanciado vai ter esse valor jah inicializado…e como eu fizesse isso um construtor…
q valor?
O construtor é um método com o mesmo nome da classe que ao instanciar a classe referida, ele já é acionado e executa o código dentro dele…
Quando vc instancia alguma coisa, na realidade vc não inicializa nenhum valor, apenas aloca o espaço necessário na memória para que a variável em questão possa ser inicializada…
As variáveis sendo privadas terão que ser acessadas por meio de métodos em outras classes… (Para vc entender melhor isso seria bom vc estudar Programação Orientada a Objetos, que eu acredito ser um ponto fundamental para quem quer programar hoje em dia!!!)
E se estiver com pressa vai direto pra parte de encapsulamento.
O construtor é um método com o mesmo nome da classe que ao instanciar a classe referida, ele já é acionado e executa o código dentro dele…Quando vc instancia alguma coisa, na realidade vc não inicializa nenhum valor, apenas aloca o espaço necessário na memória para que a variável em questão possa ser inicializada…
As variáveis sendo privadas terão que ser acessadas por meio de métodos em outras classes… (Para vc entender melhor isso seria bom vc estudar Programação Orientada a Objetos, que eu acredito ser um ponto fundamental para quem quer programar hoje em dia!!!)
Acho que vc num entenderam…eu sei sobre OO, mas o lance eh que na ultima edicao da mundo java, na materia sobre threads o cara fez assim, e funcionou… :shock:
Acabei de ver essa matéria que vc esta falando, e se vc reparar bem o autor fez alguns comentários dentre eles:
// construtor, gets e sets dos atributos
// código para inicializar os objetos clientes e caixas
Se vc realmente conhece POO, especialmente Encapsulamento, deveria saber que não existe nenhuma, nem mesmo a mínima da mínima da mínima… possiblilidade de outra classe acessar diretamente variáveis privadas!!! Somente com métodos gets e sets como esta descrito no comentario do autor, que deixou para o leitor implementá-los.
Ok?
Acabei de ver essa matéria que vc esta falando, e se vc reparar bem o autor fez alguns comentários dentre eles:
// construtor, gets e sets dos atributos // código para inicializar os objetos clientes e caixasSe vc realmente conhece POO, especialmente Encapsulamento, deveria saber que não existe nenhuma, nem mesmo a mínima da mínima da mínima… possiblilidade de outra classe acessar diretamente variáveis privadas!!! Somente com métodos gets e sets como esta descrito no comentario do autor, que deixou para o leitor implementá-los.
Ok?
Ok, as variáveis ainda não foram inicializadas, foram apenas instanciadas. Tipo assim, foi alocado espaço na memória para armazenar os dados referentes a cada variável instanciada de acordo com o molde ArrayList() com o operador new.
Aí então o autor entrou com o comentario:
// código para inicializar os objetos clientes e caixas
para que o leitor inicialize essas variáveis…
entendeu?
Se não entendeu pode falar aí, que a gente tenta te explicar melhor…
Ok? falowz…
Pessoal, não é conveniente discutir sobre o conhecimento alheio aqui.
LuizClaudio, as variáveis de uma instância podem ser inicializadas em um bloco de inicialização, no construtor, em métodos ou na declaração. Veja o exemplo:
public class Inicializacao {
List a;
List b = new ArrayList();
List c;
List d;
{
a = new LinkedList();
}
public Inicializacao() {
c = new ArrayList();
}
public void inicializaD() {
d = new LinkedList();
}
}
Quando você instanciar a classe Inicializacao, as variáveis a, b e c serão inicializadas (a d também, aliás, com o valor padrão, no caso de uma referência, null ).
Dê uma olhada na especificação: http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.3.2
Hugo, você está fazendo uma confusão de conceitos. Inicializar uma variável não é necessariamente preencher o conteúdo do objeto que ela referencia. Uma variável pode inclusive ser inicializada com null. Uma variável não-inicializada é uma variável que não tem valor nenhum, daí o único uso possível para essa variável é uma atribuição.
Variáveis de instância ou de classe (static) que não sejam finais são sempre inicializadas com um valor padrão. Variáveis finais ou variáveis locais (de métodos) não são inicializadas.
Mas nesse caso só esta sendo instanciado um novo objeto, a inicialização vem depois quando se atribui valores para esses vetores, certo?
O código que você apresentou:
import java.util.*;
public class Fila {
private List clientes = new ArrayList();
private List caixas = new ArrayList();
}
é equivalente (em termo de bytecodes gerados) ao seguinte:
import java.util.*;
public class Fila {
private List clientes;
private List caixas;
/** Construtor default */
public Fila() {
clientes = new ArrayList();
caixas = new ArrayList();
}
}
De modo geral, quando há uma inicialização das variáveis de instância tal como mostrado no seu exemplo, o compilador “move” essa inicialização para todos os construtores, pondo esse código ANTES do código que você escreveu no seu construtor.
Mas nesse caso só esta sendo instanciado um novo objeto, a inicialização vem depois quando se atribui valores para esses vetores, certo?
Ops, você respondeu enquanto eu editava meu post. Replicando aqui:
Hugo, você está fazendo uma confusão de conceitos. Inicializar uma variável não é necessariamente preencher o conteúdo do objeto que ela referencia. Uma variável pode inclusive ser inicializada com null. Uma variável não-inicializada é uma variável que não tem valor nenhum, daí o único uso possível para essa variável é uma atribuição.Variáveis de instância ou de classe (static) que não sejam finais são sempre inicializadas com um valor padrão. Variáveis finais ou variáveis locais (de métodos) não são inicializadas.
Se vc realmente conhece POO, especialmente Encapsulamento, deveria saber que não existe nenhuma, nem mesmo a mínima da mínima da mínima… possiblilidade de outra classe acessar diretamente variáveis privadas!!! Somente com métodos gets e sets como esta descrito no comentario do autor, que deixou para o leitor implementá-los.
Complicada sua afirmação. Não existe comouma ClasseA acessar diretamente membros privados de uma ClasseB, mas:
Não. As variáveis agora referenciam objetos que foraminstanciados[/b] e a partir do momento que um objeto foi instanciado ele foi inicializado. O que dá pra fazer como o Willerson falou é inicializar com null, mas se você inicializar com um objeto então o objeto já está inicializado. Esqueça isso de alocar memória quando estiver lidando com Java, pense nas abstrações que ela te dá: primitivos, objetos e classes.
É verdade…
Poderíamos mudar “inicializar” para “atribuir valores”…
Mas como as variáveis globais já atribuem valor default automaticamente, elas já são, além de instanciadas, “inicializadas”…
Beleza, acabei falando isso por causa do comentário feito pelo autor desta matéria na Mundo Java, pedindo para inicializar os objetos…
Talvez seria melhor se ele tivesse usado o termo “atribuir valores aos objetos” do que “inicializar os objetos”
valeu
Beleza, acabei falando isso por causa do comentário feito pelo autor desta matéria na Mundo Java, pedindo para inicializar os objetos…Talvez seria melhor se ele tivesse usado o termo “atribuir valores aos objetos” do que “inicializar os objetos”
Aí já é outra abstração. Objetos são uma coisa, variáveis são outra coisa. Inicializar um objeto é algo que vai depender do seu domínio. Se o domínio do caso depende das listas conterem caixas, pode-se considerar que o objeto Caixas só será considerado inicializado depois que ele conter as caixas que deve.
Existem formas de acessar as variáveis privadas de uma classe A, mas nunca diretamente…
As variáveis privadas só são acessadas diretamente na mesma classe…
Não seria isso?
That`s it …o que foi mais ou menos o que eu deduzi…obrigado a todos
Soa meio esquisito isso né? Instanciar variáveis? Você pode criar uma instância de um objeto e atribuir sua referência a uma variável.
public class Fila {
private List clientes = new ArrayList();
}
:arrow: Declara uma variável clientes do tipo List;
:arrow: Cria uma instância do objeto ArrayList;
:arrow: Atribui à variável clientes uma referência para o objeto ArrayList;
Isso quando um objeto Fila for instanciado. Todas as variáveis globais (ou variáveis de instância :!: ) de uma classe serão inicializadas com algum valor, seja ele padrão ou não.
Valor padrão para tipos primitivos:
:arrow: byte, short, int, long, float, double: 0
:arrow: char: ‘\u0000’
:arrow: boolean: false
:arrow: para objetos (ou variáveis de referência): null
Caso o código fosse assim:
public class Fila {
private List clientes;
}
:arrow: Simplesmente declara uma variável clientes do tipo List que não aponta para ninguém, ou seja, null.
Você pode ou não instanciar um objeto e atribuir sua referência à variável clientes no construtor, ou em algum outro método da classe.
Sim, é importante esclarecer bem o termo técnico da codificação…
Vc tem razão quanto a instanciar uma determinada classe e não uma variável…
Nesse caso o novo objeto é interligado a variável, sendo a variável uma referência a ele toda vez que for chamada em alguma outra parte do código…
Valeu pela correção!!!