Clases y objetos detallados en java

Orientado a procesos y orientado a objetos

  • El lenguaje C está orientado a procesos, enfocándose en el proceso, analizando los pasos para resolver el problema y resolviendo gradualmente el problema a través de llamadas a funciones.
  • JAVA se basa en la orientación a objetos, se centra en objetos, divide una cosa en diferentes objetos y la completa mediante la interacción entre objetos.
  • Orientado al proceso se centra en el proceso, y el comportamiento involucrado en todo el proceso es la función.
  • Orientado a objetos se centra en el objeto, es decir, el sujeto involucrado en el proceso de participación. Es a través de la lógica conectar las funciones una por una.

[Concepto orientado a objetos]

  1. La orientación a objetos es una forma de pensar acerca de los problemas, es una forma de pensar. Por ejemplo: conceptos y ejemplos. Teoría y práctica. Nombre y realidad y así sucesivamente.
  2. Una clase es un término general para una clase de objetos. El objeto es un ejemplo de este tipo de reificación.
  3. Los beneficios de la orientación a objetos: para simplificar las cosas complejas, basta con enfrentarse a un objeto.

【Diseño orientado a objetos】

El diseño orientado a objetos capta una experiencia importante: ¡quién es el propietario de los datos, quién proporciona métodos externos para manipular los datos (privados)! (La parte pasiva es la propietaria de los datos y la parte activa es el ejecutor)

Durante el desarrollo: encuentre objetos, construya objetos, use objetos y mantenga relaciones entre objetos.

Resumen: Orientado a objetos es una forma de describir cosas en el mundo objetivo con código (clases). Una clase contiene principalmente los atributos y comportamientos de una cosa.

Instanciación de clases y clases.

Una clase es un término general para una clase de objetos. Un objeto es una instancia de este tipo de cosificación,
una clase puede instanciar innumerables objetos.

A continuación, usamos un ejemplo para comprender la instanciación de clases y clases.

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();
    }
}

Variable miembro:
definida dentro de la clase, fuera del método se
accede a través de referencias de objetos.
Si no se inicializa, su valor es un valor predeterminado predeterminado (valor predeterminado cero)

  • Si es un tipo de referencia, entonces el valor es nulo (incluidas matrices, cadenas de cadenas, etc.)
  • Si es un tipo simple, entonces el valor es el valor predeterminado correspondiente a su tipo
byte corto En t largo flotador doble carbonizarse booleano
0 0 0 0L 0.0f 0.0 '\ u0000' hexadecimal (también se puede tratar como 0) falso

Comportamiento / Método:
[eat () sleep ()] es un método de miembro de instancia
func () es un método de miembro estático

¿Cómo puedo acceder a las variables miembro estáticas y métodos miembros? Como
Inserte la descripción de la imagen aquí
se puede ver aquí, no hay necesidad de crear instancias de objetos para los estáticos ! ! !

Llamada directa

Nombre de clase. Variable de miembro estático / método de miembro estático

Para resumir estática:

  1. Para propiedades de miembros estáticos o métodos de miembros estáticos, no depende del objeto .
  2. Solo hay una variable miembro estática, que se almacena en el área de métodos.
  3. No se puede acceder a datos no estáticos dentro de un método estático.

La estructura de almacenamiento de la clase instanciada

Inserte la descripción de la imagen aquí

Formas de inicializar variables miembro

1. Inicialización en el lugar (inicialización ofensiva dentro de la clase)
Inserte la descripción de la imagen aquí

2. Inicialización predeterminada
Inserte la descripción de la imagen aquí
3. Inicialización fuera de clase (usado más)

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;
    }
}

Encapsulamiento

Cuando escribimos código, a menudo hay dos roles involucrados: implementador de clase y llamador de clase. La esencia de la encapsulación es permitir que el llamador de la clase no tenga que entender cómo el implementador de la clase implementa la clase, siempre que sepa cómo Solo usa la clase.

