Classes e objetos Java (explicação detalhada em 7.000 palavras!!! Leva você a entender completamente as classes e objetos)


Índice

1. Compreensão preliminar de orientação a objetos

1. O que é orientado a objetos

2. Orientado a objetos e orientado a processos

(1) Processo de lavagem tradicional

(2) Processo de lavanderia moderno

Editar

2. Definição e utilização de classes

1. Formato de definição de classe

3. Instanciação de classes

1. O que é instanciação?

2. Descrição da classe e do objeto

4. O uso deste

1. Por que usar isso

Escreva uma aula de data

razão:

Solução:

2. Qual é esta referência?

3. Características desta referência

5. Construção e inicialização de objetos

1. Como inicializar o objeto

2. Método de construção

(1) Conceito

(2) Características

3. Inicialização padrão

4. Inicialização no local

6. Embalagem

1. O conceito de embalagem

2. Qualificador de acesso

3. Pacote de expansão de pacote

(1) Conceito de pacote

(2) Importar classes no pacote

(3) Pacote personalizado

(4) Exemplos de controle de direitos de acesso a pacotes

(5) Pacotes comuns

7. membros estáticos

1. Vamos falar novamente sobre os alunos

2. Modificação estática de variáveis ​​de membro

3. Método de membro modificado estático

4. Inicialização de variáveis ​​de membros estáticos

8. Blocos de código

1. Conceito e classificação do bloco de código

2. Blocos de código comuns

3. Construa blocos de código

4. Bloco de código estático



1. Compreensão preliminar de orientação a objetos

1. O que é orientado a objetos

Java é uma linguagem pura orientada a objetos (Programa Orientado a Objetos, abreviadamente OOP).No mundo orientado a objetos, tudo é um objeto. Orientado a objetos é uma ideia para resolver problemas, que depende principalmente da interação entre objetos para completar uma coisa. Usar o pensamento orientado a objetos para lidar com programas está mais alinhado com a compreensão das pessoas sobre as coisas e é muito amigável para o design, expansão e manutenção de grandes programas.
 

2. Orientado a objetos e orientado a processos

(1) Processo de lavagem tradicional

A lavanderia tradicional concentra-se no processo de lavagem de roupas. Se faltar um elo, pode não funcionar. Além disso, roupas diferentes são lavadas de maneiras, períodos de tempo e métodos de torção diferentes, o que torna mais difícil lidar com isso. Se você vai lavar os sapatos no futuro, essa é outra forma de colocá-los. Escrever código dessa maneira será mais difícil de expandir ou manter no futuro.

(2) Processo de lavanderia moderno

Existem quatro objetos no total: pessoas, roupas, roupas e máquinas de lavar

Todo o processo de lavagem de roupas consiste em jogar as roupas na máquina de lavar, colocar as roupas lavadas, ligar a máquina de lavar e a máquina de lavar completará o processo de lavagem e secará as roupas.

Todo o processo é completado principalmente pela interação de quatro objetos: pessoas, roupas, sabão em pó e máquinas de lavar. As pessoas não precisam se preocupar em como a máquina de lavar lava as roupas ou em como secá-las.

O processamento orientado a objetos não se concentra no processo de lavagem de roupas. Os usuários não precisam se preocupar com como a máquina de lavar lava as roupas e como secá-las. Eles só precisam colocar as roupas na máquina de lavar, despejar o sabão em pó e ligar o interruptor, ou seja, isso é feito através da interação entre os objetos.

Perceber:

Orientado a processos e orientado a objetos não são linguagens, mas métodos de resolução de problemas. Eles não são bons nem ruins e cada um tem seus próprios cenários de aplicação especiais.
 

2. Definição e utilização de classes

1. Formato de definição de classe

classe nome da classe {

        Atributos de classe (variáveis-membro);

        Comportamento de classe (métodos membros);

}

