Orientado a objetos --- classes e objetos

A diferença entre orientado a processos e orientado a objetos

Orientado para o processo, preste atenção ao processo e escreva os detalhes do código você mesmo.
Orientado a objetos presta atenção ao objeto. Ao escrever o código, consulte os métodos das classes existentes no jdk para realizar a função, em vez de escrevê-la você mesmo.

A relação entre classe e objeto

O que é uma aula?

Uma classe é uma coleção de atributos e comportamentos relacionados . É uma descrição de uma classe de coisas e é abstrata.
Atributos : o que (usando cachorro como exemplo, cor, raça, idade, nome)
corresponde à classe Java, os atributos são variáveis ​​de membro

String name;//名字
int age;//年龄

Comportamento : O que fazer (tome o cachorro como exemplo, comer, dormir, brincar)
corresponde à classe Java, o comportamento é o método membro
(nota: o método membro não escreve a palavra-chave estática !!!)

public void eat(){
    
    }//吃
public void sleep() {
    
    }//睡

O que é um objeto?

Os objetos são instâncias de uma classe de coisas e são concretos.

A classe é o modelo do objeto e o objeto é a entidade da classe.
A analogia pode ser comparada ao desenho de um telefone móvel, e o objeto pode ser comparado a um telefone móvel real.
Para atingir a funcionalidade, devemos instanciar um objeto específico com base na classe, ou seja, criar um objeto.

Criação e uso de objetos

1.
Importe o nome do pacote de importação do pacote. Nome da classe;
e a classe atual no mesmo pacote, você não pode importar o pacote
2. Crie o
formato:
nome da classe nome do objeto = nome da nova classe ();
3.
Use a variável de membro: nome do objeto. Variáveis ​​de
membro Use métodos de membro: nome do objeto. Método de membro (parâmetros)
(se você quiser usá-lo, use o nome do objeto. Quem)

Exemplo de exercício - definir uma classe para simular coisas de "telefone celular"

public class Phone {
    
    

    // 成员变量
    String brand; // 品牌
    double price; // 价格
    String color; // 颜色

    // 成员方法
    public void call(String who) {
    
    
        System.out.println("给" + who + "打电话");
    }

    public void sendMessage() {
    
    
        System.out.println("群发短信");
    }
}
public class Demo01PhoneOne {
    
    

    public static void main(String[] args) {
    
    
        // 根据Phone类,创建一个名为one的对象
        // 格式:类名称 对象名 = new 类名称();
        Phone one = new Phone();
      
        one.brand = "苹果";
        one.price = 8388.0;
        one.color = "黑色";
        System.out.println(one.brand); // 苹果
        System.out.println(one.price); // 8388.0
        System.out.println(one.color); // 黑色
        System.out.println("=========");

        one.call("乔布斯"); // 给乔布斯打电话
        one.sendMessage(); // 群发短信
    }

}

Gráfico de memória de um objeto

Insira a descrição da imagem aqui

Use o tipo de objeto como parâmetro do método

Quando um objeto é passado como parâmetro para um método, ele realmente passa o valor do endereço.

public class Demo04PhoneParam {
    
    

    public static void main(String[] args) {
    
    
        Phone one = new Phone();
        one.brand = "苹果";
        one.price = 5999.0;
        one.color = "玫瑰金";

        method(one); // 传递进去的参数其实就是地址值
    }

    public static void method(Phone param) {
    
    
        System.out.println(param.brand); // 苹果
        System.out.println(param.price); // 5999.0
        System.out.println(param.color); // 玫瑰金
    }

}

Use o tipo de objeto como o valor de retorno do método

public class Demo05PhoneReturn {
    
    

    public static void main(String[] args) {
    
    
        Phone two = getPhone();
        System.out.println(two.brand); // 苹果
        System.out.println(two.price); // 5999.0
        System.out.println(two.color); // 玫瑰金
    }

    public static Phone getPhone() {
    
    
        Phone one = new Phone();
        one.brand = "苹果";
        one.price = 5999.0;
        one.color = "玫瑰金";
        return one;
    }

}

Variáveis ​​locais e variáveis ​​de membro