Esto reduce los costos de aprendizaje y uso de los usuarios de la clase, reduciendo así la complejidad.

Las dos palabras clave privado / público significan "control de acceso".

  • Las variables de miembro o los métodos de miembro modificados por public pueden ser usados ​​directamente por el llamador de la clase.
  • Las variables de miembro o los métodos de miembro modificados por privado no pueden ser utilizados por el llamador de la clase.

por ejemplo

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();
    }
}
  • En este punto, el campo se ha decorado con privado. La persona que llama a la clase (en el método principal) no puede usarlo directamente. En su lugar, se necesita el método show. En este momento, el usuario de la clase no necesita comprender los detalles de implementación de la clase Person.
  • Al mismo tiempo, si el implementador de la clase modifica el nombre del campo, la persona que llama a la clase no necesita realizar ningún cambio (la persona que llama a la clase no tiene acceso a campos como el nombre y la edad)

métodos getter y setter

Getter: el método para obtener el valor de la propiedad
setter: el método para modificar el valor de la propiedad
Usamos estos dos métodos para encapsular las propiedades de la clase, a fin de lograr el propósito de acceder a las propiedades

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 palabra clave

Podemos ver el método setter en el código ahora mismo.

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

Esto representa la referencia del objeto actual y puede usarlo para acceder a los campos y métodos del objeto.
Inserte la descripción de la imagen aquí
Tres usos:

  1. this.attribute; // Accede a los atributos del objeto actual
  2. this. method; // llamar al método del objeto actual
  3. this (); // Llama al método de construcción del objeto actual (ps: debe colocarse en la primera línea, y solo puede haber un método de construcción dentro)

Método de construcción

El método de construcción es un método especial que se llamará automáticamente cuando se cree una instancia de un nuevo objeto utilizando la palabra clave new para completar la operación de inicialización.

¿Cuántos pasos hay para instanciar / crear un objeto ?
Student stu = new Student (); // Crea una instancia de un objeto en
dos pasos

  1. Asignar memoria para el objeto
  2. Llame al método de construcción apropiado, indicando que hay más de un método de construcción, tal vez más

Reglas gramaticales

  1. El nombre del método debe ser el mismo que el nombre de la clase.
  2. El constructor no tiene declaración de tipo de valor de retorno
  3. Debe haber al menos un método de construcción en cada clase (si no está claramente definido, el sistema generará automáticamente una construcción sin 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);

Si imprime la referencia, él llamará al método toString por defecto y ejecutará dicho resultado:
Inserte la descripción de la imagen aquí
Podemos reescribir el método toString para imprimir el resultado que queremos.
Por ejemplo:

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);
    }
}

Inserte la descripción de la imagen aquí
De esta manera, la impresión de la referencia se producirá de acuerdo con el contenido deseado.

Objeto anónimo

El anonimato simplemente significa un objeto sin nombre.

  • Los objetos a los que no se hace referencia se denominan objetos anónimos.
  • Los objetos anónimos solo se pueden utilizar al crear objetos.
  • Si un objeto se usa solo una vez, no es necesario que lo use más adelante, puede considerar usar un objeto anónimo
new Person("caocao",19).show();//通过匿名对象调用方法

Características: no depende del objeto, solo necesitamos llamar a sus propiedades o métodos a través del nombre de la clase

Bloque de código

  • Bloque de código nativo
  • Bloque de código estático
  • Ejemplo de bloque de código / bloque de código de construcción
  • Bloque de código síncrono (multiproceso)

Bloque de código nativo: el bloque de código en el 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);
    }
}

Bloque de código estático: generalmente se usa para inicializar propiedades de miembros estáticos

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

Bloque de código de instancia: el bloque de código definido en la clase, el bloque de código de construcción se usa generalmente para inicializar variables de miembro de instancia

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

Orden de ejecución

  1. Bloque de código estático
  2. Bloque de código de ejemplo
  3. Método de construcción

Supongo que te gusta

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