Os conteúdos contidos em uma classe são chamados de membros da classe. Os atributos são usados ​​principalmente para descrever classes e são chamados de atributos de membro ou variáveis ​​de membro de classe da classe. Os métodos descrevem principalmente quais funções uma classe possui e são chamados de métodos membros da classe.
 

exemplo:

 class WashMachine {

        //属性
        public String brand;//品牌
        public String type;//型号
        public double weight;//重量

        //行为
        public void washClothes() {
        //洗衣服
            System.out.println("洗衣功能");
        }
    }

Observe que o nome da classe é definido em camel case.

Notas:
1. Geralmente, apenas uma classe é definida em um arquivo.
2. A classe onde o método principal está localizado geralmente deve ser decorada com public (nota: o Eclipse encontrará o método principal na classe modificada pelo público por padrão).
3. A classe pública modificada deve ser igual a Os nomes dos arquivos são iguais
4. Não modifique facilmente o nome da classe pública modificada. Se desejar modificá-lo, modifique-o por meio da ferramenta de desenvolvimento.

 

3. Instanciação de classes

1. O que é instanciação?

Definir uma classe equivale a definir um novo tipo no computador, semelhante a int e double, exceto que int e double são tipos integrados que vêm com a linguagem Java, enquanto a classe é um novo tipo definido pelo usuário. como o acima: classe PetDog e classe Student. São todas classes (um tipo recém-definido).Com esses tipos personalizados, você pode usar essas classes para definir instâncias (ou objetos).
O processo de criação de um objeto usando um tipo de classe é chamado de instanciação da classe. Em Java, a palavra-chave new é usada para instanciar o objeto com o nome da classe.

exemplo:

class PetDog {
    public String name;//姓名
    public String color;//颜色

    public void wag() {
        System.out.println("摇尾巴");
    }

    public void braks() {
        System.out.println("汪汪汪");
    }

    public void print() {
        System.out.println(this.name);
        System.out.println(this.color);
    }
}
public class TestDemo {
    public static void main(String[] args) {

        PetDog petdog1 = new PetDog();
        PetDog petdog2 = new PetDog();

        petdog1.name = "阿黄";
        petdog1.color = "黄色";
        petdog1.wag();
        petdog1.braks();
        petdog1.print();

        petdog2.name = "阿黑";
        petdog2.color = "黑色";
        petdog2.wag();
        petdog2.braks();
        petdog2.print();
    }
}

Resultado de saída:

Nota:
A palavra-chave new é usada para criar uma instância de um objeto.
Use . para acessar as propriedades e métodos do objeto.
A mesma classe pode criar duas instâncias.
 

2. Descrição da classe e do objeto

1. Uma classe é apenas algo semelhante a um modelo, usado para descrever uma entidade e limitar os membros da classe.
2. Uma classe é um tipo personalizado que pode ser usado para definir variáveis.
3. Uma classe pode ser instanciada para múltiplos objetos, os objetos instanciados ocupam espaço físico real e armazenam variáveis ​​de membros de classe
. Instanciar objetos de uma classe é como usar desenhos de projeto arquitetônico para construir uma casa na realidade. Uma classe é como um desenho de projeto. Ela projeta apenas o que é necessário, mas não há construção física. Da mesma forma, uma classe é apenas um projeto que é instanciado. Os objetos podem realmente armazenar dados e ocupar espaço físico.

4. O uso deste

1. Por que usar isso

Vejamos primeiro os seguintes exemplos:

Escreva uma aula de data

Resultados de saída

Se alterarmos o nome do parâmetro formal de setDate para ser igual à variável membro de tempo, qual será o resultado da saída?

Torna-se tudo 0

razão:

Quando alteramos o nome do parâmetro formal para ser igual ao nome da variável membro , o valor do nome do parâmetro formal aqui é diferente do valor que esperamos.

Um é o parâmetro real passado e o outro é a variável de membro. No entanto, na classe, seguimos o princípio de que as variáveis ​​​​locais têm precedência . Os parâmetros aqui representam as variáveis ​​​​de membro. Ao atribuir valores abaixo, os parâmetros formais são atribuídos a si mesmos. O tipo int não tem valor atribuído e seu valor padrão é 0 , então todos os 0s serão impressos.

