Classes e objetos detalhados em java

Orientado a processos e orientado a objetos

  • A linguagem C é orientada para o processo, com foco no processo, analisando as etapas para resolver o problema e, gradativamente, resolvendo o problema por meio de chamadas de função.
  • JAVA é baseado na orientação a objetos, com foco em objetos, dividindo algo em diferentes objetos e completando-o pela interação entre objetos.
  • Orientado para o processo concentra-se no processo, e o comportamento envolvido em todo o processo é a função.
  • Orientado a objetos concentra-se no objeto, ou seja, o sujeito envolvido no processo de participação. É através da lógica conectar as funções uma a uma

[Conceito orientado a objetos]

  1. Orientado a objetos é uma forma de pensar sobre os problemas, é um tipo de pensamento. Por exemplo: conceitos e exemplos. A teoria e a prática. Nome e realidade e assim por diante.
  2. Uma classe é um termo geral para uma classe de objetos. O objeto é uma instância deste tipo de reificação
  3. Os benefícios da orientação a objetos: Para tornar as coisas complexas simples, basta encarar um objeto.

【Design Orientado a Objetos】

O design orientado a objetos apreende uma experiência importante: quem possui os dados, quem fornece métodos externos para manipular os dados (privado)! (A parte passiva é a proprietária dos dados e a parte ativa é o executor)

Durante o desenvolvimento: encontre objetos, crie objetos, use objetos e mantenha relacionamentos entre os objetos.

Resumo: Orientado a objetos é uma maneira de descrever coisas no mundo objetivo com código (classes). Uma classe contém principalmente os atributos e comportamentos de uma coisa

Instanciação de classes e classes

Uma classe é um termo geral para uma classe de objetos. Um objeto é uma instância desse tipo de reificação.Uma
classe pode instanciar inúmeros objetos.

Abaixo usamos um exemplo para entender a instanciação de classes e classes

class Person {
    
    
    public int age;//成员属性 实例变量  字段  属性
    public String name;
    public static String sex;   //静态成员变量    方法区
    public void eat() {
    
    //成员方法
        System.out.println("吃饭!");
    }
    public void sleep() {
    
    
        System.out.println("睡觉!");
    }
    public static void func(){
    
    
    	System.out.println("静态成员方法");
    }
}
public class Main{
    
    
    public static void main(String[] args) {
    
    
        Person person = new Person();//通过new实例化对象
        person.eat();//成员方法调用需要通过对象的引用调用
        person.sleep();
//产生对象 实例化对象
        Person person2 = new Person();
        Person person3 = new Person();

		//静态成员变量和方法的调用
		System.out.println(Person.sex);
		Person.func();
    }
}

Variável membro:
definida dentro da classe, fora do método é
acessada através de referências de objetos.
Se não inicializada, então seu valor é um valor padrão (valor padrão zero)

  • Se for um tipo de referência, o valor é nulo (incluindo matrizes, strings de String, etc.)
  • Se for um tipo simples, o valor é o valor padrão correspondente ao seu tipo
byte baixo int grande flutuador em dobro Caracteres boleano
0 0 0 0L 0.0f 0,0 '\ u0000' hexadecimal (também pode ser tratado como 0) falso

Comportamento / método:
[eat () sleep ()] é um método de membro de instância
func () é um método de membro estático

Como posso acessar variáveis ​​de membro estático e métodos de membro? Como
Insira a descrição da imagem aqui
você pode ver aqui, não há necessidade de instanciar objetos para os estáticos ! ! !

Chamada direta

Nome da classe. Variável de membro estático / método de membro estático

Para resumir a estática:

  1. Para propriedades de membro estático ou métodos de membro estático, não depende do objeto .
  2. Existe apenas uma variável de membro estático, que é armazenada na área do método.
  3. Dados não estáticos não podem ser acessados ​​dentro de um método estático.

A estrutura de armazenamento da classe instanciada

Insira a descrição da imagem aqui

Maneiras de inicializar variáveis ​​de membro

1. Inicialização no local (inicialização ofensiva dentro da classe)
Insira a descrição da imagem aqui

2. Inicialização padrão
Insira a descrição da imagem aqui
3. Inicialização fora da classe (mais usado)

public class Main{
    
    
    public static void main(String[] args) {
    
    
        Person person1 = new Person();
        person1.name = "星星";
        person1.age = 20;

        Person person2 = new Person();
        person2.name = "狒狒";
        person2.age = 40;
    }
}

Encapsulamento

Quando escrevemos código, geralmente há duas funções envolvidas: implementador de classe e chamador de classe. A essência do encapsulamento é permitir que o chamador da classe não precise entender como o implementador da classe implementa a classe, desde que saiba como Basta usar a classe.

Isso reduz os custos de aprendizagem e uso dos usuários da classe, reduzindo assim a complexidade

As duas palavras-chave privado / público significam "controle de acesso".

  • Variáveis ​​de membro ou métodos de membro modificados por public podem ser usados ​​diretamente pelo chamador da classe.
  • Variáveis ​​de membro ou métodos de membro modificados por private não podem ser usados ​​pelo chamador da classe

por exemplo

class Person {
    
    
    private String name = "张三";
    private int age = 18;
    public void show() {
    
    
        System.out.println("我叫" + name + ", 今年" + age + "岁");
    }
}
class Test {
    
    
    public static void main(String[] args) {
    
    
        Person person = new Person();
        person.show();
    }
}
  • Neste ponto, o campo foi decorado com privado. O chamador da classe (no método principal) não pode usá-lo diretamente. Em vez disso, o método show é necessário. Neste momento, o usuário da classe não precisa entender os detalhes de implementação da classe Person.
  • Ao mesmo tempo, se o implementador da classe modificar o nome do campo, o chamador da classe não precisa fazer nenhuma alteração (o chamador da classe não tem acesso a campos como nome e idade)

