- Programação caro razão principal: inseguro programação modo
- C ++ introduziu
构造器
um método especial (construtor), o objeto é chamado automaticamente quando você cria um- Java também utiliza o construtor, introduzindo
垃圾回收器
Construtor garantir que a inicialização
- Pelo construtor, para garantir que cada objeto pode ser obtida antes da operação de inicialização
- Por que deve o mesmo que o nome do construtor da classe?
- Qualquer nome pode ser associado com o nome de um membro da classe de conflito
- Necessidade de deixar o compilador saber qual método para chamar para inicializar o objeto (chamar o construtor é da responsabilidade do compilador )
- Isto é, essencialmente, a seguir a solução de C ++
- Por isso, o estilo (método minúsculas primeira) de codificação ponto de vista, a configuração de uma excepção designação
- Java, criar e inicializar
捆绑
sobrecarga de método
Métodos sobrecarregados podem reduzir a linguagem
冗余性
, se não sobrecarregado métodos, construtores vai ser difícil de conseguir, precisamos do nome do acordo entre o compilador e o método construtor, deixe o know compilador que chamada de método, o nome dado por codificadores em seguida, haverá um monte de nomes diferentes, se o programa correspondente para alcançá-lo, tais como: classe chamada carro, vai escrever o seu próprio construtor chamado Carone (), um carro de correspondência semelhante * muito, muito se a escrita mais do que um, inevitavelmente repetir, trazer um monte de problemas. Em suma: o construtor é outra razão forçado métodos sobrecarregados
Métodos sobrecarregados de distintiva
- lista tipo de parâmetro único
- números diferentes
- sequência diferente - normalmente não faço <- Código difícil manter
- tipos diferentes
Para distinguir o tipo de sobrecargas valor de retorno
void f(){}
int f(){return 1;}
Você pode distinguir chamando método baseia-se as chamadas de usuários:
int x = f(); //能够区分
f(); //无法区分 (为了副作用而调用)
Um método de acordo com a distinguir valor de retorno do método sobrecarregado não é viável
O construtor padrão
Se você não definir um construtor, o compilador criará automaticamente um construtor padrão ( "construtor sem argumento")
esta palavra-chave
class Banana { void peel(int i){/*...*/} }
public class test {
public static void main(String[] args) {
Banana a = new Banana();
Banana b = new Banana();
a.peel(1);
b.peel(2);
}
}
O código, casca () Como eu sei ou b é uma chamada?
O compilador “所操作对象的引用”
como o primeiro parâmetro passado para o Peel ()
, portanto, é de facto:
Banana.peel(a, 1);
Banana.peel(b, 2);
Esta referência é introduzido pelo compilador, a fim de obter o método interna atual 对象的引用
, criar uma palavra-chave especial: o presente
Construtor chama o construtor
class Banana {
private String name;
private double price;
Banana(double price){
this.price = price;
}
Banana(String name, double price){
this(price);
this.name = name;
}
public void info(){
System.out.println("name:" + name + ";price:" + price);
}
}
- Você não pode chamar dois <- construtor deve ser colocado no início do mais
significado estática
- Não desta maneira
- Você não pode chamar métodos não-estáticos dentro do método estático
- Você pode chamar o método estático não cria quaisquer objetos sob a premissa (somente através da própria classe)
class Tool {
public static void sayHi(){
System.out.println("hello.");
}
}
public class test {
public static void main(String[] args) {
Tool.sayHi(); //仅通过Tool类本身调用,而不是由Tool创建的对象
}
}
/* Output:
hello.
*/
Limpeza: O Fim do tratamento e coleta de lixo
- objetos Java não são sempre na coleta de lixo
- Os objetos podem não ser lixo
- A coleta de lixo não é igual a "destruição"
- A coleta de lixo é apenas uma memória relacionada com a
A coleta de lixo -> Reciclagem de programas que já não uso
内存
método nativo Native Method
Como o trabalho de coletor de lixo
- À custa dos objetos heap alocado é muito alta
- coletor de lixo do Java pode melhorar o objeto velocidade criação -> Assim, a partir Java heap alocação de taxa de espaço e um idioma diferente da pilha espaço distribuição de velocidade em comparável
Alguns coleta de lixo:
- contagem de referência
Simples, lento
Cada objeto é uma contagem de referência , quando há referência à contagem de referência conexão objeto é incrementada; coletor de lixo percorre todos os objetos contidos na lista de objetos encontrados a uma contagem de referência = 0, que o espaço lançamentos
- o modo mais rápido
Justificativa: qualquer "ao vivo" pode ser rastreada até o objeto --- ---> referenciado na pilha ou área de armazenamento estático, nesta área podem ser encontrados através de todas as referências --- ---> todo o "ao vivo" objetos
Como lidar com objetos "vivos" encontrados
- Stop - cópia
correr para pausar o programa irá copiar todos os objetos "ao vivo" para outra pilha (o endereço antigo para ser mapeado para o novo endereço)
Desvantagens: ineficientes, consumindo espaço
- Mark - varredura
para encontrar objetos vivos -> Mark, Mark Todo o trabalho é concluído, começar a limpar objeto não marcado é liberado, reorganizar os objetos restantes (devido ao resto do espaço de pilha não é contínua)
No caso de apenas uma pequena quantidade de lixo, é muito rápido