1. A localização da definição é diferente
Variáveis ​​locais: dentro do método
Variáveis ​​membro: fora do método, escritas diretamente na classe

2. O escopo de ação é diferente
Variáveis ​​locais: só podem ser usadas em métodos, e não podem mais ser usadas quando os métodos estão fora
Variáveis-membro: toda a classe pode ser usada em geral.

3. Os valores padrão são diferentes.
Variáveis ​​locais: não há valor padrão. Se você quiser usá-lo, deve atribuir um valor manualmente.
Variáveis ​​de membro: se você não tiver um valor, haverá um padrão valor. As regras são iguais às matrizes.

4. A localização da memória é diferente
Variáveis ​​locais: localizadas na memória stack
Variáveis-membro: localizadas na memória heap

5. O ciclo de vida é diferente.
Variáveis ​​locais: nascem quando os métodos
são colocados na pilha e desaparecem quando os métodos são retirados da pilha Variáveis-membro: nascem quando os objetos são criados e desaparecem quando os objetos são coletados no lixo

public class Demo01VariableDifference {
    
    

    String name; // 成员变量

    public void methodA() {
    
    
        int num = 20; // 局部变量
        System.out.println(num);
        System.out.println(name);
    }

    public void methodB(int param) {
    
     // 方法的参数就是局部变量
        // 参数在方法调用的时候,必然会被赋值的。
        System.out.println(param);

        int age; // 局部变量
//        System.out.println(age); // 没赋值不能用

//        System.out.println(num); // 错误写法!
        System.out.println(name);
    }

}

O encapsulamento das três características da orientação a objetos

A manifestação de encapsulamento em Java:

  1. Método é um tipo de encapsulamento
  2. A palavra-chave privada também é um tipo de encapsulamento
  3. O encapsulamento é para ocultar algumas informações detalhadas, invisíveis para o mundo exterior, fáceis de modificar e aumentar a capacidade de manutenção do código.
  4. O encapsulamento pode restringir os usuários da manipulação irracional de atributos.

Caso: Ao definir a idade de Pessoa, é impossível evitar que um valor irracional seja definido.
Solução: Use a palavra-chave privada para modificar as variáveis ​​de membro que precisam ser protegidas.

Depois que private for usado para modificação, essa classe ainda poderá ser acessada à vontade.
No entanto, ele não pode ser acessado diretamente fora do escopo desta categoria!

Portanto, defina um par de métodos Getter / Setter para acessar indiretamente variáveis ​​de membro privado.

Devem ser regras de nomenclatura setXxx ou getXxx.
(Observação: para o valor booleano no tipo básico, o método Getter deve ser escrito na forma de isXxx e a regra setXxx permanece inalterada.)

  • 例如 : public boolean isMale () { return male; }

Para Getter, não pode haver parâmetros e o tipo de valor de retorno corresponde à variável de membro;
para Setter, não pode haver valor de retorno e o tipo de parâmetro corresponde à variável de membro.

public class Person {
    
    

    String name; // 姓名
    private int age; // 年龄

    public void show() {
    
    
        System.out.println("我叫:" + name + ",年龄:" + age);
    }

    // 这个成员方法,专门用于向age设置数据
    public void setAge(int num) {
    
    
        if (num < 100 && num >= 9) {
    
     // 如果是合理情况
            age = num;
        } else {
    
    
            System.out.println("数据不合理!");
        }
    }

    // 这个成员方法,专门用于获取age的数据
    public int getAge() {
    
    
        return age;
    }

}

public class Demo03Person {
    
    

    public static void main(String[] args) {
    
    
        Person person = new Person();
        person.show();

        person.name = "小明";
        person.setAge(20);
        person.show();
    }

}

A função desta palavra-chave

Quando a variável local do método e a variável membro da classe têm o mesmo nome, a variável local é preferida de acordo com o "princípio de proximidade".
Se você precisa acessar as variáveis ​​de membro nesta classe, você precisa usar o formato:
this. Member variable name

"Por quem o método é chamado, quem quer que seja."

public class Person {
    
    

    String name; // 我自己的名字

    // 参数name是对方的名字
    // 成员变量name是自己的名字
    public void sayHello(String name) {
    
    
        System.out.println(name + ",你好。我是" + this.name);
        //System.out.println(this);
    }

}
public class Demo01Person {
    
    