Solução:

Como mostrado na imagem:

Resultado de saída:

2. Qual é esta referência?

Esta referência aponta para o objeto atual (o objeto que chama o método membro quando o método membro está em execução).Todas as operações de variáveis ​​de membro no método membro são acessadas por meio desta referência. Só que todas as operações são transparentes para o usuário, ou seja, o usuário não precisa passar, o compilador completa automaticamente.

Nota: isto se refere ao objeto no qual o método membro é chamado.

3. Características desta referência


1. O tipo disto: corresponde à referência do tipo de classe, ou seja, qual objeto é chamado é o tipo de referência desse objeto.
2. isso só pode ser usado em "métodos membros".
3. Em "métodos membros", isso só pode se referir ao objeto atual, não ao objeto atual. Em seguida, consulte outros objetos
4. este é o primeiro parâmetro oculto do "método membro", e o compilador o passará automaticamente. Quando o método membro é executado, o o compilador será responsável por passar a referência do objeto do método membro chamador para o método membro, e este será responsável por receber


Uma demonstração simples em nível de código --->Nota: A classe Date no lado direito da imagem abaixo também pode ser compilada.

5. Construção e inicialização de objetos

1. Como inicializar o objeto

Pelo conhecimento anterior, sabemos que ao definir uma variável local dentro de um método Java, ela deve ser inicializada, caso contrário a compilação falhará.

Para compilar o código acima é muito simples: basta definir um valor inicial para a antes de usá-lo oficialmente.

Se for um objeto:

Você precisa chamar o método SetDate escrito antes para definir a data específica no objeto. Dois problemas foram descobertos através dos exemplos acima:
1. É problemático chamar o método SetDate para definir uma data específica cada vez que o objeto é criado. Como o objeto deve ser inicializado?
2. Variáveis ​​locais devem ser inicializadas antes de serem usadas. Por que elas ainda podem ser usadas sem fornecer um valor após o campo ser declarado?
 

2. Método de construção

(1) Conceito

O método construtor (também chamado de construtor) é um método membro especial cujo nome deve ser igual ao nome da classe. Ele é chamado automaticamente pelo compilador quando o objeto é criado e é chamado apenas uma vez durante todo o ciclo de vida do objeto.

(2) Características

1. O nome deve ser igual ao nome da classe
2. Não há tipo de valor de retorno e defini-lo como void não funcionará
3. Ele é chamado automaticamente pelo compilador ao criar um objeto e é chamado apenas uma vez durante o ciclo de vida do objeto (equivalente ao nascimento de uma pessoa, cada pessoa só pode nascer uma vez)
4. O construtor pode estar sobrecarregado (os usuários fornecem aos construtores parâmetros diferentes de acordo com suas próprias necessidades)

5. Se o usuário não o definir explicitamente, o compilador gerará um construtor padrão, e o construtor padrão gerado não deverá ter parâmetros.

Na classe Date acima, nenhum construtor é definido e o compilador irá gerar um construtor sem parâmetros por padrão.
 

Nota: Uma vez definido pelo usuário, não é mais gerado pelo compilador. (Resgate a emergência, não os pobres)

6. No construtor, você pode chamar outros construtores por meio dele para simplificar o código.

Nota:
①. this(...) deve ser a primeira instrução no construtor
②. Não pode formar um ciclo

7. Na maioria dos casos, o público é utilizado para modificação e, em situações especiais, é modificado pelo privado.

3. Inicialização padrão
 

A segunda questão levantada acima: Por que as variáveis ​​locais precisam ser inicializadas quando usadas, mas as variáveis ​​de membro não precisam ser?

Para entender esse processo, você precisa saber um pouco do que acontece por trás da nova palavra-chave:

