[El camino para convertirse en rey de Java] Capítulo 10: Java SE (clases y objetos)

384df52918f240d18798f593c83f65a7.gif

contenido

1. Clases y Objetos

1. Orientado a objetos, orientado a procesos

definir clase

miembros de la clase 

 variable miembro estática

 Se accede a las variables de miembros estáticos a través de classname.Propiedades/métodos de miembros estáticos.

Dentro de un método normal, no se pueden definir variables estáticas.

Los métodos estáticos no pueden definir variables estáticas

       ¿Por qué la función principal es estática?

encapsulación de implementación privada

esto representa una referencia al objeto actual

Método de construcción

la diferencia de esto

bloque de código


 

 

1. Clases y Objetos

1. Orientado a objetos, orientado a procesos

¿Qué es una clase?

¿Qué es un objeto?

¡Estos son dos conceptos muy abstractos! ! ! ! ! ! ! !

Antes de aclarar los conceptos de clases y objetos, hablemos de lo que es orientado a objetos y orientado a procesos , para así introducir nuestros conceptos de clases y objetos.

Orientado al proceso: tome la ropa como ejemplo: tome un lavabo, ponga agua, ponga ropa, ponga detergente en polvo, frote las manos, cambie el agua, escurra y seque la ropa.Este proceso está orientado al proceso. 

Orientado a objetos: Tome la ropa como ejemplo: una persona pone la ropa en la lavadora, vierte el detergente en polvo y la cuelga para que se seque. No necesita preocuparse por cómo se realiza todo el proceso de lavado de ropa. Ellos solo necesita encontrar el objeto, crear el objeto y usar el objeto. Por ejemplo, cuando usamos la función toString, no nos importa el proceso de implementación específico de la función toString. Podemos entregarlo directamente a Arrays para que nos ayude a implementarlo. Esto está orientado a objetos.

¿De dónde vienen los objetos? Los objetos vienen de las clases. Los objetos vienen solo después de que existen las clases. Las personas, las lavadoras y los detergentes para la ropa son clases separadas. Los objetos se crean a partir de clases, y los llamamos creación de objetos. Los objetos se crean, cada objeto tiene algunos comportamientos y algunas propiedades, y luego los objetos pueden completarse entre sí. Esto es orientado a objetos y orientado a procesos.

Para estar orientado a objetos, tenemos que encontrar objetos, y los objetos provienen de las clases ¿De dónde provienen las clases? Necesitamos abstraer. Por ejemplo: todos somos personas, y las palabras de las personas tienen atributos comunes, como nombre, género, edad, comer, dormir, todos tendrán estos, que es equivalente a una plantilla, a través de la cual se pueden generar una gran cantidad de objetos, estos los objetos tienen estas mismas propiedades. Es abstraer a esta persona y crear objetos por esta persona, y esta persona es una clase. Si realmente quieres a esa persona, déjala ser un objeto y una entidad, necesitas crearla y crearla a través de algo nuevo.

definir clase

class Person{

    
}//定义一个类,这个类叫Person,类名一定要是大驼峰





class Person{
    //类里面包含字段,也叫做属性,也叫做成员变量
    //也包含方法
    //一个类就是由方法和字段组成的
    public String name;//属性
    public int age;//属性
    //什么是方法?可以解读为这个人的行为
    public void eat(){
        System.out.println(name+" 正在吃饭");
    }
    public void sleep(){
        System.out.println(name+" 正在睡觉");
    }

}

El proceso de crear un objeto a partir de una clase, lo llamamos instanciación en terminología, e instanciamos el objeto a través de la nueva palabra clave.

public class TestDemo {
    public static void main(String[] args) {
        Person person//定义一个变量person,此时类Person也相当于类型的意思,和int a = 10,a的类型是int一样

    }
}

La variable persona definida por la clase Persona es una variable de referencia, lo que significa que su valor inicial puede ser nulo

public class TestDemo {
    public static void main(String[] args) {
        Person person = null;

    }
}

objeto instanciado

public class TestDemo {
    public static void main(String[] args) {
        Person person = new Person();//由类Person实例化了一个对象

    }
}

Una clase puede instanciar múltiples objetos.

public class TestDemo {
    public static void main(String[] args) {
        Person person = new Person();//由类Person实例化了一个对象
        Person person1 = new Person();
        Person person2 = new Person();
        Person person3 = new Person();
        Person person4 = new Person();

    }
}

miembros de la clase 

Variable miembro ordinaria

Los campos se definen fuera del método interno de la clase, si se definen dentro del método se denominan variables locales y si se definen fuera del método se denominan variables miembro. 

 Cómo acceder a las variables miembro, las variables miembro se dividen en dos tipos: (variables miembro ordinarias, variables miembro estáticas). Se accede a las variables miembro ordinarias por referencia.

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16

Las variables miembro tienen un valor predeterminado si no se les asigna un valor inicial

 Cómo asignar valores a las variables miembro

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16

Si es una variable miembro ordinaria, su memoria está en el objeto, no compartida por todos los objetos. Cada objeto tiene su propio nombre y edad.

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16

 

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16

Los métodos también se dividen en dos tipos: uno se llama método de miembro ordinario y el otro se llama método de miembro estático.

Se accede a los métodos de miembros ordinarios de la misma manera, y se accede a mis métodos a través de referencias a objetos.

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16

 variable miembro estática

Las variables modificadas por estática se denominan variables miembro estáticas, también denominadas variables de clase, y se colocan en el área de método.

 Se accede a las variables de miembros estáticos a través de classname.Propiedades/métodos de miembros estáticos.