    public static void main(String[] args) {
    
    
        Person person = new Person();
        // 设置我自己的名字
        person.name = "老哈";
        person.sayHello("小哈");

       // System.out.println(person); // 地址值
    }

}

Insira a descrição da imagem aqui

Método de construção

O método de construção é um método usado especificamente para criar um objeto.Quando criamos um objeto por meio da palavra-chave new, estamos na verdade chamando o método de construção.
Formato:
nome da classe pública (nome do parâmetro do tipo de parâmetro) { corpo do método }

Precauções:

  1. O nome do construtor deve ser exatamente igual ao nome da classe e o caso deve ser o mesmo
  2. Não escreva o tipo de valor de retorno no construtor, e nem mesmo escreva void
  3. O construtor não pode retornar um valor de retorno específico
  4. Se nenhum método de construção for escrito, o compilador terá um método de construção padrão, sem parâmetros, o corpo do método não faz nada.
public class Student {
public Student() {}
}
  1. Depois de escrever pelo menos um construtor, o compilador não terá mais um construtor padrão.
  2. O método de construção também pode ser sobrecarregado.
    (Sobrecarga: o nome do método é o mesmo, mas a lista de parâmetros é diferente.)
public class Student {
    
    

    // 成员变量
    private String name;
    private int age;

    // 无参数的构造方法
    public Student() {
    
    
        System.out.println("无参构造方法执行啦!");
    }

    // 全参数的构造方法
    public Student(String name, int age) {
    
    
        System.out.println("全参构造方法执行啦!");
        this.name = name;
        this.age = age;
    }

    // Getter Setter
    public void setName(String name) {
    
    
        this.name = name;
    }

    public String getName() {
    
    
        return name;
    }

    public void setAge(int age) {
    
    
        this.age = age;
    }

    public int getAge() {
    
    
        return age;
    }

}
public class Demo02Student {
    
    

    public static void main(String[] args) {
    
    
        Student stu1 = new Student(); // 无参构造
        System.out.println("============");

        Student stu2 = new Student("小哈", 20); // 全参构造
        System.out.println("姓名:" + stu2.getName() + ",年龄:" + stu2.getAge());
        // 如果需要改变对象当中的成员变量数据内容,仍然还需要使用setXxx方法
        stu2.setAge(21); // 改变年龄
        System.out.println("姓名:" + stu2.getName() + ",年龄:" + stu2.getAge());

    }

}

Insira a descrição da imagem aqui

Defina uma classe padrão

Uma classe padrão geralmente tem os seguintes quatro componentes:

  1. Todas as variáveis ​​de membro devem ser modificadas com a palavra-chave privada
  2. Escreva um par de métodos Getter / Setter para cada variável membro
  3. Escreva um método de construção sem parâmetros
  4. Escreva um método de construção de parâmetros completos

Essa classe padrão também é chamada de Java Bean

ublic class Student {
    
    

    private String name; // 姓名
    private int age; // 年龄
    //定义完成员变量之后,光标放在下面的空白层,按住Alt+Insert键,选择"Getter和Setter" 就会自动生成Getter和Setter方法


    public Student() {
    
    
    }

    public Student(String name, int age) {
    
    
        this.name = name;
        this.age = age;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public int getAge() {
    
    
        return age;
    }

    public void setAge(int age) {
    
    
        this.age = age;
    }
}

Ao escrever o código, após definir as variáveis ​​membro, coloque o cursor na camada em branco abaixo, segure Alt + Insert para
selecionar "Getter e Setter", segure Shift para selecionar tudo e clique em ok, os métodos Getter e Setter serão automaticamente gerado.
Selecione "Construtor" e clique em Selecionar Nenhum para gerar automaticamente um método sem parâmetros; mantenha pressionada a tecla Shift para selecionar tudo e clique em ok para gerar automaticamente um método com parâmetros completos

Insira a descrição da imagem aqui

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Tecla Alt + Insert (geralmente à esquerda da tecla Delete), você também pode encontrar código-Gerar na barra de menu
Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/weixin_51492999/article/details/114946335
Recomendado
Clasificación