É apenas uma declaração simples no nível do programa, mas muitas coisas precisam ser feitas no nível da JVM. Aqui está uma breve introdução:
1. Verifique se a classe correspondente ao objeto está carregada e carregue-a se não estiver.
2. Alocar espaço de memória para o objeto
. 3. Lidar com a segurança de simultaneidade. Problema
: Por exemplo: vários threads se aplicam a objetos ao mesmo tempo. A JVM deve garantir que o espaço alocado para o objeto não entre em conflito.
4. Inicializar o espaço alocado
. Ou seja: após a solicitação do espaço do objeto, os membros contidos no objeto já possuem seus valores iniciais definidos, como:

5. Defina as informações do cabeçalho do objeto
6. Chame o método construtor e atribua valores a cada membro do objeto
 

4. Inicialização no local
 

Ao declarar uma variável membro, o valor inicial é fornecido diretamente.

Nota: Após a compilação do código, o compilador adicionará todas essas instruções para inicialização de membros a cada construtor.

6. Embalagem

1. O conceito de embalagem

Existem três características principais dos programas orientados a objetos : encapsulamento, herança e polimorfismo . Na etapa de classe e objeto, a principal pesquisa é sobre características de encapsulamento. O que é encapsulamento? Simplificando, são os detalhes de blindagem do shell .
Por exemplo: Para um dispositivo complexo como um computador, tudo o que é fornecido ao usuário é: ligar e desligar, inserir informações através do teclado, monitor, entrada USB, etc., permitindo ao usuário interagir com o computador e realizar tarefas diárias. . Mas na verdade: o que o computador realmente funciona é a CPU, placa gráfica, memória e outros componentes de hardware

Para usuários de computador, eles não precisam se preocupar com os componentes internos do núcleo, como a disposição dos circuitos da placa-mãe, como a CPU é projetada, etc. interagir com o computador através do teclado e do mouse. Portanto, quando os fabricantes de computadores saem da fábrica, eles colocam um invólucro na parte externa para ocultar os detalhes internos da implementação e fornecem apenas interruptores de energia, conectores para mouse e teclado na parte externa para que os usuários possam interagir com o computador.


Encapsulamento: combine organicamente dados e métodos de operação de dados, oculte as propriedades e detalhes de implementação do objeto e exponha apenas a interface para interagir com o objeto.
 

2. Qualificador de acesso

O encapsulamento é alcançado principalmente em Java por meio de classes e direitos de acesso: as classes podem combinar dados e métodos de encapsulamento de dados, o que está mais alinhado com a compreensão humana das coisas, enquanto os direitos de acesso são usados ​​para controlar se métodos ou campos podem ser usados ​​diretamente fora do aula. . Existem quatro qualificadores de acesso fornecidos em Java:

Por exemplo:
público: pode ser entendido como as características da aparência de uma pessoa, que podem ser vistas por todos.
padrão: não é segredo para a própria família (no mesmo pacote), mas é privado para os outros.
privado: apenas um sabe, outras pessoas sabem. Não sei nada


[Explicação]
protegido é usado principalmente em herança.
A permissão padrão refere-se a: a permissão padrão quando nada está escrito. As
permissões de acesso podem não apenas limitar a visibilidade dos membros da classe, mas também controlar a visibilidade da classe.

3. Pacote de expansão de pacote

(1) Conceito de pacote

No sistema orientado a objetos é proposto o conceito de pacote de software, ou seja, para melhor gerenciar as classes, múltiplas classes são reunidas em um grupo, denominado pacote de software. Um pouco semelhante a um diretório. Por exemplo: Para gerenciar melhor as músicas do seu computador, uma boa maneira é colocar músicas com os mesmos atributos no mesmo arquivo, ou você também pode classificar as músicas em uma determinada pasta com mais detalhes.

Pacotes também foram introduzidos em Java. Pacotes são a personificação do mecanismo de encapsulamento para classes, interfaces, etc., e são uma boa maneira de organizar classes ou interfaces. Por exemplo, classes em um pacote não querem ser usadas por classes em outros pacotes. Os pacotes também desempenham um papel importante: podem existir classes com o mesmo nome no mesmo projeto, desde que estejam em pacotes diferentes.