independiente del objeto

class Person{

    public String name;
    public int age;

    public static int count;

    public void eat(){
        System.out.println(name+" 正在吃饭");
    }
    public void sleep(){
        System.out.println(name+" 正在睡觉");
    }

}

public class TestDemo {
    public static void main(String[] args) {
        Person.count++;
        System.out.println(Person.count);
        System.out.println("================");
        Person.count++;
        System.out.println(Person.count);

    }
}

imprimir resultado;

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16

Count es una variable miembro estática modificada por estática, que se coloca en el área de métodos, no pertenece a un objeto, pero pertenece a una clase. El acceso correcto a las variables o métodos de miembros estáticos solo requiere el nombre de la clase. Las variables/métodos de miembros estáticos están bien. Todas las cosas estáticas solo se almacenan en el área de métodos, por lo que agregar 2 veces es el conteo en sí mismo, por lo que la segunda impresión El resultado es 2.

Dentro de un método normal, no se pueden definir variables estáticas.

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16

 1. La variable definida por estática es una variable de clase y pertenece a la clase (la definición dentro del método pertenece al método, por lo que es incorrecta)

2. La invocación del método eat requiere que se invoque la referencia correspondiente. Pero si puede definir variables estáticas, la clase Person puede llamarse, por lo que las dos son directamente contradictorias, eat necesita la referencia correspondiente para llamar. size solo necesita que se llame a la clase. Entonces, dentro de un método normal, las variables estáticas no se pueden definir.

Los métodos estáticos no pueden definir variables estáticas

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16  La variable definida estáticamente es una variable de clase, que pertenece a la clase (si está definida dentro del método, pertenece al método, lo que no se puede hacer, por lo que está mal)

Resumen: las variables miembro estáticas no se pueden definir en los métodos 

Es posible llamar a métodos estáticos en métodos ordinarios

class Person{

    public String name;
    public int age;

    public static int count;

    public void eat(){

        System.out.println(name+" 正在吃饭");
    }
    public void sleep(){
        staticFunc();
        System.out.println(name+" 正在睡觉");
    }
    public static void staticFunc(){
        System.out.println("static::func");
    }

}

public class TestDemo {
    public static void main(String[] args) {
        Person person = new Person();
         person.eat();
         person.sleep();
    }
}

 imprimir resultado:

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16

 No se puede llamar a un método normal dentro de un método estático

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16

 Los métodos normales no se pueden llamar dentro de los estáticos, porque los métodos estáticos no dependen de los objetos y se pueden llamar a través del nombre de la clase, pero los métodos ordinarios no se pueden llamar sin objetos.

       ¿Por qué la función principal es estática?

                 marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16

 Una referencia no puede apuntar a varios objetos al mismo tiempomarca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16

¿La referencia está definitivamente en la pila? Ciertamente no

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16 Mira la línea verde, dibuja el análisis

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16

La persona en minúsculas pertenece a la variable miembro de la clase TestDemo 

última modificación

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16

encapsulación de implementación privada

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

Una variable de miembro o un método de miembro modificado por público puede ser utilizado directamente por la persona que llama a la clase.

La persona que llama a la clase no puede utilizar una variable miembro o un método miembro modificado por privado.

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16  

Proporcionar una interfaz

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16 

 imprimir resultado:

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16

 

 

esto representa una referencia al objeto actual

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16 

Método de construcción

Método constructor: el nombre del método y el nombre de la clase son iguales, y el método constructor es especial y no tiene valor de retorno

¿Para qué sirve el constructor? Necesitamos saber que la generación de un objeto (la instanciación del objeto) se divide en varios pasos, 1. Asignar memoria para el objeto, 2. Llamar al constructor apropiado.

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16

4720b171695a4d61cama004a27b44b813.png Este es un constructor

El modificador de acceso anterior puede ser público,

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16

 Llame al constructor:

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16

imprimir resultado:

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16 marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16

Constructores sin parámetros y con uno y dos parámetros

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16 Llame al constructor:

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16 

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16

la diferencia de esto

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16 

El primero:

16243bfef65f4bc2ae826a9d72d35292.png 

 El segundo:

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_17, color_FFFFFF, t_70, g_se, x_16Representa el método eat del objeto actual.

 El tercero:

llamar al constructor sin argumentos,

marca de agua, type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_19,color_FFFFFF,t_70,g_se,x_16

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16 imprimir resultado:

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16

Esta función debe colocarse en la primera línea y solo puede almacenarse en el constructor

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16

bloque de código

 marca de agua, type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_13,color_FFFFFF,t_70,g_se,x_16

Bloque de código nativo:

dos corchetes

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16 Bloques de código de ejemplo y bloques de código estático:

marca de agua, tipo_d3F5LXplbmhlaQ, sombra_50, texto_Q1NETiBAS-WqvuKAjQ==, tamaño_20, color_FFFFFF, t_70, g_se, x_16

 

No importa cuántos objetos se generen, el bloque de código estático solo se ejecutará una vez y se ejecutará primero. Después de que se ejecuta el bloque de código estático, se ejecuta el bloque de código de instancia (bloque de constructor) y luego se ejecuta el constructor. 

Demasiado cansado, ¡adiós! ! ! ! ! !

 ae7661cb719d4f15b6630f01658365e8.gif

 

 

Supongo que te gusta

Origin blog.csdn.net/m0_64397675/article/details/123324771
Recomendado
Clasificación