métodos getter e setter

Getter: o método para obter o valor da propriedade
setter: o método para modificar o valor da propriedade
Usamos esses dois métodos para encapsular as propriedades da classe, de modo a atingir o propósito de acessar as propriedades

class Person {
    
    
    private String name;//实例成员变量
    private int age;
    public void setName(String name){
    
    
//name = name;//不能这样写
        this.name = name;//this引用,表示调用该方法的对象
    }
    public String getName(){
    
    
        return name;
    }
    public void show(){
    
    
        System.out.println("name: "+name+" age: "+age);
    }
}
class Main {
    
    
    public static void main(String[] args) {
    
    
        Person person = new Person();
        person.setName("caocao");
        String name = person.getName();
        System.out.println(name);
        person.show();
    }
}

esta palavra-chave

Podemos ver o método setter no código agora mesmo

private String name;
public void setName(String name){
    
    
		//name = name;//不能这样写
        this.name = name;//this引用,表示调用该方法的对象
}

Isso representa a referência do objeto atual e você pode usar isso para acessar os campos e métodos do objeto.
Insira a descrição da imagem aqui
Três usos:

  1. this.attribute; // Acessar os atributos do objeto atual
  2. this. method; // chamar o método do objeto atual
  3. this (); // Chame o método de construção do objeto atual (ps: deve ser colocado na primeira linha, e só pode haver um método de construção dentro)

Método de construção

O método de construção é um método especial que será chamado automaticamente quando um novo objeto for instanciado usando a palavra-chave new para completar a operação de inicialização

Quantas etapas existem para instanciar / criar um objeto ?
Student stu = new Student (); // Instanciar um objeto em
duas etapas

  1. Alocar memória para o objeto
  2. Chame o método de construção apropriado, indicando que há mais de um método de construção, talvez mais

Regras de gramática

  1. O nome do método deve ser igual ao nome da classe
  2. O construtor não tem declaração de tipo de valor de retorno
  3. Deve haver pelo menos um método de construção em cada classe (se não estiver claramente definido, o sistema irá gerar automaticamente uma construção sem parâmetros)
class Person {
    
    
    private String name;//实例成员变量
    private int age;
    private String sex;
    //默认构造函数 构造对象
    public Person() {
    
    
        this.name = "caocao";
        this.age = 10;
        this.sex = "男";
    }
    //带有3个参数的构造函数
    public Person(String name,int age,String sex) {
    
    
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    public void show(){
    
    
        System.out.println("name: "+name+" age: "+age+" sex: "+sex);
    }
}
public class Main{
    
    
    public static void main(String[] args) {
    
    
        Person p1 = new Person();//调用不带参数的构造函数 如果程序没有提供会调用不带参数的构造函数
        p1.show();
        Person p2 = new Person("zhangfei",80,"男");//调用带有3个参数的构造函数
        p2.show();
    }
}

método toString

        Person person = new Person("caocao",19);
        System.out.println(person);

Se você imprimir a referência, ele chamará o método toString por padrão e executará o resultado:
Insira a descrição da imagem aqui
Podemos reescrever o método toString para imprimir o resultado que desejamos.
Por exemplo:

class Person {
    
    
    private String name;
    private int age;
    public Person(String name,int age) {
    
    
        this.age = age;
        this.name = name;
    }
    public void show() {
    
    
        System.out.println("name:"+name+" " + "age:"+age);
    }
    //重写Object的toString方法
    @Override
    public String toString() {
    
    
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

public class Main {
    
    
    public static void main(String[] args) {
    
    
        Person person = new Person("caocao",19);
        person.show();
        System.out.println(person);
    }
}

Insira a descrição da imagem aqui
Desta forma, a impressão da referência sairá de acordo com o conteúdo desejado.

Objeto anônimo

Anonimato significa simplesmente um objeto sem nome.

  • Os objetos que não são referenciados são chamados de objetos anônimos.
  • Objetos anônimos só podem ser usados ​​ao criar objetos.
  • Se um objeto for usado apenas uma vez, você não precisa usá-lo mais tarde, você pode considerar o uso de um objeto anônimo
new Person("caocao",19).show();//通过匿名对象调用方法

Funcionalidades: não depende do objeto, só precisamos chamar suas propriedades ou métodos através do nome da classe

Bloco de código

  • Bloco de código nativo
  • Bloco de código estático
  • Exemplo de bloco de código / bloco de código de construção
  • Bloco de código síncrono (multithread)

Bloco de código nativo: o bloco de código no método

public class Main{
    
    
    public static void main(String[] args) {
    
    
        {
    
     //直接使用{}定义,普通方法块
            int x = 10 ;
            System.out.println("x1 = " +x);
        }
        int x = 100 ;
        System.out.println("x2 = " +x);
    }
}

Bloco de código estático: geralmente usado para inicializar propriedades de membros estáticos

//静态代码块
static {
    
    
count = 10;//只能访问静态数据成员
System.out.println("I am static init()!");
}

Bloco de código de instância: o bloco de código definido na classe, o bloco de código de construção é geralmente usado para inicializar variáveis ​​de membro de instância

//实例代码块
{
    
    
this.name = "bit";
this.age = 12;
this.sex = "man";
System.out.println("I am instance init()!");
}

Ordem de execução

  1. Bloco de código estático
  2. Bloco de código de exemplo
  3. Método de construção

Acho que você gosta

Origin blog.csdn.net/starry1441/article/details/113757382
Recomendado
Clasificación