(2) Importar classes no pacote

Java forneceu muitas classes prontas para usarmos, por exemplo, a classe Date: Você pode usar java.util.Date para importar a classe Date no pacote java.util.

No entanto, esta forma de escrever é mais problemática: você pode usar a instrução import para importar o pacote.

Se precisar usar outras classes em java.util, você pode usar import java.util.*

No entanto, recomendamos que você especifique explicitamente o nome da classe a ser importada , caso contrário, ainda é provável que ocorram conflitos.

Neste caso você precisa usar o nome completo da classe

Você pode usar import static para importar métodos e campos estáticos no pacote

Precauções:

Há uma grande diferença entre import e #include do C++. C++ deve #include para introduzir o conteúdo de outros arquivos, mas Java não exige isso.

import é apenas para torná-lo mais conveniente ao escrever código. import é mais semelhante ao namespace do C++ e usa

(3) Pacote personalizado
 

Regras básicas
① Adicione uma declaração de pacote no topo do arquivo para especificar em qual pacote o código está.
② O nome do pacote precisa ser especificado o mais exclusivo possível, geralmente usando a forma inversa do nome de domínio da empresa (por exemplo, com .bit.demo1).
③O nome do pacote deve corresponder ao caminho do código. Por exemplo, se você criar um pacote de com.bit.demo1, então haverá um caminho correspondente com/bit/demo1 para armazenar o código. ④Se uma
classe não possui uma instrução package, a classe será colocada em um pacote padrão.


Etapas da operação
① Primeiro crie um novo pacote no IDEA: clique com o botão direito em src -> Novo -> Pacote

②Insira o nome do pacote na caixa de diálogo pop-up, por exemplo com.bit.demo1

③Crie uma classe no pacote, clique com o botão direito no nome do pacote -> Novo -> Classe e insira o nome da classe.

④Neste ponto você pode ver que a estrutura de diretórios em nosso disco foi criada automaticamente pelo IDEA

⑤Ao mesmo tempo, também vimos que uma instrução de pacote apareceu na parte superior do arquivo Test.java recém-criado.

(4) Exemplos de controle de direitos de acesso a pacotes

A classe Computer está localizada no pacote com.bit.demo1 e TestComputer está localizada no pacote com.bit.demo2:

(5) Pacotes comuns

1. java.lang: Classes básicas comumente usadas (String, Object) no sistema. Este pacote é importado automaticamente do JDK1.1 em diante.
2. java.lang.reflect: pacote de programação de reflexão java;
3. java.net: pacote de desenvolvimento de programação de rede.
4. java.sql: Pacote de suporte para desenvolvimento de banco de dados.
5. java.util: é um pacote de ferramentas fornecido por java. (Classes de coleção, etc.) Muito importante
6. java.io: Kit de desenvolvimento de programação de E/S.

7. membros estáticos


1. Vamos falar novamente sobre os alunos
 

Use a classe de aluno apresentada no artigo anterior para instanciar três objetos s1, s2 e s3. Cada objeto tem seu próprio nome exclusivo, sexo, idade, nota e outras informações dos membros. Essas informações são usadas para descrever alunos diferentes. Como segue :

Suponha que três alunos estejam na mesma turma, então eles devem estar na mesma sala de aula. Como estão na mesma sala de aula, podemos adicionar uma variável de membro à turma para salvar a sala de aula onde os alunos estão? A resposta é não.


Cada objeto conterá uma cópia das variáveis-membro previamente definidas na classe Student (chamadas de variáveis ​​de instância) , pois essas informações precisam ser usadas para descrever alunos específicos. Agora queremos representar a sala de aula onde os alunos frequentam as aulas. Os atributos desta sala de aula não precisam ser armazenados em cada objeto aluno, mas precisam ser compartilhados por todos os alunos. Em Java, os membros modificados por static são chamados de membros estáticos ou membros de classe.Eles não pertencem a um objeto específico e são compartilhados por todos os objetos.
 

