"idéias de programação Java" 05. inicialização e limpeza

  • 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:

  1. 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

  1. 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

Acho que você gosta

Origin www.cnblogs.com/hhhqqq/p/12588151.html
Recomendado
Clasificación