2. Modificação estática de variáveis ​​de membro

Variáveis ​​​​de membro modificadas por estáticas são chamadas de variáveis ​​​​de membros estáticos.A maior característica das variáveis ​​​​de membros estáticos é que elas não pertencem a um objeto específico e são compartilhadas por todos os objetos.
 

[Características das variáveis ​​​​de membro estático]
① Não pertence a um objeto específico, mas é um atributo da classe. É compartilhado por todos os objetos e não é armazenado no espaço de um determinado objeto. ② Pode ser acessado através
do objeto ou o nome da classe, mas geralmente É mais recomendado usar o nome da classe para acessar
③ As variáveis ​​da classe são armazenadas na área do método
④ O ciclo de vida segue a vida da classe (ou seja: criado quando a classe é carregada e destruído quando a classe está descarregada)

Execute o código acima no modo de depuração e então você poderá ver na janela de monitoramento que as variáveis ​​​​de membro estático não estão armazenadas em um objeto específico.

3. Método de membro modificado estático

Geralmente, os membros de dados em uma classe são definidos como privados e os métodos dos membros são definidos como públicos.Após a configuração, como o atributo classRoom na classe Student pode ser acessado fora da classe?

Como os atributos estáticos devem ser acessados?
Em Java, os métodos de membro modificados por estáticos são chamados de métodos de membro estático. Eles são métodos da classe e não são exclusivos de um objeto. Membros estáticos geralmente são acessados ​​por meio de métodos estáticos.

[Características do método estático]

① Não pertence a um objeto específico, é um método de classe.
② Pode ser chamado através do objeto ou através do nome da classe.nome do método estático (...). É mais recomendado usar o último.
③ Você não é possível acessar nenhum método não estático no método estático. Variáveis ​​de membro

④ Nenhum método não estático pode ser chamado em um método estático, porque os métodos não estáticos possuem este parâmetro e esta referência não pode ser passada ao chamar um método estático.         

⑤Os métodos estáticos não podem ser substituídos e não podem ser usados ​​para implementar polimorfismo

4. Inicialização de variáveis ​​de membros estáticos
 

Nota: Variáveis-membro estáticas geralmente não são inicializadas no construtor. O que é inicializado no construtor são os atributos de instância relacionados ao objeto.


Existem dois tipos de inicialização de variáveis ​​de membros estáticos: inicialização no local e inicialização de bloco de código estático.
 

①Inicialização no local: A inicialização no local refere-se a: fornecer o valor inicial diretamente ao definir

②Inicialização do bloco de código estático (continue para ver mais tarde)

8. Blocos de código

1. Conceito e classificação do bloco de código

Um trecho de código definido usando {} é chamado de bloco de código. De acordo com a posição e palavras-chave definidas no bloco de código, ele pode ser dividido nos seguintes quatro tipos:
        ① Bloco de código comum
        ② Bloco de construção
        ③ Bloco estático
        ④ Bloco de código síncrono (não discutido aqui)

2. Blocos de código comuns

Este uso é menos comum
 

3. Construa blocos de código

Building block: Um bloco de código definido em uma classe (sem modificadores). Também chamado de bloco de código de instância. Blocos de código de construção geralmente são usados ​​para inicializar variáveis ​​de membros de instância.

4. Bloco de código estático

Os blocos de código definidos usando estáticos são chamados de blocos de código estáticos. Geralmente usado para inicializar variáveis ​​de membros estáticos.

Notas
① Não importa quantos objetos sejam gerados por um bloco de código estático, ele só será executado uma vez
② Variáveis ​​de membro estático são atributos da classe, portanto, são abertas e inicializadas quando a JVM carrega a classe
③ Se uma classe contém vários blocos de código estático, ao compilar o código, o compilador irá executar (mesclar) um após o outro na ordem definida.④O
bloco de código de instância só será executado quando um objeto for criado.
 

Acho que você gosta

Origin blog.csdn.net/cool_tao6/article/details/132779013
Recomendado
Clasificación