Notas de estudio: Conceptos básicos de Java del programador Dark Horse (Parte 1)

Introducción al lenguaje Java para los capítulos de dominio.

  1. Notas de estudio: Java-Basics (Parte 1)_blog-CSDN de blog de ljtxy.love
  2. Notas de estudio: Java-Intermedio (Parte 2)_Blog-CSDN de blog de ljtxy.love
  3. Notas de estudio: Java avanzado (tercera parte): se busca programador
  4. Notas de estudio: Capítulo avanzado de Java (1) (Parte 4) Blog-CSDN de _ljtxy.love
  5. Notas de estudio: Java-Avanzado (2) (Parte 5) - Se busca programador
  6. Notas de estudio: nuevas funciones del blog Blog-CSDN de Java8_ljtxy.love

Directorio de artículos

1. Información general

Resumen de notas:

  1. Definición: Java es un lenguaje de alto nivel . Está diseñado como un lenguaje de programación orientado a objetos de propósito general, multiplataforma y portátil.
  2. Características: Fácil de aprender, programación orientada a objetos , independencia de plataforma, seguridad, alto rendimiento, soporte multiproceso, código abierto y gratuito
  3. Principio multiplataforma: Java proporciona diferentes máquinas virtuales para diferentes sistemas operativos . Para diferentes sistemas operativos, instale diferentes máquinas virtuales.
  4. Tres versiones principales:
    • JavaSE: SE es la edición estándar, que incluye la biblioteca de clases principal de Java y se utiliza principalmente para desarrollar aplicaciones de escritorio.
    • JavaME: ME es una versión micro, que contiene la biblioteca de clasificación central SE y tiene sus propias extensiones, y se utiliza principalmente para el desarrollo integrado móvil .
    • JavaEE: EE es la versión empresarial, que incluye SE y extensiones (Servlet, JDBC, etc.), utilizada principalmente para desarrollar programas de red distribuidos.
  5. JRE, JVM, JDK:
    • JVM (máquina virtual Java), máquina virtual Java
    • JRE (Java Runtime Environment), el entorno de ejecución de Java , incluye la biblioteca de clases principal de JVM y Java (Java API)
    • JDK (Java Development Kit) se denomina herramienta de desarrollo Java, incluido JRE y herramientas de desarrollo.
  6. Descargar e instalar
  7. Introducción al catálogo
  8. Configuración de variables de entorno

1.1 Definición

Java es un lenguaje de programación informática ampliamente utilizado lanzado en 1995 por Sun Microsystems (posteriormente adquirido por Oracle). Está diseñado como un lenguaje de programación orientado a objetos de propósito general, multiplataforma y portátil.

Reponer:

  • Lenguaje: el medio de expresión utilizado por las personas para comunicarse entre sí.

  • Lenguaje informático: un lenguaje especial para el intercambio de información entre humanos y computadoras.

1.2 Características

  1. Fácil de aprender: Java utiliza una sintaxis similar a C++, pero elimina algunas características complejas que pueden provocar errores fácilmente, lo que facilita su aprendizaje.
  2. Programación orientada a objetos: Java es un lenguaje de programación completamente orientado a objetos, lo que significa que todos los elementos del programa son objetos y la lógica del programa se realiza a través de la interacción entre objetos .
  3. Multiplataforma : los programas Java se pueden ejecutar en diferentes plataformas porque los programas Java se ejecutan a través de JVM (Java Virtual Machine), que puede ejecutar el mismo código Java en diferentes plataformas.
  4. Seguridad : Java es un lenguaje de programación altamente seguro ya que tiene mecanismos de seguridad integrados como administración de memoria, manejo de excepciones y control de acceso.
  5. Alto rendimiento : aunque Java es un lenguaje interpretado, puede mejorar el rendimiento mediante la tecnología JIT (compilación Just-In-Time).
  6. Soporte de subprocesos múltiples : Java proporciona soporte de subprocesos múltiples integrado, lo que permite a los programadores escribir fácilmente programas de subprocesos múltiples.
  7. Código abierto y gratuito: Java es un lenguaje de programación gratuito y de código abierto, y sus herramientas de desarrollo y entorno operativo se pueden obtener a través de muchos canales.

El principio del lenguaje Java multiplataforma.

  • En realidad, el sistema operativo en sí no comprende el lenguaje Java.
  • Pero para diferentes sistemas operativos, Java proporciona diferentes máquinas virtuales .

Insertar descripción de la imagen aquí

imagen-20230227102000755

1.3 tres versiones principales

JavaSE、JavaME、JavaEE

1.3.1 Edición estándar de JavaSE

​ JavaSE(Java Platform, Standard Edition),Java语言的(标准版),用于桌面应用的开发,是其他两个版本的基础。

1.3.2JavaME微型版

​ JavaME(Java Platform, Micro Edition),Java语言的小型版,用于嵌入式消费类电子设备或者小型移动设备的开发。(嵌入式,电视机,微波炉,电视机等),其中最为主要的还是小型移动设备的开发(手机)。渐渐的没落了,已经被安卓和IOS给替代了。但是,安卓也是可以用Java来开发的。

1.3.3JavaEE企业版

​ JavaEE(Java Platform, Enterprise Edition)用于Web方向的网站开发。(主要从事后台服务器的开发)在服务器领域,Java是当之无愧的龙头老大。

Insertar descripción de la imagen aquí

1.3JDK安装

1.3.1概述

  • JVM(Java Virtual Machine),Java虚拟机
  • JRE(Java Runtime Environment),Java运行环境,包含了JVM和Java的核心类库(Java API)
  • JDK(Java Development Kit)称为Java开发工具,包含了JRE和开发工具

Insertar descripción de la imagen aquí

说明:

​ 当我们开发时,我们只需安装JDK即可,它包含了java的运行环境和虚拟机。当我们只运行时只需要装JRE即可

1.3.2 Casos de uso básicos

ilustrar:

Obtenga el JDK a través del sitio web oficial, URL: Descargas de Java | Oracle China

Aviso:

  • La ruta de instalación no debe contener caracteres chinos, espacios u otros símbolos especiales.
  • Todas las recomendaciones futuras de software relacionadas con el desarrollo se instalarán en la misma carpeta para facilitar su gestión.

Paso 1: descargue JDK
Insertar descripción de la imagen aquí

Suplemento: directorio de instalación

Insertar descripción de la imagen aquí

  • Lo anterior es el directorio de instalación de JDK 17. La siguiente es la explicación del directorio de JDK.
nombre del directorio ilustrar
papelera En esta ruta se almacenan varios comandos de herramientas del JDK . javac y java se colocan en este directorio.
confinar Los archivos de configuración relevantes del JDK se almacenan en esta ruta .
incluir Algunos archivos de encabezado específicos de la plataforma se almacenan en esta ruta .
jmods En esta ruta se almacenan varios módulos del JDK .
legal Los documentos de autorización para cada módulo JDK se almacenan en esta ruta .
biblioteca Algunos paquetes JAR complementarios para herramientas JDK se almacenan en esta ruta .

Paso 2: configuración de variables de entorno

ilustrar:

Para desarrollar programas Java, debe utilizar las herramientas de desarrollo proporcionadas por JDK (como javac.exe, java.exe y otros comandos), y estas herramientas se encuentran en el directorio bin del directorio de instalación de JDK. configure variables de entorno, entonces estos comandos solo se pueden usar en el directorio bin del directorio de instalación de JDK. Úselos en el directorio bin y queremos usarlos en cualquier directorio, por lo que necesitamos configurar variables de entorno .

1. Configurar JAVA_HOMEel entorno

imagen-20230809140945961

2. Configurar PATHel entorno

Insertar descripción de la imagen aquí

Reponer:

  • JAVA_HOME : indica al sistema operativo dónde está instalado el JDK (otras tecnologías en el futuro usarán esto para encontrar el JDK)
  • Ruta : Indique al sistema operativo dónde están instalados los comandos javac (compilación) y java (ejecución) proporcionados por JDK.

Paso 3: demostración

  • Cree una nueva ventana de nombres de cmd e ingresejava --version

imagen-20230809141449697

ilustrar:

​ Aquí puedes ver que la versión JDK es 17

2. Caso de uso básico: HelloWorld

Resumen de notas:

El proceso de desarrollo y ejecución del programa Java requiere tres pasos: escribir el programa, compilar el programa y ejecutar el programa.

ilustrar:

HelloWorldDemostrar el flujo de ejecución básico de procesos Java a través de programas.

Paso 1: crear un programa Java

  • Crea un nuevo HelloWorld.classarchivo y escribe
class HelloWorld {
    
    
    public static void main(String[] args) {
    
    
        System.out.println("Hello, World!"); 
    }
}

Paso 2: compila el programa Java

ilustrar:

Esjavac la herramienta de línea de comandos del compilador de Java, que se utiliza para compilar archivos de código fuente de Java ( .javaque terminan con la extensión) en archivos de código de bytes de Java ( .classque terminan con la extensión). Los archivos de código de bytes de Java se pueden ejecutar en la máquina virtual Java (JVM).

  • Abra una ventana de línea de comando y ejecute javacel comando
javac HelloWorld.java

Descripción: resultado

Insertar descripción de la imagen aquí

Paso 3: ejecutar el archivo de código de bytes

  • Abra una ventana de línea de comando y ejecute javacomandos en el directorio actual
java HelloWorld

Descripción: resultado

Insertar descripción de la imagen aquí

Aviso:

Al ejecutar archivos de clase, no se requiere ningún .classsufijo

3. Gramática básica

Resumen de notas:

  1. Comentarios : comentarios de una sola línea, comentarios de varias líneas, comentarios de documentos

  2. Palabras clave:

    • Definición: palabras en inglés a las que Java les da un significado específico
    • clase、estática、……
  3. Literal:

    • Definición: El formato de escritura de datos en el programa.
    • 666、”Mi Alma“、……
  4. variable:

    • Definición: Un contenedor para almacenamiento temporal de datos.
    • int a = 16;、doble b = 10.1;、……
    • Nota: Las variables en Java deben tener tipo de variable, nombre de variable y terminar con punto y coma.
  5. tipo de datos:

    • Tipos de datos básicos : byte, short, int, long, float, double, char y boolean
    • Tipos de datos de referencia : cadenas, matrices, clases e interfaces,…
    • diferencia :
      1. Los tipos de datos primitivos se almacenan en la pila , mientras que los tipos de datos de referencia se almacenan en el montón.
      2. Las variables de tipos de datos básicos son independientes entre sí , mientras que las variables de tipos de datos de referencia pueden compartir el mismo objeto.
  6. Identificador:

    • Definición: Los identificadores son nombres que se utilizan para nombrar elementos del programa como variables, métodos, clases e interfaces.
    • Aviso:
      1. Debe constar de números, letras, **guión bajo_ y signo de dólar $**.
      2. El número no puede comenzar con
      3. No puede ser una palabra clave
      4. distingue mayúsculas y minúsculas
    • Detalles de la convención de nomenclatura de Alibaba
  7. Modificadores de permiso:

    • Definición: el modificador de permiso es una palabra clave en Java que se utiliza para controlar los permisos de acceso a clases, métodos y variables.
    • Alcance del permiso: private< 默认/空着不写< protected<public
  8. Bolsa:

    • Definición: Un paquete es un mecanismo para organizar y gestionar clases de Java.

    • Convenciones de nombres:

      路径名.路径名.xxx.xxx
      // 例如:com.itheima.oa
      
    • Importación del paquete: no es necesario importar el paquete bajo el paquete java.lang. Debido al entorno de desarrollo de Java, el paquete predeterminado es el paquete lang.

3.1 Notas

3.1.1 Descripción general

Los comentarios son explicaciones y explicaciones del código.

3.1.2 Clasificación

Hay tres tipos de comentarios en Java:

  • Comentario de una sola línea:
// 这是单行注释文字
  • Comentarios de varias líneas:
/*
这是多行注释文字
这是多行注释文字
这是多行注释文字
*/

Aviso:

¡Los comentarios de varias líneas no se pueden anidar!

  • Comentarios de documentación (aún no utilizados)
/**
这是多行注释文字
这是多行注释文字
这是多行注释文字
*/

Descripción: Consejos de uso

  • Si queremos explicar el código, podemos usar comentarios.
  • Cuando el contenido del comentario es relativamente pequeño y se puede escribir en una línea, puede utilizar un comentario de una sola línea.
  • Si el contenido del comentario es relativamente grande y debe escribirse en varias líneas, puede utilizar comentarios de varias líneas.

3.2 Palabras clave

3.2.1 Descripción general

Las palabras clave de Java son palabras en inglés a las que Java les da un significado específico. Después de escribir palabras clave en el código, cuando el programa se esté ejecutando, sabremos qué hacer.

3.2.2 Clasificación

Las palabras clave de Java son vocabulario predefinido con significado especial en el lenguaje de programación, estas palabras clave se utilizan para controlar la estructura, el flujo y el comportamiento del programa.

Aviso

Hay muchas palabras clave, por lo que no es necesario recordarlas con atención.

  1. Palabras clave modificadoras : public, protected, private, static, final,abstract
  2. Palabras clave de control de acceso : public, protected, private, default(predeterminado)
  3. Palabras clave de clase, interfaz y paquete : , class, interface, enum, package, , import,extendsimplements
  4. Palabras clave del método : void, return, this,super
  5. Palabras clave de control de procesos : if, else, switch, case, , default, while, do, for, break,continuereturn
  6. Palabras clave de manejo de excepciones : try, catch, finally, throw,throws
  7. Palabras clave lógicas : true, false,null
  8. Otras palabras clave : new, instanceof, synchronized, transient, volatile,assert

3.2.3 Demostración de palabras clave de caso de uso básico

  • ClassClase Esta palabra clave indica la definición de una clase.
public class HelloWorld{
    
    
    
}

ilustrar:

  • Explicación: clase significa definir una clase

  • Nombre de clase: Hola Mundo

  • Las llaves después de HelloWorld indican el alcance de esta clase.

3.3 Literales

3.3.1 Descripción general

Los literales de Java son valores constantes utilizados directamente en programas y que representan valores fijos de varios tipos de datos. Los literales pueden ser valores constantes de tipos de datos como números enteros, números de punto flotante, caracteres y cadenas, y aparecen directamente en el código sin cálculo ni conversión.

3.3.2 Clasificación

  1. Literal entero : representa un valor entero y puede usar notación decimal, octal (comenzando con 0) y hexadecimal (comenzando con 0x o 0X). Por ejemplo: 42, 012, 0xFF.
  2. Literal de número de punto flotante : representa valores de punto flotante, incluidos números de punto flotante ordinarios y notación científica. Por ejemplo: 3.14, 2.0e-5.
  3. Literal de carácter : representa un solo carácter, encerrado entre comillas simples. Por ejemplo: 'A', '1', '@'.
  4. Literal de cadena : representa una cadena, entre comillas dobles. Por ejemplo: "Hello, World!", "Java".
  5. Literal booleano : representa un valor booleano, con solo dos valores: truey false.
  6. literal nulo : representa una referencia nula, utilizada para indicar que la referencia del objeto no apunta a ningún objeto válido.
  7. Secuencia de escape : algunas secuencias de caracteres especiales, que comienzan con una barra invertida \, se utilizan para representar caracteres que no se pueden ingresar directamente, como caracteres de nueva línea \n, caracteres de tabulación, \tetc.
  8. Literal de matriz : representado por llaves {}, utilizado para inicializar la matriz. Por ejemplo: {1, 2, 3}.
  9. Constante de enumeración : un valor constante de un tipo de enumeración que representa una opción específica en la enumeración.
  10. Literal de codificación de caracteres : representa la codificación Unicode del carácter, \ucomenzando y seguido de cuatro dígitos hexadecimales. Por ejemplo: \u0041representa el carácter 'A'.

3.3.3 Casos de uso básicos

public class Demo {
    
    
    public static void main(String[] args) {
    
    
        System.out.println(10); // 输出一个整数
        System.out.println(5.5); // 输出一个小数
        System.out.println('a'); // 输出一个字符
        System.out.println(true); // 输出boolean值true
        System.out.println("欢迎来到黑马程序员"); // 输出字符串
    }
}

Suplemento: Habilidades distintivas

  1. Los números sin punto decimal son literales de tipo entero .
  2. Siempre que haya un punto decimal , es un literal de tipo decimal .
  3. Siempre que esté entre comillas dobles , no importa cuál sea el contenido, haya contenido o no, es un valor literal de tipo cadena .
  4. Los literales de tipo carácter deben estar entre comillas simples , sin importar cuál sea el contenido, pero solo puede haber uno.
  5. Un literal booleano tiene sólo dos valores, verdadero y falso.
  6. Un literal de tipo vacío tiene un solo valor, nulo

3.4 Variables

3.4.1 Descripción general

Las variables son contenedores para almacenar datos temporalmente en un programa. Pero sólo se puede almacenar un valor en este contenedor.

3.4.2 Formato

数据类型 变量名 = 数据值;

ilustrar:

  • Si desea almacenar 10, entonces el tipo de datos debe ser un tipo entero.

  • Si desea almacenar 10.0, entonces el tipo de datos debe escribirse como tipo decimal.

Suplemento: explicación de parámetros

  • Nombre de la variable: De hecho, es el nombre de este contenedor.

  • Valor de los datos: los datos realmente almacenados en el contenedor.

  • Punto y coma: indica el final de una oración, al igual que el punto utilizado al escribir ensayos.

3.4.3 Caso de uso básico: demostración de variables

public class VariableDemo2{
    
    
	public static void main(String[] args){
    
    
		//1.变量名不允许重复
		//int a = 10;
		//int a = 20;
		//System.out.println(a);
		
		//2.一条语句可以定义多个变量
		//了解。
		//int a = 10, b = 20, c = 20,d = 20;
		//System.out.println(a);//?
		//System.out.println(b);//?
		
		
		//3.变量在使用之前必须要赋值
		int a = 30;
		System.out.println(a);
	}
}

Aviso:

  • Los nombres de las variables no se pueden repetir
  • En una declaración, se pueden definir múltiples variables. Pero este método afecta la lectura del código, así que entiéndalo.
  • A las variables se les debe asignar un valor antes de poder utilizarlas.

3.5 tipos de datos

3.5.1 Descripción general

Los tipos de datos Java son clasificaciones que se utilizan para definir los tipos de datos que puede almacenar una variable o expresión.

3.5.2 Clasificación

  • Tipos de datos básicos
  • Tipos de datos de referencia (obtenga más información sobre la orientación a objetos)

3.5.3 Tipos de datos básicos

  1. Tipos de enteros : byte:8 bits, con un rango de -128 a 127, short:16 bits, con un rango de -32,768 a 32,767, int:32 bits, con un rango de -2^31 a 2^31 - 1, long:64 bits, el rango es -2 ^63 a 2^63 - 1
  2. Tipos de punto flotante : float: 32 bits, utilizado para representar números de punto flotante de precisión simple, double: 64 bits, utilizado para representar números de punto flotante de doble precisión
  3. Tipo de carácter : char16 bits, utilizado para almacenar un carácter Unicode
  4. Tipo booleano : boolean: Se utiliza para representar valores booleanos, con solo dos valores: trueyfalse

Aviso:

  • Rango de valores del tipo de byte : -128 ~ 127
  • Rango de valor aproximado del tipo int : -más de 2,1 mil millones ~ más de 2,1 mil millones

Suplemento: La relación entre los rangos de valores de tipos enteros y tipos decimales:

  • doble > flotante > largo > int > corto > byte
  • En Java, los números enteros por defecto son de tipo int y los números de punto flotante por defecto son de tipo doble.

Ejemplo de código:

public class VariableDemo3{
    
    
    public static void main(String[] args){
    
    
        //1.定义byte类型的变量
        //数据类型 变量名 = 数据值;
        byte a = 10;
        System.out.println(a);

        //2.定义short类型的变量
        short b = 20;
        System.out.println(b);

        //3.定义int类型的变量
        int c = 30;
        System.out.println(c);

        //4.定义long类型的变量
        long d = 123456789123456789L;
        System.out.println(d);

        //5.定义float类型的变量
        float e = 10.1F;
        System.out.println(e);

        //6.定义double类型的变量
        double f = 20.3;
        System.out.println(f);

        //7.定义char类型的变量
        char g = 'a';
        System.out.println(g);

        //8.定义boolean类型的变量
        boolean h = true;
        System.out.println(h);

    }
}

Aviso:

  • Si desea definir una variable de tipo entero y no sabe qué tipo de datos elegir, se utiliza int de forma predeterminada.
  • Si desea definir una variable de tipo decimal y no sabe qué tipo de datos elegir, se utiliza doble por defecto.
  • Si desea definir una variable de tipo largo, debe agregar el sufijo L después del valor de los datos . (Se aceptan letras mayúsculas y minúsculas, pero se recomiendan las mayúsculas).
  • Si desea definir una variable de tipo flotante, debe agregar el sufijo F después del valor de los datos . (Se aceptan mayúsculas y minúsculas)

3.5.4 Tipos de datos de referencia

  1. Clase : la clase es una plantilla utilizada para crear objetos. Define las propiedades (variables miembro) y los métodos (métodos miembro) del objeto. Al crear una instancia de una clase, crea un objeto de la clase y usa el objeto para llamar a los métodos de la clase.
  2. Interfaz : una interfaz define un conjunto de especificaciones de métodos, pero no tiene un cuerpo de método real. Una clase puede implementar una o más interfaces para obtener los métodos definidos por la interfaz e implementar estos métodos en la clase.
  3. Matriz : una matriz es una estructura de datos que se utiliza para almacenar elementos del mismo tipo. Puede ser una matriz unidimensional o una matriz multidimensional utilizada para almacenar múltiples elementos de forma contigua en la memoria.
  4. Enum (Enum) : una enumeración es una clase especial que se utiliza para representar un conjunto de constantes predefinidas. Las enumeraciones se utilizan a menudo para representar un grupo de valores relacionados.
  5. String (String) : String es un tipo de datos de referencia, pero tiene propiedades especiales que pueden manipularse como tipos de datos primitivos. Una cadena es en realidad una secuencia de caracteres y tiene muchos métodos para manejar operaciones de cadenas.
  6. Tipos de referencia personalizados : además de los tipos de datos de referencia integrados mencionados anteriormente, los desarrolladores también pueden crear clases e interfaces personalizadas, así como sus instancias, para crear estructuras de datos y funciones más complejas.

3.5.5 La diferencia entre tipos de datos básicos y tipos de datos de referencia

  1. Tipos de datos básicos: los tipos de datos básicos se pasan por valor, asignan espacio de memoria en la pila de la máquina virtual Java y almacenan el valor directamente. Cuando a una variable de un tipo de datos básico se le asigna un valor, el valor de la variable en realidad se copia a otra variable y no existe relación entre las dos variables.
  2. Tipos de datos de referencia: los tipos de datos de referencia se pasan por referencia, asignan espacio de memoria en el montón de la máquina virtual Java y almacenan la referencia (dirección de memoria) del objeto. Cuando se asigna un valor a una variable de un tipo de datos de referencia, la referencia en la variable en realidad se copia a otra variable y ambas variables apuntan al mismo objeto.

Reponer:

Para obtener más información, consulte la gasolinera Knowledge Gas.基本数据类型和引用数据类型区别

Ejemplo de código:

// 使用引用数据类型创建一个对象
String message = new String("Hello, World!");

// 创建一个数组
int[] numbers = new int[5];

// 使用自定义类创建对象
class Person {
    
    
    String name;
    int age;
}
Person person = new Person();
person.name = "Alice";
person.age = 30;

// 枚举类型
enum Day {
    
    
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
Day today = Day.WEDNESDAY;

3.5.6 Tipos de datos comunes

  • Entero: int
  • ​ Decimal: (número de coma flotante) doble

Ejemplo de código:

public class VariableDemo{
    
    
	public static void main(String[] args){
    
    
		//定义一个整数类型的变量
		//数据类型 变量名 = 数据值;
		int a = 16;
		System.out.println(a);//16
		
		//定义一个小数类型的变量
		double b = 10.1;
		System.out.println(b);//10.1
	}
}

Reponer:

​ null no se puede imprimir directamente, si necesita imprimir, debe imprimirlo en forma de cadena.

Las selecciones de tipos de datos más utilizadas:

  • Al definir variables, se deben seleccionar diferentes tipos de variables según la situación real.

    Por ejemplo: para la edad de una persona , puedes elegir el tipo de byte

    Por ejemplo: para la edad de la tierra , puedes elegir el tipo largo

  • Si el rango no es seguro en el tipo entero , entonces el tipo int se utiliza de forma predeterminada.

  • Si el tipo decimal no está seguro del rango , entonces se utiliza el tipo doble de forma predeterminada.

  • Si desea definir una variable de tipo carácter , utilice char

  • Si desea definir una variable de tipo booleano , utilice booleano

3.6 Identificador

En Java, los identificadores son los nombres que se utilizan para identificar varios elementos del programa , como variables, métodos, clases, interfaces, etc. Un identificador es una secuencia de letras, números, un guión bajo (_) y un signo de dólar ($), y debe comenzar con una letra, un guión bajo o un signo de dólar. Los identificadores se utilizan en programación para nombrar varias entidades, lo que hace que el programa sea más fácil de leer, comprender y mantener.

3.6.1 Requisitos obligatorios

Esto debe hacerse; de ​​lo contrario, el código informará un error.

  • Debe constar de números, letras, guión bajo_, **signo de dólar$**.
  • El número no puede comenzar con
  • No puede ser una palabra clave
  • Distingue mayúsculas y minúsculas.

3.6.2 Recomendaciones suaves

1. Nomenclatura del caso del pequeño camello

Se aplica a nombres de variables y nombres de métodos.

  • Si es una palabra, entonces todo en minúsculas, como por ejemplo: nombre

  • Si hay varias palabras, comience con la segunda palabra y escriba en mayúscula la primera letra, por ejemplo: nombre, edad máxima

2. Nomenclatura del caso del gran camello

se aplica a los nombres de clases

  • Si es una palabra, entonces la primera letra está en mayúscula. Por ejemplo: demostración, prueba.

  • Si hay varias palabras, la primera letra de cada palabra debe estar en mayúscula. Por ejemplo: Hola Mundo

3.6.3 Detalles de la especificación de nomenclatura de Alibaba

  1. Intenta no usar pinyin. Sin embargo, algunos pinyin aceptados internacionalmente pueden considerarse palabras en inglés.

    Correcto: alibaba, hangzhou, nanjing

    错误:jiage、dazhe

  2. Al nombrar variables, métodos y clases, no utilice guiones bajos ni signos de dólar.

    Error: _nombre

    Nombre correcto

3.7 Modificadores de permisos

3.7.1 Descripción general

​ Hay cuatro tipos de permisos de acceso proporcionados en Java. Cuando se modifica con diferentes modificadores de permiso de acceso, el contenido modificado tendrá diferentes permisos de acceso. Ya hemos estudiado y antes. A continuación, estudiemos los modificadores protegidos y public predeterminados private.

  • público: público, accesible desde todas partes.

  • protegido: se puede acceder a esta clase, este paquete y las subclases de otros paquetes.

  • Predeterminado (sin modificador): esta clase, accesible para este paquete.

    Nota: Lo predeterminado es dejarlo vacío, no lo predeterminado.

  • privado: privado, la clase actual puede acceder.
    public > protected > 默认 > private

3.7.2 Capacidades de acceso a permisos

Alcance de la autoridad

privado<Predeterminado/dejar en blanco<protegido<público

público protegido por defecto privado
en la misma categoría
clases en el mismo paquete
subclases de diferentes paquetes
Clases no relacionadas en diferentes paquetes.

Se puede ver que el público tiene la mayor autoridad. Lo privado es el menos privilegiado.

Al escribir código, si no hay consideraciones especiales, se recomienda utilizar permisos como este:

  • Las variables miembro se utilizan para privateocultar detalles.
  • Utilice el método constructor publicpara facilitar la creación de objetos.
  • Los métodos de miembros se utilizan para publicfacilitar los métodos de llamada.

Reponer:

Sin modificador de permiso, es el permiso predeterminado.

3.7.3 Reglas de uso de permisos

En el desarrollo real, generalmente solo se utilizan lo público y lo privado.

  • Variables miembro privadas
  • metodo publico

Aviso:

Si el código de un método es para extraer código común de otros métodos, este método generalmente también es privado.

paquete de 3,8

3.8.1 Descripción general

En Java, los paquetes son una forma de organizar clases e interfaces . Clasifican clases e interfaces relacionadas en un espacio de nombres mediante una organización lógica. El objetivo principal de los paquetes es evitar conflictos de nombres y proporcionar una mejor gestión y organización del código.

​Un paquete es en realidad una carpeta en el sistema operativo. Los paquetes se utilizan para clasificar las tecnologías de gestión y se colocan diferentes categorías de tecnología en diferentes paquetes para facilitar la gestión y el mantenimiento.

En el proyecto IDEA, las operaciones de creación de paquetes son las siguientes:

imagen-20230813112207023

Convención de nomenclatura para nombres de paquetes :

路径名.路径名.xxx.xxx
// 例如:com.itheima.oa
  • El nombre del paquete suele ser el nombre de dominio de la empresa escrito al revés. Por ejemplo: el caballo negro es www.itheima.com y el nombre del paquete se puede definir como com.itheima.nombre técnico.
  • Los nombres de los paquetes deben estar conectados con ".".
  • Cada nombre de ruta en el nombre del paquete debe ser un identificador legal y no puede ser una palabra clave de Java.

3.8.2 Paquete de guía

¿Cuándo se necesita un paquete de guía?

​ Situación 1: cuando se utilizan clases en el **paquete no principal (java.lang)** proporcionado en Java

​ Situación 2: cuando usa clases en otros paquetes escritos por usted mismo

¿Cuándo no se necesita ningún paquete de guía?

Situación 1: cuando se utilizan clases en el paquete principal de Java ( java.lang )

​ Situación 2: cuando se utilizan clases en el mismo paquete escritas por usted mismo

Supongamos que hay un Estudiante en demo1 y demo2, ¿cómo usarlo?

Ejemplo de código:

//使用全类名的形式即可。
//全类名:包名 + 类名
//拷贝全类名的快捷键:选中类名crtl + shift + alt + c 或者用鼠标点copy,再点击copy Reference
com.itheima.homework.demo1.Student s1 = new com.itheima.homework.demo1.Student();
com.itheima.homework.demo2.Student s2 = new com.itheima.homework.demo2.Student();

4.Herramientas de desarrollo de IDEA

Resumen de notas:

  1. Descripción general: las mejores herramientas utilizadas actualmente para el desarrollo de programas Java
  2. Introducción a la estructura jerárquica: proyecto-módulo-paquete-clase
  3. Operaciones de clase
    • Crear nuevo archivo de clase
    • Eliminar archivos de clase
    • Modificar archivos de clase
  4. Operación del módulo
    • Nuevo módulo
    • Eliminar módulo
    • Modificar módulo
    • módulo de importación
  5. Operaciones del proyecto
    • Cerrar proyecto
    • Proyecto abierto
    • Modificar proyecto
    • Nuevo proyecto

4.1 Descripción general

IDEA, el nombre completo de IntelliJ IDEA, es un entorno integrado para el desarrollo del lenguaje Java y es reconocido por la industria como la mejor herramienta utilizada actualmente para el desarrollo de programas Java.

Reponer:

Una herramienta de desarrollo que integra escritura de código, compilación, ejecución, depuración y otras funciones.

4.2 Instalación

ilustrar:

​ Aprenda cosas buenas, enlace de referencia: IDEA2023. Aprenda a actualizar continuamente - Equipo técnico de Souyunku (souyunku.com)

Paso 1: Descargar

ilustrar:

​ El enlace de descarga es: https://www.jetbrains.com/idea

imagen-20230809160833406

Paso 2: instalación

1. Ingrese a la interfaz de instalación.

imagen-20230227141623703

2. Modificar el directorio de instalación.

imagen-20230227141634020

ilustrar:

Se recomienda no ponerlo en la unidad C.

3. Opciones adicionales

imagen-20230227141649386

ilustrar:

​ Verifique el iniciador de 64 bits. Indica la creación de un nuevo acceso directo de 64 bits en el escritorio.

4.Instalación

imagen-20230227141701750

5. Empezar

Insertar descripción de la imagen aquí

ilustrar:

​Seleccione el segundo para no importar, mantenga la configuración predeterminada y luego haga clic en Aceptar

4.3 Estructura de jerarquía de directorios

Resumen de notas

  • Relación jerárquica: proyecto-módulo-paquete-clase

  • Cantidad incluida:

  • Se pueden crear varios módulos en un proyecto.

  • Se pueden crear varios paquetes en un módulo.

  • Se pueden crear varias clases en un paquete.

3.4.1 Descripción general

imagen-20230227141855655

Suplemento: Clasificación estructural

  • proyecto (proyecto, proyecto)
  • módulo
  • paquete
  • clase

4.3.2 Proyecto

Los sitios web de programadores de Taobao, JD.com y Dark Horse pertenecen a proyectos, e IDEA es un proyecto.

4.3.2 Módulo

En un proyecto, se pueden almacenar varios módulos y diferentes módulos pueden almacenar diferentes códigos de funciones comerciales en el proyecto. El sitio web oficial de Dark Horse Programmers contiene al menos los siguientes módulos:

  • módulo foro
  • Módulos de registro y consulta

4.3.3 Paquete

Hay muchas empresas en un módulo. Tomando como ejemplo el módulo de foro del sitio web oficial de Black Horse Programmer, contiene al menos las siguientes empresas diferentes.

  • correo
  • Comentario

Para distinguir estos negocios más claramente, se utilizan paquetes para gestionar estos diferentes negocios.

4.3.4 Clase

4.4 Configuraciones comunes

1. Modificar la fuente

imagen-20230227142334713

ilustrar:

Elija Consolas como fuente. Esta fuente es más suave.

Operaciones conexas de categoría 4.5

Operaciones relacionadas con clases

  • Crear nuevo archivo de clase
  • Eliminar archivos de clase
  • Modificar archivos de clase

4.6 Operaciones relacionadas con el módulo

Operaciones relacionadas con el módulo

  • Nuevo módulo
  • Eliminar módulo
  • Modificar módulo
  • módulo de importación

4.7 Operaciones relacionadas del proyecto

Operaciones relacionadas con el proyecto

  • Cerrar proyecto
  • Proyecto abierto
  • Modificar proyecto
  • Nuevo proyecto

Modificar proyecto

Haga clic en Archivo y seleccione Estructura del proyecto.

imagen-20230227143125944

En esta interfaz, el valor predeterminado es Módulo

Entonces, primero haga clic en Proyecto

En la página derecha, ingrese el nuevo nombre del proyecto.

Modifique la versión JDK y la versión compilada a JDK14

Haga clic en Aceptar nuevamente

imagen-20230227143221007

  • En este momento, se descubrió que el nombre del proyecto había sido modificado.

imagen-20230809165947767

  • Pero el nombre de la carpeta local aún no se ha cambiado.

imagen-20230809170012544

  • Primero es necesario cerrar el proyecto actual.

imagen-20230809170022657

  • Haga clic en la cruz junto a un elemento para eliminarlo de la lista

imagen-20230809170033150

  • Modifique manualmente el nombre de la carpeta en su disco duro local
  • Haga clic en Abrir o Importar para volver a abrir el proyecto.

imagen-20230809170043305

  • Seleccione el elemento modificado

    Haga clic en Aceptar

imagen-20230809170052181

  • En este punto, encontrará que el nombre del proyecto y el nombre de la carpeta del disco duro local se han modificado.

imagen-20230809170059554

4.8 Gestión de complementos

Enlaces de referencia:

IntelliJ Idea utiliza 12 complementos de uso común (para mejorar la eficiencia del desarrollo), con excelentes complementos temáticos_complementos de idea_blog de escalador de tecnología Java-blog CSDN

20 complementos excelentes que vale la pena recomendar por IDEA_idea plug-in_blog-CSDN de Xinyuan Yima

5. Operadores y expresiones

Resumen de notas:

  1. Descripción general:

    1. Los operadores Java son símbolos especiales que se utilizan para realizar operaciones en uno o más operandos.

    2. Una expresión es una declaración gramatical compuesta de variables, constantes, operadores y llamadas a métodos.

    3. La diferencia entre operadores y expresiones:

      • Los operadores son símbolos que operan sobre constantes o variables.

      • Una expresión es una expresión que se ajusta a la sintaxis de Java.

  2. Operadores aritméticos:

    • Definición: Los operadores aritméticos se utilizan para realizar operaciones matemáticas básicas.

    • Por ejemplo:

      +-*/ 
      
  3. Operadores de incremento y decremento:

    • Definición: El operador de autoincremento y autodecremento es un operador aritmético especial que se utiliza para sumar o restar 1 al valor de una variable .

    • Por ejemplo:

       ++--
      
  4. Operador de asignación:

    • Definición: El operador de asignación es un operador utilizado en Java para asignar valores a variables.

    • Por ejemplo:

      b = 20;
      
  5. Operador de asignación extendida:

    • Definición: El operador de asignación extendida es un operador que combina operadores aritméticos y operadores de asignación.

    • Por ejemplo:

       "+=""-=""*=""/=""%="
      
    • Características: la capa oculta en el operador de asignación extendida también contiene una conversión obligatoria

  6. Operadores relacionales:

    • Significado: los operadores relacionales se utilizan para comparar la relación de tamaño entre dos valores.

    • Por ejemplo:

      a > b
      
    • Nota: Distinga entre operadores de asignación == y = y operadores relacionales

  7. Operadores logicos:

    • Significado: se utiliza para combinar múltiples expresiones booleanas para generar una nueva expresión booleana.

    • Por ejemplo:

      true & truefalse & false
      
    • Nota: Los operadores lógicos también tienen

      !、&|^ 
      
  8. Operadores lógicos de cortocircuito:

    • Significado: si se puede determinar , no continúe calculando la expresión restante.

    • Por ejemplo:

      用户名正确  && 密码正确
      
  9. Operador ternario:

    • Significado: Conocido como operador condicional, es el único operador en Java con tres operandos.

    • Formato:

      关系表达式 ? 表达式1 :表达式2
    • Por ejemplo:

      a > b ? a : b
      
  10. Prioridad del operador: paréntesis primero ()

  11. Conversión implícita y conversión forzada

    1. Conversión implícita: promoción de tipo automática

      • Relación de valor: byte <corto <int <largo <flotante <doble
      • Nota: El espacio de almacenamiento del tipo flotante es menor que el del tipo largo, pero el rango de representación del tipo flotante es mayor que el del tipo largo.
    2. Elenco: promoción de tipo forzado

      • Formato:

        目标数据类型 变量名 = (目标数据类型)被强转的数据
        
  12. Cadena + operación (caso especial):

    • Significado: Cuando aparece un carácter en la operación +, el carácter se llevará a la tabla de códigos ASCII incorporada de la computadora para buscar el número correspondiente y luego se realizará el cálculo.

    • Por ejemplo:

      char c = 'a';
      int result = c + 0;
      System.out.println(result);//9
      

5.0 Descripción general

5.0.1 Definición

Los operadores Java son símbolos especiales que se utilizan para realizar operaciones en uno o más operandos. Una expresión es una declaración gramatical compuesta de variables, constantes, operadores y llamadas a métodos.

5.0.2 Operadores

Definición: Es un símbolo que opera sobre constantes o variables.

Por ejemplo:

 +  -  *  / 

5.0.3 Expresiones

Definición: una fórmula que utiliza operadores para conectar constantes o variables y se ajusta a la sintaxis de Java es una expresión.

Por ejemplo:

a + b 这个整体就是表达式。

ilustrar:

​ Y + es un tipo de operador aritmético, por lo que esta expresión también se llama expresión aritmética.

5.1 Operadores aritméticos

5.1.1 Descripción general

5.1.1.1 Definición

Los operadores aritméticos se utilizan para realizar operaciones matemáticas básicas, como operaciones de suma, resta, multiplicación, división y módulo (resto). En Java, los operadores aritméticos incluyen el signo más (+), el signo menos (-), el signo de multiplicación (*), el signo de división (/) y el operador de módulo (%). Estos operadores se pueden utilizar para manejar variables de tipos numéricos como int, long, float y double.

5.1.1.2 Clasificación

+ - * / %

5.1.1.3 Características

+ - * :跟小学数学中一模一样没有任何区别.

5.1.2 Caso de uso básico: demostración del operador

/Número

/1.整数相除结果只能得到整除,如果结果想要是小数,必须要有小数参数。
2.小数直接参与运算,得到的结果有可能是不精确的。
案例:
System.out.println( 10 / 3);//3
System.out.println(10.0 / 3);//3.3333333333333335

%Número

%:取模、取余。
   他做的也是除法运算,只不过获取的是余数而已。
案例:
System.out.println(10 % 2);//0
System.out.println(10 % 3);//1
应用场景:
//可以利用取模来判断一个数是奇数还是偶数
System.out.println(15 % 2);//1  奇数

5.1.3 Caso: división numérica

Demostración: ingrese un número de tres dígitos con el teclado, divídalo en unidades, decenas y centenas, y luego imprímalo en la consola.

//1.键盘录入一个三位数
//导包 --- 创建对象 --- 接收数据
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个三位数");
int number = sc.nextInt();//123

//2.获取这个三位数的个位、十位、百位并打印出来
//公式:
//针对于任意的一个数而言
//个位: 数字 % 10
int ones = number % 10;
//十位: 数字 / 10 % 10
int tens = number / 10 % 10;
//百位: 数字 / 100 % 10
int hundreds = number / 100  % 10;

//输出结果
System.out.println(ones);
System.out.println(tens);
System.out.println(hundreds);

detalle:

  • Fórmula: obtiene cada dígito de cualquier número.

    1. Lugar de las unidades: número % 10

    2. Dígito de las decenas: número/10 % 10

    3. Lugar de las centenas: número / 100 % 10

    4. Miles: Número / 1000 % 10

    5. ……

5.2 Operadores de incremento y decremento

5.2.1 Descripción general

5.2.1.1 Definición

Los operadores de autoincremento y autodecremento son operadores aritméticos especiales que se utilizan para sumar o restar 1 a una variable. En Java, existen dos formas de operadores de incremento y decremento: forma de prefijo y forma de sufijo.

5.2.1.2 Clasificación

++  自增运算符

ilustrar:

++: simplemente suma 1 al valor de la variable

--  自减运算符

ilustrar:

​ --: Simplemente cambie el valor de la variable a -1

5.2.1.3 Características

  • Ponerlo delante de la variable se llama primero++. Por ejemplo: ++a
  • Ponlo después de la variable, lo llamamos después de ++. Por ejemplo: a++

detalle:

Ya sea ++ primero o ++ después. Cuando se escriben por separado en una línea, los resultados de la operación son exactamente los mismos.

5.2.2 Caso de uso básico: demostración de autoincremento y autodecremento

//++
int a = 10;
a++;//就是让变量a里面的值 + 1
System.out.println(a);//11
++a;//就是让变量a里面的值 + 1
System.out.println(a);//12

5.3 Operador de asignación

5.3.1 Descripción general

El operador de asignación es un operador utilizado para asignar valores a variables en Java. En Java, el operador de asignación está representado por el signo igual (=), con el nombre de la variable a la izquierda y el valor asignado a la variable a la derecha.

5.3.2 Demostración del operador de asignación de casos de uso básico

public class OperatorDemo6 {
    
    
    public static void main(String[] args) {
    
    
        //1.最为简单的赋值运算符用法
        int a = 10;//就是把10赋值给变量a
        System.out.println(a);

        //2.如果等号右边需要进行计算。
        int b = 20;
        int c = a + b;//先计算等号右边的,把计算的结果赋值给左边的变量
        System.out.println(c);

        //3.特殊的用法
        a = a + 10;//先计算等号右边的,把计算的结果赋值给左边的变量
        System.out.println(a);//20
    }
}

5.4 Operador de asignación extendida

4.4.1 Descripción general

4.4.1.1

​ El operador de asignación extendido se refiere a agregar otros operadores aritméticos al operador de asignación original, como +=,, etc.-=*=

5.4.1.2 Clasificación

+=、-=、*=、/=、%=

4.5.1.3 Características

​Consiste en realizar operaciones en el lado izquierdo y en el lado derecho, y asignar el resultado final al lado izquierdo, sin ningún impacto en el lado derecho.

5.4.2 Caso de uso básico: demostración del operador de propagación

public class OperatorDemo7 {
    
    
    public static void main(String[] args) {
    
    
        //扩展赋值运算符
        int a = 10;
        int b = 20;
        a += b;//把左边和右边相加,再把最终的结果赋值给左边,对右边没有任何影响
        // 相当于 a = a + b;
        System.out.println(a);//30
        System.out.println(b);//20
    }
}

Aviso:

  • El operador de asignación extendida también incluye una conversión implícita.

  • Por ejemplo:

    public class OperatorDemo8 {
           
           
        public static void main(String[] args) {
           
           
            byte a = 10;
            byte b = 20;
            //a += b;
            a = (byte)(a + b);
            System.out.println(a);//30
        }
    }
    

    Nota: Tome += como ejemplo. a += b ;en realidad equivalente a a = (byte)(a + b);

5.5 Operadores relacionales

5.5.1 Definición

También llamado operador de comparación, en realidad simplemente hace un juicio basado en el lado izquierdo y el lado derecho.

5.5.2 Clasificación

símbolo explicar
== Es para juzgar si el lado izquierdo y el lado derecho son iguales, si es verdadero, es verdadero, si no es verdadero, es falso.
!= Es para juzgar si el lado izquierdo y el lado derecho no son iguales. Si es verdadero, es verdadero. Si no es verdadero, es falso.
> Es para determinar si el lado izquierdo es mayor que el lado derecho, si es verdadero, es verdadero, si no es verdadero, es falso.
>= Es para determinar si el lado izquierdo es mayor o igual que el lado derecho, si es verdadero, es verdadero, si no es verdadero, es falso.
< Es para juzgar si el lado izquierdo es más pequeño que el lado derecho, si es verdadero, es verdadero, si no es verdadero, es falso.
<= Es para determinar si el lado izquierdo es menor o igual que el lado derecho, si es verdadero, es verdadero, si no es verdadero, es falso.

detalle:

  • El resultado final de un operador relacional debe ser de tipo booleano. Ya sea verdadero o falso
  • Al escribir ==, nunca escribas =

5.6 Operadores lógicos

5.6.1 Descripción general

5.6.1.1 Definición

Los operadores lógicos son operadores que se utilizan para conectar múltiples expresiones condicionales y se utilizan para crear expresiones condicionales complejas.

5.6.1.2 Uso de & y |

&: lógico AND (y)

​ Ambos lados son verdaderos, el resultado es verdadero, mientras uno de ellos sea falso, entonces el resultado es falso.

|: lógico o (o)

Si ambos lados son falsos, el resultado es falso, mientras uno de ellos sea verdadero, el resultado es verdadero.

5.6.2 Caso de uso básico: demostración del operador lógico

// &  //两边都是真,结果才是真。
System.out.println(true & true);//true
System.out.println(false & false);//false
System.out.println(true & false);//false
System.out.println(false & true);//false

System.out.println("===================================");

// | 或  //两边都是假,结果才是假,如果有一个为真,那么结果就是真。
System.out.println(true | true);//true
System.out.println(false | false);//false
System.out.println(true | false);//true
System.out.println(false | true);//true

5.6.3 Escenarios de aplicación

5.6.3.1 Ejemplos de escenarios

​Según el escenario fijo, elija usar & o usar |

  • Inicio de sesión de usuario.

    El nombre de usuario se ingresa correctamente y la contraseña se ingresa correctamente

    Debido a que solo el nombre de usuario y la contraseña son correctos al mismo tiempo, puede iniciar sesión correctamente, siempre que uno de ellos falle.

    habilidades:

    ​ Cuando necesitamos satisfacer las condiciones izquierda y derecha al mismo tiempo, podemos usar y

  • La suegra elige yerno

    Suegra: Yerno, puedes comprar una casa o un auto. Sólo ponte mi pequeña chaqueta acolchada de algodón.

    comprar una casa | comprar un auto

    Siempre que se cumpla una de las dos condiciones, podrás llevar la chaqueta acolchada de algodón.

    habilidades:

    ​ Cuando sólo se cumple una de las dos condiciones, se puede utilizar o

5.6.3.2 Uso de ^ (XOR)

No lo usaré mucho en el futuro, solo échale un vistazo.

Reglas de cálculo: si ambos lados son iguales, el resultado es falso; si ambos lados son diferentes, el resultado es verdadero

Ejemplo de código:

//^   //左右不相同,结果才是true,左右相同结果就是false
System.out.println(true ^ true);//false
System.out.println(false ^ false);//false
System.out.println(true ^ false);//true
System.out.println(false ^ true);//true

5.6.3.3 Uso de ! (negación)

​ Es la negación, también llamada no.

Reglas de cálculo: la negación de falso es verdadera, la negación de verdadero es falsa

Recordatorio: utilice como máximo una negación.

Ejemplo de código:

System.out.println(!false);//true
System.out.println(!true);//false
System.out.println(!!false);//报错

detalle:

​ Nota: Utilice solo como máximo uno para negar

5.7 Operadores lógicos de cortocircuito

5.7.1 Descripción general

5.7.1.1 Definición

​ El operador lógico de cortocircuito significa que en operaciones lógicas, si el resultado de toda la expresión lógica se puede obtener en función del valor de la expresión de la izquierda, la expresión de la derecha ya no se calculará.

5.7.1.2 Clasificación

  • &&

    El resultado de la operación es exactamente el mismo que &, excepto que tiene un efecto de cortocircuito.

  • ||

    El resultado de la operación es exactamente el mismo que |. Simplemente tiene un efecto de cortocircuito.

Núcleo lógico:

​ Cuando el lado izquierdo no puede determinar el resultado de la expresión completa, se ejecutará el lado derecho.

Cuando el lado izquierdo puede determinar el resultado de la expresión completa, el lado derecho no se ejecutará. Esto mejora la eficiencia del código.

5.7.2 Escenarios de aplicación

5.7.2.1 Escenario

1. Caso de inicio de sesión del usuario

El nombre de usuario es correcto y la contraseña es correcta

Si se utiliza un &, la contraseña se verificará independientemente de si el nombre de usuario es correcto.

pensar:

Si el nombre de usuario se ingresa correctamente, juzgaremos si la contraseña es correcta, lo cual está en línea con la lógica empresarial.

​ Pero si el nombre de usuario se ingresa incorrectamente, ¿todavía es necesario comparar las contraseñas ahora? No más.

Si usa un &, los lados izquierdo y derecho se ejecutarán independientemente de la situación.

​El nombre de usuario es correcto&& la contraseña es correcta

​ Si el nombre de usuario se ingresa correctamente, se verificará si la contraseña se ingresa correctamente.

​ Si el nombre de usuario se ingresa incorrectamente, la contraseña no será verificada y el resultado final será falso. Esto mejora la eficiencia de la operación del programa.

2. La suegra elige yerno

Poseer una casa | poseer un auto

Primero comprueba si hay una casa, y si la encuentras, ve a ver si hay un coche.

pensar:

Si ya tenemos casa, ¿por qué todavía tenemos que mirar el coche? Es innecesario.

​Tener una casa || Tener un coche

​ Primero, verifique si hay una habitación, si la hay, entonces no se ejecutará el lado derecho. El resultado final es directamente cierto.

​ Si no hay casa, mirarás si hay un coche a la derecha.

5.7.2.2 Resumen

​ Los resultados de && y & , || y | son exactamente iguales.

Pero cortocircuitar los operadores lógicos puede mejorar la eficiencia de ejecución del programa.

5.7.2.3 Recomendaciones

Más comúnmente utilizado: && || !

5.8 Operador ternario

5.8.1 Descripción general

5.8.1.1 Definición

​ Expresión ternaria o expresión de dos puntos con signo de interrogación.

5.8.1.2 Formato

¿Expresión relacional? Expresión1:Expresión2;

detalle:

  • Evalúa una expresión relacional.
  • Si la expresión relacional se evalúa como verdadera, entonces se ejecuta la expresión 1.
  • Si la expresión relacional se evalúa como falsa, entonces se ejecuta la expresión 2.

Aviso:

Se debe utilizar el resultado final del operador ternario, ya sea asignado a una variable o impreso directamente.

5.8.2 Caso de uso básico: demostración del operador ternario

public class OperatorDemo12 {
    
    
    public static void main(String[] args) {
    
    
        //需求:求两个数的较大值
        int a = 10;
        int b = 20;

        //格式:关系表达式 ? 表达式1 : 表达式2 ;
        //注意点:
        //三元运算符的最终结果一定要被使用。
        //要么赋值给一个变量,要么直接输出。
       int max =  a > b ? a : b ;
        System.out.println(max);


        System.out.println(a > b ? a : b);
    }
}

5.9 Prioridad del operador

Hay muchos operadores involucrados en Java y cada operador tiene su propia prioridad. Pero estas prioridades no requieren memoria. Sólo necesitamos saber una cosa: los paréntesis tienen prioridad sobre todos

5.10 Conversión implícita

5.10.1 Definición

En Java, la conversión implícita consiste en asignar un dato o variable con un rango de valores pequeño a otra variable con un rango de valores grande. En este momento, no necesitamos escribir código adicional para implementarlo por separado, el programa lo completa automáticamente por nosotros. También llamado promoción de tipo automático. En otras palabras, un tipo de datos de rango pequeño se puede asignar a un tipo de datos de rango grande y se puede asignar directamente a

5.10.2 Reglas de promoción

  • El rango de valores es pequeño y el rango de valores es grande. El valor pequeño se promoverá primero al valor grande y luego se realizará la operación.
  • Cuando se operan datos de tres tipos: byte, short y char, primero se promoverán directamente a int y luego se realizará la operación.

5.10.3 Relación del rango de valores

​ byte <corto <int <largo <flotante <doble

5.11 Conversión de fuerza

5.11.1 Concepto

5.11.1.1 Definición

​ Si desea asignar un dato o variable con un rango de valores grande a otra variable con un rango de valores pequeño. No se permite la operación directa.

5.11.1.2 Formato

Nombre de la variable del tipo de datos de destino = (tipo de datos de destino) los datos que se están forzando;

5.11.2 Caso de uso básico: demostración de transformación ligera

public class OperatorDemo2 {
    
    
    public static void main(String[] args) {
    
    
        double a = 12.3;
        int b = (int) a;
        System.out.println(b);//12
    }
}

punto importante:

​ La conversión obligatoria puede provocar errores en los datos. (Se pierde la exactitud de los datos)

+ funcionamiento de personajes en 5.12

5.12.1 Concepto

Cuando aparece un carácter en la operación +, lo llevará a la tabla de códigos ASCII incorporada de la computadora para buscar el número correspondiente y luego realizar el cálculo.

5.12.2 Caso de uso básico: personaje + demostración

char c = 'a';
int result = c + 0;
System.out.println(result);//97

ilustrar:

  • En la tabla de códigos ASCII:

    1. 'un' ----- 97

    2. 'A' ----- 65

5.13 Operadores de desplazamiento de bits

En Java, el operador de desplazamiento de bits es un operador que opera en bits binarios y puede realizar operaciones de desplazamiento de bits en datos de tipo entero. Java proporciona operadores de desplazamiento de tres bits: desplazamiento a la izquierda (<<), desplazamiento a la derecha (>>) y desplazamiento a la derecha sin signo (>>>)

  1. Desplazamiento a la izquierda (<<): desplaza la representación binaria de un número hacia la izquierda el número de dígitos especificado, rellenando el lado derecho con ceros . Se puede considerar la operación de desplazamiento a la izquierda como multiplicar el número original por la potencia de 2. Por ejemplo, para un número entero a, a << b significa desplazar la representación binaria de a hacia la izquierda b lugares.
  2. Desplazamiento a la derecha (>>): mueve la representación binaria de un número hacia la derecha el número especificado de dígitos y lo completa de acuerdo con el bit de signo del bit más alto. Se puede considerar que la operación de desplazamiento a la derecha divide el número original por la potencia de 2 y redondea. Por ejemplo, para un número entero a, a >> b significa desplazar la representación binaria de a hacia la derecha b lugares.
  3. Desplazamiento a la derecha sin signo (>>>): desplaza la representación binaria de un número hacia la derecha el número de bits especificado, rellenando con ceros independientemente del bit de signo del bit más significativo. La operación de desplazamiento a la derecha sin signo trata el bit de signo como un bit normal, por lo que es adecuada para la operación de desplazamiento de bits de números sin signo.

Estos operadores de desplazamiento de bits son muy útiles cuando se trata de bits binarios de números enteros y a menudo se usan para operaciones de bits, configurar y borrar indicadores de bits y optimizar algoritmos específicos. Tenga en cuenta que el operador de desplazamiento de bits solo funciona en tipos de números enteros (como int, long, etc.), no en tipos de punto flotante.

6.Declaraciones de control

Resumen de notas:

  1. declaración de control de flujo

    1. Estructura secuencial:

      • Significado: Estructura que se ejecuta secuencialmente según el orden en que está escrita.
    2. Estructura de juicio y elección

      • Significado: una estructura que selecciona y ejecuta diferentes bloques de código en función de diferentes condiciones.

      • Por ejemplo:

        ifswitch
        
    3. Estructura de bucle

      • Significado: la estructura de ejecutar repetidamente un determinado fragmento de código.

      • Por ejemplo:

        whiledowhilefor
        
      • La diferencia entre bucles: 1. Los bucles for y while juzgan primero y luego ejecutan. 2.do… while se ejecuta primero y luego se juzga.

  2. declaración de control condicional

    • Significado: es una estructura de control de programa que se utiliza para ejecutar u omitir bloques de código según ciertas condiciones.

    • Por ejemplo:

      breakcontinue
      
    • Nota : Las declaraciones de control condicional no se pueden utilizar en estructuras no cíclicas.

6.1 Descripción general

6.1.1 Definición

Las declaraciones de control de Java son declaraciones que se utilizan para controlar la ejecución del flujo del programa y pueden cambiar el orden de ejecución del programa en función de condiciones o bucles. Las declaraciones de control pueden ayudarle a implementar diferentes lógicas condicionales y estructuras de bucle para lograr diferentes tareas y funciones.

6.1.2 Clasificación

Las declaraciones de control de Java se dividen en: declaraciones de control de procesos , declaraciones de control condicionales

6.1 Declaraciones de control de flujo

6.1.1 Descripción general

6.1.1.1 Definición

​ Durante la ejecución de un programa, el orden de ejecución de cada declaración tiene un impacto directo en el resultado del programa. Por tanto, debemos conocer el flujo de ejecución de cada sentencia. Además, muchas veces necesitamos controlar el orden de ejecución de las declaraciones para lograr las funciones que queremos.

6.1.1.2 Clasificación

  • estructura secuencial

  • Estructura de juicio y selección (si, cambio)

  • Estructura de bucle (for, while, do… while)

6.1.1 Estructura secuencial

6.1.1.1 Definición

La estructura secuencial es el control de proceso más simple y básico del programa. No existe una estructura gramatical específica. Se ejecuta en orden de acuerdo con el orden del código. La mayoría de los códigos del programa se ejecutan de esta manera.

6.1.1.2 Diagrama de flujo de ejecución

1545615769372

6.1.2 Estructura del juicio – declaración f

  • si formato de declaración 1
格式:
if (关系表达式) {
    
    
    语句体;	
}

Proceso de implementación:

①Primero calcule el valor de la expresión relacional.

②Si el valor de la expresión relacional es verdadero, ejecute el cuerpo de la declaración

③Si el valor de la expresión relacional es falso, el cuerpo de la declaración no se ejecutará.

④Continúe ejecutando el siguiente contenido de la declaración

1545616039363

Ejemplo:

public class IfDemo {
    
    
	public static void main(String[] args) {
    
    
		System.out.println("开始");	
		//定义两个变量
		int a = 10;
		int b = 20;	
		//需求:判断a和b的值是否相等,如果相等,就在控制台输出:a等于b
		if(a == b) {
    
    
			System.out.println("a等于b");
		}		
		//需求:判断a和c的值是否相等,如果相等,就在控制台输出:a等于c
		int c = 10;
		if(a == c) {
    
    
			System.out.println("a等于c");
		}		
		System.out.println("结束");
	}
}
  • formato de declaración f 2
格式:
if (关系表达式) {
    
    
    语句体1;	
} else {
    
    
    语句体2;	
}

Proceso de implementación:

①Primero calcule el valor de la expresión relacional.

②Si el valor de la expresión relacional es verdadero, ejecute el cuerpo de la declaración 1

③Si el valor de la expresión relacional es falso, ejecute el cuerpo de la declaración 2

④Continúe ejecutando el siguiente contenido de la declaración

1545616221283

Ejemplo:

public class IfDemo02 {
    
    
	public static void main(String[] args) {
    
    
		System.out.println("开始");		
		//定义两个变量
		int a = 10;
		int b = 20;
		//需求:判断a是否大于b,如果是,在控制台输出:a的值大于b,否则,在控制台输出:a的值不大于b
		if(a > b) {
    
    
			System.out.println("a的值大于b");
		} else {
    
    
			System.out.println("a的值不大于b");
		}		
		System.out.println("结束");
	}
}

si formato de declaración 3

格式:
if (关系表达式1) {
    
    
    语句体1;	
} else if (关系表达式2) {
    
    
    语句体2;	
}else {
    
    
    语句体n+1;
}

Proceso de implementación:

① Primero calcule el valor de la expresión relacional 1

②Si el valor es verdadero, ejecute el cuerpo de la declaración 1; si el valor es falso, calcule el valor de la expresión relacional 2

③Si el valor es verdadero, ejecute el cuerpo de la declaración 2; si el valor es falso, calcule el valor de la expresión relacional 3

④…

⑤Si ninguna expresión relacional es verdadera, ejecute el cuerpo de la declaración n+1.

1545616667104

6.1.3 Estructura de selección – declaración de cambio

Formato

switch (表达式) {
    
    
	case 1:
		语句体1;
		break;
	case 2:
		语句体2;
		break;
	...
	default:
		语句体n+1;
		break;
}

Proceso de implementación:

  • Primero calcula el valor de la expresión.

  • En segundo lugar, se compara con el caso en secuencia. Una vez que haya un valor correspondiente, se ejecutará la declaración correspondiente. Durante el proceso de ejecución, finalizará cuando se encuentre una interrupción.

  • Finalmente, si todos los casos no coinciden con el valor de la expresión, se ejecutará el cuerpo de la declaración predeterminada y el programa finalizará.

  • La posición y omisión del incumplimiento

    El valor predeterminado se puede colocar en cualquier lugar u omitir.

  • penetración del caso

    No escribir una pausa provocará un fenómeno de penetración de casos

  • Nuevas características del switch en JDK12

int number = 10;
switch (number) {
    
    
    case 1 -> System.out.println("一");
    case 2 -> System.out.println("二");
    case 3 -> System.out.println("三");
    default -> System.out.println("其他");
}
  • Los respectivos escenarios de uso del tercer formato de switch y si

Cuando necesitemos juzgar un rango, use el tercer formato de if

Cuando enumeramos una cantidad limitada de datos y seleccionamos uno de ellos para su ejecución, usamos la instrucción switch

Por ejemplo:

Para los puntajes de las pruebas de Xiao Ming, si usa Switch, debe escribir 100 casos, lo cual es demasiado problemático, por lo que es fácil de usar.

​ Si es el día de la semana, mes o la selección de función del 0 al 9 en el teléfono de atención al cliente, puedes utilizar switch.

6.1.4 Estructura del bucle

6.1.4.1 para estructura de bucle (maestro)

Una declaración de bucle puede ejecutar repetidamente una determinada sección de código cuando se cumple la condición de bucle. Este código ejecutado repetidamente se llama declaración de cuerpo de bucle. Cuando este cuerpo de bucle se ejecuta repetidamente, la condición de juicio de bucle debe modificarse en el momento apropiado .es falso, finalizando así el bucle; de ​​lo contrario, el bucle continuará ejecutándose, formando un bucle infinito.

para formato de bucle:

for (初始化语句;条件判断语句;条件控制语句) {
    
    
	循环体语句;
}

Explicación del formato:

  • Declaración de inicialización: se utiliza para indicar el estado inicial cuando se inicia el ciclo. En pocas palabras, es cómo se ve cuando se inicia el ciclo.
  • Declaración de juicio condicional: se utiliza para expresar las condiciones para la ejecución repetida del bucle. En pocas palabras, es para juzgar si el bucle puede continuar ejecutándose.
  • Declaración del cuerpo del bucle: se utiliza para expresar el contenido de la ejecución repetida del bucle, en resumen, es lo que se ejecuta repetidamente en el bucle.
  • Declaración de control condicional: se utiliza para expresar el contenido de cada cambio en la ejecución del bucle, en pocas palabras, controla si el bucle se puede ejecutar.

Proceso de implementación:

①Ejecutar declaración de inicialización

②Ejecute la declaración de juicio condicional para ver si el resultado es verdadero o falso

​ Si es falso, el ciclo termina

​ Si es cierto, continúa la ejecución.

③Ejecutar la declaración del cuerpo del bucle

④Ejecutar declaraciones de control condicional

⑤Volver a ②Continuar

para consejos de escritura en bucle:

  • Determinar la condición inicial del bucle.
  • Determinar la condición final del bucle.
  • Determinar el código que el bucle ejecutará repetidamente.

Ejemplo de código:

//1.确定循环的开始条件
//2.确定循环的结束条件
//3.确定要重复执行的代码

//需求:打印5次HelloWorld
//开始条件:1
//结束条件:5
//重复代码:打印语句

for (int i = 1; i <= 5; i++) {
    
    
    System.out.println("HelloWorld");
}

6.1.4.2 bucle while

Formato:

初始化语句;
while(条件判断语句){
    
    
	循环体;
	条件控制语句;
}

6.1.4.3hacer…mientras bucle

Solo entiende este punto de conocimiento.

Formato:

初始化语句;
do{
    
    
    循环体;
    条件控制语句;
}while(条件判断语句);

Características:

Ejecutar primero, juzgar después.

6.1.4.4 Diferencias entre los tres formatos

Los bucles For y while se juzgan primero y luego se ejecutan.

​ do... while se ejecuta primero y luego se juzga.

​ Utilice un bucle for cuando conozca el número de bucles o el rango del bucle.

​ Cuando no sepa el número de bucles o el alcance del bucle, pero conozca la condición final del bucle, utilice un bucle while.

6.1.4.4 Bucle infinito

concepto:

​ También llamado bucle infinito. El ciclo nunca se detiene.

para formato:

for(;;){
    
    
    System.out.println("循环执行一直在打印内容");
}

explicar:

La declaración de inicialización se puede dejar en blanco, lo que indica que no se definen variables de control antes del ciclo.

La declaración de juicio condicional se puede dejar en blanco. Si no se escribe, el valor predeterminado será verdadero y el ciclo continuará.

La declaración de control condicional se puede dejar en blanco, lo que significa que la variable de control no cambiará después de que se ejecute cada cuerpo del bucle.

mientras formato:

while(true){
    
    
    System.out.println("循环执行一直在打印内容");
}

explicar:

Los paréntesis no se pueden omitir y se debe escribir verdadero; de lo contrario, el código informará un error.

hacer...mientras formatea:

do{
    
    
    System.out.println("循环执行一直在打印内容");
}while(true);

explicar:

Los paréntesis no se pueden omitir y se debe escribir verdadero; de lo contrario, el código informará un error.

Notas sobre bucles infinitos:

  • El formato más utilizado: mientras
  • No se puede escribir ningún otro código en el bucle infinito porque nunca se ejecutará.

6.2 Declaraciones de control condicional

  • romper
  • continuar

6.2.1 descanso

No puede existir solo. Se puede utilizar en interruptor y bucle para indicar el final y saltar.

Ejemplo de código:

//1.吃1~5号包子
for (int i = 1; i <= 5; i++) {
    
    
    System.out.println("在吃第" + i + "个包子");
    //2.吃完第三个的时候就不吃了
    if(i == 3){
    
    
        break;//结束整个循环。
    }
}

6.2.2continuar

No puede existir solo. Sólo puede existir en un ciclo.

​ significa: omitir este ciclo y continuar ejecutando el siguiente ciclo.

Ejemplo de código:

//1.吃1~5号包子
for (int i = 1; i <= 5; i++) {
    
    
    //2.第3个包子有虫子就跳过,继续吃下面的包子
    if(i == 3){
    
    
        //跳过本次循环(本次循环中,下面的代码就不执行了),继续执行下次循环。
        continue;
    }
    System.out.println("在吃第" + i + "个包子");
}

Random, como Scanner, también es una clase escrita de antemano en Java, no necesitamos preocuparnos por cómo implementarla, solo úsela directamente.

7.matriz

Resumen de notas:

  1. Definición: una matriz se refiere a un contenedor que puede almacenar múltiples valores del mismo tipo de datos al mismo tiempo.

  2. Definido por:

    • Formato uno:

      数据类型 [] 数组名;
      //例如
      int [] array;
      
    • Formato dos:

      数据类型  数组名 [];
      //例如
      int array [];
      
    • Nota: Diferentes tipos de datos corresponden a diferentes valores predeterminados.

      • Tipo de entero: 0
      • Tipo decimal: 0,0
      • Tipo booleano: falso
      • Tipo de carácter: '\u0000'
      • Tipo de referencia: nulo
  3. Inicialización de matriz estática:

    • Formato uno:

      数据类型[] 数组名 = new 数据类型[]{
               
               元素1,元素2,元素3,元素4...};
      //例如
      double[] arr = new double[]{
               
               1.1,1.2,1.3};
      
    • Formato dos:

      数据类型[] 数组名 = {
               
               元素1,元素2,元素3,元素4...};
      //例如
      int[] array = {
               
               1,2,3,4,5};
      
  4. Inicialización de matriz dinámica:

    • Formato:

      数据类型[] 数组名 = new 数据类型[数组的长度];
      //例如
      double[] arr = new double[10];
      
  5. La diferencia entre la inicialización dinámica de matrices y la inicialización estática de matrices:

    1. La gramática es diferente.
    2. Las longitudes de las matrices son diferentes
    3. El momento de la tarea es diferente
    4. Nota: No importa qué tipo de matriz sea, la longitud máxima de la matriz es la longitud de la matriz -1. Por ejemplo: longitud del arreglo - 1
  6. Valor de dirección:

    • Significado: el valor de la dirección de la matriz es un puntero o referencia al objeto de la matriz.

    • Por ejemplo:

      int[] arr = {
               
               1,2,3,4,5};
      System.out.println(arr);	//[I@6d03e736
      /*
      [ :表示现在打印的是一个数组。
      I:表示现在打印的数组是int类型的。
      @:仅仅是一个间隔符号而已。
      6d03e736:就是数组在内存中真正的地址值。(十六进制的)
      */
      
  7. índice:

    • Significado: utilizado para identificar su posición en la matriz.

    • Por ejemplo:

      arr[0]、arr[1]、……
      
    • Características:

      1. El valor inicial es 0
      2. Continuamente
      3. Aumentar en +1 uno por uno.
  8. Acceso a elementos de matriz

    • Significado: acceder al valor en la matriz según el índice
    • Formato: nombre de matriz [índice];
  9. atravesar

    • Significado: saca los elementos de la tupla en secuencia

    • Formato:

      for(int i = 0; i < arr.length; i++){
               
               
          //在循环的过程中,i依次表示数组中的每一个索引
          sout(arr[i]);//就可以把数组里面的每一个元素都获取出来,并打印在控制台上了。
      }
      

      Descripción: arr.length significa obtener la longitud de la matriz

7.1 Descripción general

7.1.1 Definición

En Java, una matriz se refiere a un contenedor que puede almacenar múltiples valores del mismo tipo de datos al mismo tiempo. Sin embargo, cuando el contenedor de matriz almacena datos, es necesario considerarlo junto con la conversión implícita.

NOTA: Conversiones implícitas en matrices

  • ​ Define una matriz de tipo int. Tan booleano. Los datos de tipo doble no se pueden almacenar en esta matriz, pero los datos de tipo byte, tipo corto y tipo int se pueden almacenar en esta matriz.

7.1.2 Recomendaciones

La clase del contenedor es consistente con el tipo de datos almacenados.

ilustrar:

  • Los números enteros 1 2 3 4 56 se pueden almacenar usando una matriz de tipo int.
  • Los decimales 1,1 1,2 1,3 1,4 se pueden almacenar utilizando matrices de tipo doble.
  • Las cadenas "aaa" "bbb" "ccc" se pueden almacenar utilizando una matriz de tipo String.

7.2 Definición de matriz

7.2.1 Formato 1

数据类型 [] 数组名
# 例如
int [] array

7.2.2 Formato 2

数据类型  数组名 []
# 例如
int array []

detalle:

  • Tipo de datos: limita qué tipo de datos puede almacenar la matriz en el futuro.
    • Valores de inicialización predeterminados para matrices:
      1. Tipo de entero: 0
      2. Tipo decimal: 0,0
      3. Tipo booleano: falso
      4. Tipo de carácter: '\u0000'
      5. Tipo de referencia: nulo
  • Corchetes: Indica que se está definiendo una matriz.
  • Nombre de la matriz: es solo un nombre para uso futuro.

Aviso:

Los paréntesis de métodos y los nombres de matrices son los mismos independientemente de quién los escriba primero o quién los escriba último.

7.3 Inicialización estática de matrices

/* 完整格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,元素4...}; */
int[] arr = new int[]{
    
    11,22,33};
double[] arr = new double[]{
    
    1.1,1.2,1.3};
/* 简化格式:
数据类型[] 数组名 = {元素1,元素2,元素3,元素4...}; */
int[] array = {
    
    1,2,3,4,5};
double[] array = {
    
    1.1,1.2,1.3};

detalle:

  • Tipo de datos: qué tipo de datos se pueden almacenar después de que la matriz sea limitada
  • Corchetes: indica que lo que se define es un array
  • Nombre de la matriz: de hecho, es solo un nombre, lo cual es conveniente para uso futuro. Al nombrar, siga la nomenclatura de la pequeña joroba.
  • nuevo: Abre un espacio en la memoria para el arreglo.
  • Llaves: representan los elementos de la matriz. Los elementos son los datos almacenados en la matriz. Varios elementos deben estar separados por comas.

Aviso:

  • Los tipos de datos delante y detrás deben ser consistentes.
  • Una vez que se crea una matriz, su longitud no puede cambiar.

7.4 Inicialización dinámica de matrices

/* 格式:
数据类型[] 数组名 = new 数据类型[数组的长度]; */
int[] agesArr = new int[3];
int[] scoresArr = new int[10];

7.5 Valor de dirección

int[] arr = {
    
    1,2,3,4,5};
System.out.println(arr);//[I@6d03e736

double[] arr2 = {
    
    1.1,2.2,3.3};
System.out.println(arr2);//[D@568db2f2

detalle:

  • Al imprimir una matriz, lo que realmente aparece es el valor de la dirección de la matriz. El valor de la dirección de la matriz: representa la ubicación de la matriz en la memoria.

  • Detalles de dirección

    /*
    以[I@6d03e736为例:
    [ :表示现在打印的是一个数组。
    I:表示现在打印的数组是int类型的。
    @:仅仅是一个间隔符号而已。
    6d03e736:就是数组在内存中真正的地址值。(十六进制的)
    但是,我们习惯性会把[I@6d03e736这个整体称之为数组的地址值
    */
    

7.6 Índice

7.6.1 Definición

​ En Java, los índices también se denominan subíndices y subíndices. En otras palabras, es el número correspondiente a cada pequeña cuadrícula en el contenedor de la matriz.

7.6.2 Funciones

  • El índice debe comenzar desde 0.
  • Continuo sin interrupción.
  • Aumentar en +1 uno por uno.

7.7 Acceso a elementos de matriz

7.7.1 Función

  • Obtenga el valor en el índice correspondiente en la matriz

  • Modifique el valor en el índice correspondiente de la matriz. Una vez modificado, se sobrescribirá el valor original.

7.7.2 Demostración de acceso a matrices de casos de uso básico

public class ArrDemo2 {
    
    
    /*

        数组中元素访问的格式:
                数组名[索引];

         作用:
            1.获取指定索引上对应的元素
            2.修改指定索引上对应的元素


    */
    public static void main(String[] args) {
    
    
       int[] arr = {
    
    1,2,3,4,5};
       //需求1:获取arr数组中,3索引上的值
        int number = arr[3];
        System.out.println(number);
        System.out.println(arr[3]);

       //需求2:将arr数组中,3索引上的值修改为10
            arr[3] = 10;
        System.out.println("修改之后为:" + arr[3]);

    }
}

7.8 recorrido de matriz

7.8.1 Recorrido

​Es sacar todos los contenidos de la matriz uno por uno.

7.8.2 Demostración transversal de matrices de casos de uso básico

/* 格式:
数组名.length */
for(int i = 0; i < arr.length; i++){
    
    
    //在循环的过程中,i依次表示数组中的每一个索引
    sout(arr[i]);//就可以把数组里面的每一个元素都获取出来,并打印在控制台上了。
}

7.9 La diferencia entre los dos métodos de inicialización de matrices.

7.9.1 Inicialización estática

int[] arr = {
    
    1,2,3,4,5};

ilustrar:

Especifique manualmente los elementos de la matriz y el sistema calculará la longitud de la matriz en función de la cantidad de elementos.

7.9.2 Inicialización dinámica

int[] arr = new int[3];

ilustrar:

Especifique manualmente la longitud de la matriz y el sistema proporcionará el valor de inicialización predeterminado.

7.9.3 Escenarios de aplicación

  • Solo se especifica el número de elementos, pero no se especifican los datos específicos, se recomienda utilizar la inicialización dinámica.

ilustrar:

// 使用数组来存储键盘录入的5个整数。
int[] arr = new int[5];
  • Se han identificado todos los datos que se van a manipular y se recomienda la inicialización estática.

ilustrar:

// 将全班的学生成绩存入数组中,已知学生成绩为:66,77,88,99,100
int[] arr = {
     
     66,77,88,99,100}

7.9.4 Preguntas frecuentes sobre matrices

Índice fuera de los límites

public class ArrDemo6 {
    
    
    public static void main(String[] args) {
    
    
       int[] arr = {
    
    1,2,3,4,5,5,5,5,5};
        //用索引来访问数组中的元素
        System.out.println(arr[1]);
        System.out.println(arr[10]);//ArrayIndexOutOfBoundsException

    }
}

Descripción: Para cualquier matriz, el rango de índice

  1. Índice mínimo: 0
  2. Índice máximo:
    • Longitud de la matriz - 1
    • nombre de matriz.longitud - 1

8. Bloques de código

Resumen de notas:

  1. Bloques de código local: omitidos

  2. Construcción de bloques de código: abreviado

  3. Bloque de código estático (énfasis)

    • Significado: bloque de código modificado por estática

    • Caso de uso básico:

      /*格式:
      static{},需要通过static关键字修饰 */
      static{
               
               
      
      }
      // 当类加载时,此代码块就会被加载
      
    • Características: Se carga a medida que se carga la clase y se inicia automáticamente, solo se ejecuta una vez

8.1 Bloques de código local

public class CodeBlockLearn {
    
    
    public static void main(String[] args) {
    
    
        {
    
    
            int a=10;
            System.out.println(a);
        }
    }
}

ilustrar:

  • Escenario de aplicación: luego, cuando se exceden los corchetes, la variable a ya no existe, lo que tiene el efecto de liberar la variable por adelantado.

8.2 Construyendo bloques de código

  • La descarga de bloques de código en las ubicaciones de los miembros puede extraer código duplicado en varios constructores.
  • Tiempo de ejecución: cuando creamos un objeto de esta clase, primero ejecutaremos el bloque de código de construcción y luego ejecutaremos el método de construcción.

ilustrar:

Los bloques de código de construcción se ejecutan antes que los métodos de construcción.

8.3 Bloque de código estático (énfasis)

/*格式:
static{},需要通过static关键字修饰 */
public class MyClass {
    
    
    static {
    
    
        System.out.println("静态代码块执行了");
    }
 
    public static void main(String[] args) {
    
    
        System.out.println("主方法执行了");
    }
}

ilustrar:

  • Tiempo de ejecución: se carga a medida que se carga la clase y se inicia automáticamente, solo se ejecuta una vez
  • Escenario de uso: realice algunas operaciones de inicialización al cargar una clase

9.Palabras clave

Resumen de notas: ver cada módulo

9.1esta palabra clave

Resumen de notas:

  • Definición: Cuando usamos dentro de una clase this, se refiere al objeto actual de esa clase .

  • Caso de uso básico:

     public class Person {
           
           
        private String name;
        private int age;
    
        public Person(String name, int age) {
           
           
                      this.name = name; //使用this关键字引用当前对象的成员变量name
            this.age = age; //使用this关键字引用当前对象的成员变量age
        }
    }
    

Definición: en Java, esta es una palabra clave que representa el objeto actual. Se puede utilizar para acceder a las propiedades y métodos del objeto actual.

Caso de uso básico

public class Person {
    
    
    private String name;
    private int age;

    public Person(String name, int age) {
    
    
        this.name = name; //使用this关键字引用当前对象的成员变量name
        this.age = age; //使用this关键字引用当前对象的成员变量age
    }
}

ilustrar:

​Cuando usamos dentro de una clase this, se refiere al objeto actual de esa clase.

9.2 palabra clave estática

Resumen de notas:

  • Definición: static es una palabra clave utilizada para modificar variables miembro, métodos miembros y bloques de código de una clase. Su función es asociar estas variables miembro, métodos miembros y bloques de código con la clase misma, en lugar de con el objeto de instancia de la clase.

  • Variables estáticas y su acceso.

    1. Significado: estática modifica las variables miembro de una clase

    2. definición:

      /* 格式:
      	修饰符 static 数据类型 变量名 = 初始值;*/
      public static String schoolName = "传智播客"
    3. acceso:

      /* 格式:
      	类名.静态变量 */
      System.out.println(Student.schoolName); // 传智播客
      
  • Variables de instancia y su acceso.

    1. Significado: variables miembro de clases sin modificación estática

    2. definición:

      /* 格式:
      	修饰符 数据类型 变量名 = 初始值;  */
      public String schoolName = "传智播客"
    3. acceso:

      /* 格式:
      	对象.方法名 */
      Student stu = new Student();
      System.out.println(stu.schoolName);
      
    4. Aviso:

      • Las variables de instancia pertenecen a cada objeto y deben crearse para acceder al objeto de clase.
      • Las variables estáticas no pertenecen a objetos miembro , pertenecen a clases. La carga de la variable estática se carga con la carga de la clase , antes de la existencia del objeto.
  • Métodos estáticos y su acceso.

    1. Significado: método miembro estático modificado de la clase

    2. definición:

      /* 格式:
      	修饰符 static 类型 方法名() */
      public static void study(){
               
                // 类方法或者静态方法。
          System.out.println("我们都在黑马程序员学习");   
      }
      
    3. Acceso: a través del nombre de la clase.nombre del método()

      /* 格式:
      	类名.方法名() */
      Student.study();
      
    4. Nota: Los métodos de instancia pertenecen a cada objeto y deben crearse para acceder al objeto de clase.

  • Métodos de instancia y su acceso.

    1. Significado: métodos miembro de clases sin modificación estática

    2. definición:

      /* 格式:
      	修饰符 类型 方法名()*/
      public void study(){
               
                // 类方法或者静态方法。
          System.out.println("我们都在黑马程序员学习");   
      }
      
    3. Acceso: requiere nuevo objeto

      /* 格式:
      	对象.方法名 */
      Student stu = new Student();
      System.out.println(stu.study());
      
  • Mapa de memoria :

    1. Cuando se utiliza la palabra clave estática, se abrirá un espacio de memoria llamado " ubicación de almacenamiento estático " en la memoria del montón.
    2. Los métodos estáticos no pueden acceder a recursos no estáticos
    3. Los métodos estáticos no pueden llamar a variables de instancia
    4. Los recursos no estáticos pueden acceder a todos
    5. Tenga en cuenta que la vida útil de los miembros estáticos es tan larga como la vida útil de la clase.

9.2.1 Descripción general

Estático es una palabra clave utilizada para modificar las variables miembro, los métodos miembros y los bloques de código de una clase. Su función es asociar estas variables miembro, métodos miembros y bloques de código con la clase misma, en lugar de con el objeto de instancia de la clase.

9.2.1 Variables estáticas y su acceso

9.2.1.1 Descripción general

Hay una variable miembro estática modificada, lo que indica que la variable miembro pertenece a la clase, esta variable miembro se llama variable de clase o variable miembro estática . Puede acceder a él directamente usando el nombre de la clase. Debido a que solo hay una clase, solo hay una copia de las variables miembro estáticas en el área de memoria. Todos los objetos pueden compartir esta variable.

9.2.1.2 Caso de uso básico: uso de palabras clave estáticas

/* 格式:
	修饰符 static 数据类型 变量名 = 初始值;*/    
public class Student {
    
    
    public static String schoolName = "传智播客"// 类变量或者静态成员变量
    // .....
}

9.2.1.3 Acceso

/*格式:
	类名.静态变量	*/
public static void  main(String[] args){
    
    
    System.out.println(Student.schoolName); // 传智播客
    Student.schoolName = "黑马程序员";
    System.out.println(Student.schoolName); // 黑马程序员
}

9.2.2 Variables de instancia y su acceso

9.2.2.1 Descripción general

Las variables miembro sin modificación estática pertenecen a cada objeto. Esta variable miembro se llama variable de instancia . Antes de escribir variables miembro, eran variables miembro de instancia.

9.2.2.2 Caso de uso básico: uso de variables de instancia

public class Student {
    
    
    public  String schoolName = "传智播客"// 成员变量
    // .....
}

9.2.2.3 Acceso

/* 格式:
	对象.实例成员变量 */
public static void main(String[] args) {
    
    
    Student stu = new Student();
    System.out.println(stu.schoolName);
}

detalle:

Las variables miembro de instancia pertenecen a cada objeto y deben crearse para acceder al objeto de clase .

9.2.3 Métodos estáticos y su acceso

9.2.3.1 Descripción general

Hay un método miembro estático modificado, lo que indica que este método miembro pertenece a la clase, y este método miembro se denomina método de clase o método estático. Simplemente use el nombre de la clase para acceder a ella directamente. Debido a que solo hay una clase, solo hay una copia del método estático en el área de memoria. Todos los objetos pueden compartir este método.

Al igual que las variables miembro estáticas, también se puede acceder a los métodos estáticos directamente a través del nombre de la clase y el nombre del método .

9.2.3.2 Casos de uso básicos

public class Student{
    
    
    public static String schoolName = "传智播客"// .....
        public static void study(){
    
     // 类方法或者静态方法。
        System.out.println("我们都在黑马程序员学习");   
    }
}

9.2.3.2 Acceso

/* 格式:
	类名.静态方法*/
public static void  main(String[] args){
    
    
    Student.study();
}

9.2.4 Métodos de instancia y su acceso

9.2.4.1 Descripción general

Los métodos miembros sin modificación estática pertenecen a cada objeto. Este método miembro también se denomina método de instancia .

detalle

Los métodos de instancia pertenecen a cada objeto y deben crearse para acceder al objeto de clase.

9.2.4.2 Casos de uso básicos: uso del método de instancia

/*格式:
	对象.实例方法*/
public class Student {
    
    
    // 实例变量
    private String name ;
    // 2.方法:行为
    // 无 static修饰,实例方法。属于每个对象,必须创建对象调用
    public void run(){
    
    
        System.out.println("学生可以跑步");
    }
	// 无 static修饰,实例方法
    public  void sleep(){
    
    
        System.out.println("学生睡觉");
    }
    public static void study(){
    
    
        
    }
}

9.2.4.3 Acceso

public static void main(String[] args){
    
    
    // 创建对象 
    Student stu = new Student ;
    stu.name = "徐干";
    // Student.sleep();// 报错,必须用对象访问。
    stu.sleep();
    stu.run();
}

resumen

1. Cuando staticse modifica una variable miembro o un método miembro, la variable se denomina variable estática y el método se denomina método estático . Cada objeto de esta clase comparte variables estáticas y métodos estáticos de la misma clase. Cualquier objeto puede cambiar el valor de esta variable estática o acceder al método estático. Pero no se recomienda este método de acceso. Debido a que se puede acceder a variables estáticas o métodos estáticos directamente a través del nombre de la clase, no es necesario utilizar objetos para acceder a ellos.

2. Las variables miembro o los métodos miembro sin modificación estática se denominan variables de instancia. Los métodos de instancia , las variables de instancia y los métodos de instancia deben crear un objeto de la clase y luego acceder a él a través del objeto.

3. Los miembros modificados por static pertenecen a la clase y se almacenarán en el área estática, se cargan a medida que se carga la clase y solo se cargan una vez, por lo que solo queda una copia, ahorrando memoria. Se almacena en un área de memoria fija (área estática), por lo que se puede llamar directamente por el nombre de la clase. Existe antes que el objeto, por lo que todos los objetos pueden compartirlo.

4. Los miembros sin modificación estática pertenecen a objetos, habrá tantas copias de ellos como objetos. Entonces debe ser llamado por el objeto.

9.2.5 Mapa de memoria estática (puntos clave)

método estático

imagen-20230303143249383

ilustrar:

Si desea compartir una variable miembro en la clase, puede cambiarla a estática para decoración. Este es el flujo de ejecución en la memoria estática.

Reponer:

El método saldrá después de ser empujado a la pila.

Nota: los métodos estáticos no pueden acceder a métodos no estáticos

imagen-20230303151408269

ilustrar:

  1. Si el nombre no es estático, no aparecerá en la ubicación de almacenamiento estático en la memoria del montón, por lo que los métodos estáticos no pueden acceder a los no estáticos.
  2. Ahora no hay ningún objeto instanciado en la memoria del montón, por lo que el método estático no puede llamar a la variable de instancia

Reponer:

Cuando el estudiante del método Student.teacherName se lee en el método principal, el archivo de código de bytes Student.class se cargará en el área del método.

imagen-20230303151626162

ilustrar:

Si el método show se puede llamar en el método método, entonces en la memoria de la pila, ¿esto? ? ? ¿Quién llamará al método .show? Normalmente, debería ser llamado por un objeto, por lo que los métodos estáticos no pueden acceder a los métodos no estáticos.

Reponer:

El ciclo de vida de los miembros estáticos es tan largo como el ciclo de vida de la clase, es decir, cuando se carga la clase, a los miembros estáticos se les asigna memoria, cuando se descarga la clase, la memoria ocupada por los miembros estáticos también es liberado.

9.2.6 Estático modifica variables miembro y métodos miembro

imagen-20230303143546266

9.2.7 Herramientas estáticas de uso común

Una clase que nos ayuda a hacer algo, pero no describe nada.

1. Algunos estudiantes no entendieron, déjenme explicarlo aquí. La última lección mencionó que las variables estáticas se crean antes de las clases.

2. Significa que primero cargo las variables estáticas y luego creo la clase, sigo este paso.

3. Entonces, si esta clase solo tiene métodos, es decir, clases de herramientas, no necesito crear esta clase.

4. Porque puedo llamar a métodos directamente antes de esta clase y solo se pueden crear métodos estáticos primero

9.2.8 Desventajas estáticas

  1. El ciclo de vida de las variables estáticas es demasiado largo: las variables estáticas existen durante la ejecución del programa, lo que puede ocupar una gran cantidad de espacio de memoria y afectar el rendimiento del programa.
  2. Problemas de acceso concurrente a variables estáticas: pueden ocurrir problemas de acceso concurrente cuando varios subprocesos acceden a variables estáticas al mismo tiempo , lo que resulta en inconsistencia de datos u otros errores.
  3. Los métodos estáticos no pueden ser anulados por subclases: dado que los métodos estáticos pertenecen a clases, no a objetos, no pueden ser anulados por subclases, lo que limita la flexibilidad del programa.
  4. Los métodos estáticos necesitan crear objetos al llamar a métodos o variables no estáticos: dado que los métodos estáticos pertenecen a clases y no pueden acceder directamente a métodos o variables no estáticos , necesitan crear objetos para acceder a ellos.
  5. Los bloques de código estático no pueden manejar excepciones: las declaraciones en bloques de código estático no pueden manejar excepciones y solo pueden manejarse lanzando excepciones.

static Ejecución de método estático: análisis de memoria_método estático existe cuando se ejecuta el blog-CSDN de blog_qingdao_java

9.3 palabra clave final

Resumen de notas:

  • Definición: finales una palabra clave que se puede utilizar para modificar variables, métodos y clases para indicar un estado inmutable y final .

  • Variable modificadora:

    1. Variable local: significa que su valor no se puede cambiar, es decir, la variable es una constante. Los valores de las variables no se pueden modificar

         final int a;
         a = 10;
      
    2. Variable miembro: significa que su valor no se puede cambiar, es decir, la variable es una constante. Las variables solo se pueden asignar inmediatamente al definir variables miembro.

       final int num = 10;
      
    3. Las variables están claramente estandarizadas: las palabras individuales están todas en mayúscula y varias palabras están separadas por guiones bajos.

  • Método modificado: indica que el método no puede ser anulado (anulado) por subclases

    final public void show1() {
           
           
    		System.out.println("Fu2 show1");
    	}
    
  • Clase modificada: indica que la clase se llama clase final (o clase no extensible) porque no puede ser heredada por otras clases .

    final class Fu {
           
           
    }
    
  • detalle:

    1. La variable modificada final es de tipo básico : entonces el valor de los datos almacenados en la variable no se puede cambiar
    2. La variable modificada por final es un tipo de referencia : entonces el valor de la dirección almacenada en la variable no se puede cambiar , pero se puede modificar el contenido del objeto al que apunta .

9.3.1 Descripción general

finalEs una palabra clave que se puede utilizar para modificar variables, métodos y clases para representar estados finales e inmutables.

  1. Modificar variables:
    • finalLas variables modificadas representan constantes. Una vez asignado un valor, no se pueden cambiar .
    • finalLas variables declaradas deben inicializarse en el momento de la declaración o en el constructor; de lo contrario, el compilador informará un error.
    • Al declarar finalvariables, generalmente utilice todas las letras mayúsculas y guiones bajos.
  2. Método de modificación:
    • finalUn método modificado significa que el método no puede anulado ni anulado por subclases .
    • Cuando una clase se declara como final, todos los métodos que contiene se convierten automáticamente en final, pero las variables de instancia no se ven afectadas.
  3. Clase de modificación:
    • finalClase modificada significa que la clase no se puede heredar .
    • El uso de finalclases modificadas puede garantizar que el comportamiento de la clase no cambie y también puede mejorar la seguridad y confiabilidad del código.

9.3.2 Modificar variables

9.3.2.1 Variables locales (énfasis)

public class FinalDemo1 {
    
    
    public static void main(String[] args) {
    
    
        // 声明变量,使用final修饰
        final int a;
        // 第一次赋值 
        a = 10;
        // 第二次赋值
        a = 20; // 报错,不可重新赋值

        // 声明变量,直接赋值,使用final修饰
        final int b = 10;
        // 第二次赋值
        b = 20; // 报错,不可重新赋值
    }
}

ilustrar:

​ Las variables locales de tipo básico, después de ser modificadas por final, solo se pueden asignar una vez y no se pueden volver a cambiar.

9.3.2.2 Variables miembro (énfasis)

Las variables miembro implican problemas de inicialización. Los métodos de inicialización incluyen la inicialización de visualización y la inicialización del constructor. Solo puede elegir uno de ellos:

  • Inicialización de pantalla (asigne valores inmediatamente al definir variables miembro) (de uso común);
public class Student {
    
    
    final int num = 10;
}
  • Inicialización del constructor (asigne un valor una vez en el constructor) (no se usa comúnmente, solo entiéndalo).

    Nota: ¡Se debe asignar un valor una vez en cada constructor!

public class Student {
    
    
    final int num = 10;
    final int num2;

    public Student() {
    
    
        this.num2 = 20;
//     this.num2 = 20;
    }
    
     public Student(String name) {
    
    
        this.num2 = 20;
//     this.num2 = 20;
    }
}

ilustrar:

​ Los nombres constantes modificados por final generalmente tienen estándares de escritura y todas las letras están en mayúscula .

9.3.3 Método de modificación

9.3.3.1 Descripción general

Los métodos modificados finales no se pueden anular

9.3.3.2 Caso de uso básico: demostración del método de decoración

/* 格式:
修饰符 final 返回值类型 方法名(参数列表){
    //方法体
} */
class Fu2 {
    
    
	final public void show1() {
    
    
		System.out.println("Fu2 show1");
	}
	public void show2() {
    
    
		System.out.println("Fu2 show2");
	}
}

class Zi2 extends Fu2 {
    
    
//	@Override
//	public void show1() {
    
    
//		System.out.println("Zi2 show1");
//	}
	@Override
	public void show2() {
    
    
		System.out.println("Zi2 show2");
	}
}

9.3.4 Clase de modificación

9.3.4.1 Descripción general

Una clase modificada final no se puede heredar

9.3.4.2 Casos de uso básicos: uso de clases modificadas

/* 格式:
	final class 类名 {
	} 	*/
final class Fu {
    
    
}
// class Zi extends Fu {} // 报错,不能继承final的类

ilustrar:

​ 查询API发现像 public final class Stringpublic final class Mathpublic final class Scanner 等,很多我们学习过的类,都是被final修饰的,目的就是供我们使用,而不让我们所以改变其内容。

9.4private关键字

笔记小结:

  1. 概述:用于修饰类的成员变量和方法的修饰符
  2. 作用:防止外部程序对对象的数据进行非法访问和操作

9.4.1概述

​ private是一个修饰符,可以用来修饰成员(成员变量,成员方法)

说明:

​ 被private修饰的成员,只能在本类进行访问,针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作

细节:

  • 提供“get变量名()”方法,用于获取成员变量的值,方法用public修饰
  • 提供“set变量名(参数)”方法,用于设置成员变量的值,方法用public修饰

9.4.2基本用例-private关键字使用

/*
    学生类
 */
class Student {
    
    
    //成员变量
    String name;
    private int age;

    //提供get/set方法
    public void setAge(int a) {
    
    
        if(a<0 || a>120) {
    
    
            System.out.println("你给的年龄有误");
        } else {
    
    
            age = a;
        }
    }

    public int getAge() {
    
    
        return age;
    }

    //成员方法
    public void show() {
    
    
        System.out.println(name + "," + age);
    }
}
/*
    学生测试类
 */
public class StudentDemo {
    
    
    public static void main(String[] args) {
    
    
        //创建对象
        Student s = new Student();
        //给成员变量赋值
        s.name = "林青霞";
        s.setAge(30);
        //调用show方法
        s.show();
    }
}

9.4.3案例-private的使用

  • 需求:定义标准的学生类,要求name和age使用private修饰,并提供set和get方法以及便于显示数据的show方法,测试类中创建对象并使用,最终控制台输出 林青霞,30

  • 示例代码:

    /*
        学生类
     */
    class Student {
          
          
        //成员变量
        private String name;
        private int age;
    
        //get/set方法
        public void setName(String n) {
          
          
            name = n;
        }
    
        public String getName() {
          
          
            return name;
        }
    
        public void setAge(int a) {
          
          
            age = a;
        }
    
        public int getAge() {
          
          
            return age;
        }
    
        public void show() {
          
          
            System.out.println(name + "," + age);
        }
    }
    /*
        学生测试类
     */
    public class StudentDemo {
          
          
        public static void main(String[] args) {
          
          
            //创建对象
            Student s = new Student();
    
            //使用set方法给成员变量赋值
            s.setName("林青霞");
            s.setAge(30);
    
            s.show();
            //使用get方法获取成员变量的值
            System.out.println(s.getName() + "---" + s.getAge());
            System.out.println(s.getName() + "," + s.getAge());
    
        }
    }
    

9.5this关键字

笔记小结:

  1. 含义:this的本质就是所在方法调用者的地址值
  2. 内存图:
    • 方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量
    • 方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量

this关键字内存原理(重点)

imagen-20230228093820021

imagen-20230228094218260

说明:

方法执行完成后会出栈

总结一句话:this的本质就是所在方法调用者的地址值

this修饰的变量用于指代成员变量,其主要作用是(区分局部变量和成员变量的重名问题)

  • 方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,带this修饰的变量是成员变量
  • 方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量
public class Student {
    
    
    private String name;
    private int age;

    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 void show() {
    
    
        System.out.println(name + "," + age);
    }
}

9.6super关键字

笔记小结:

  1. 含义:表示父类对象的引用,可以用来调用父类的构造方法实例方法实例变量

  2. 用法格式:

    this.成员变量    	--    本类的
    super.成员变量    	--    父类的
    
    this.成员方法名()  	--    本类的    
    super.成员方法名()   --    父类的
    
    super(...) -- 调用父类的构造方法,根据参数匹配确认
    this(...) -- 调用本类的其他构造方法,根据参数匹配确认
    
  3. super用法示例:

    • super() 和 this() 都必须是在构造方法的第一行,所以不能同时出现
    • super(…)是根据参数去确定调用父类哪个构造方法的
  4. 内存图:

    imagen-20230813112237941

  5. 细节:

    • 子类的每个构造方法中均有默认的super( ),调用父类的空参构造。手动调用父类构造会覆盖默认的super( )

    • super() 和 this() 都必须是在构造方法的第一行,所以不能同时出现

    • super( )和this( )是根据参数去确定调用父类哪个构造方法的

    • super( )可以调用父类构造方法初始化继承自父类的成员变量的数据

    • this( )可以调用本类中的其他构造方法

9.6.1概述

​ 在Java中super关键字,表示父类对象的引用,可以用来调用父类的构造方法、实例方法和实例变量

class Person {
    
    
    private String name;
    private int age;

    public Person() {
    
    
        System.out.println("父类无参");
    }

    // getter/setter省略
}

class Student extends Person {
    
    
    private double score;

    public Student() {
    
    
        //super(); // 调用父类无参构造方法,默认就存在,可以不写,必须再第一行
        System.out.println("子类无参");
    }
    
     public Student(double score) {
    
    
        //super();  // 调用父类无参构造方法,默认就存在,可以不写,必须再第一行
        this.score = score;    
        System.out.println("子类有参");
     }
      // getter/setter省略
}

public class Demo07 {
    
    
    public static void main(String[] args) {
    
    
        // 调用子类有参数构造方法
        Student s2 = new Student(99.9);
        System.out.println(s2.getScore()); // 99.9
        System.out.println(s2.getName()); // 输出 null
        System.out.println(s2.getAge()); // 输出 0
    }
}

说明:

​ 我们发现,子类有参数构造方法只是初始化了自己对象中的成员变量score,而父类中的成员变量name和age依然是没有数据的,怎么解决这个问题呢,我们可以借助与super(…)去调用父类构造方法,以便初始化继承自父类对象的name和age

9.6.3基本用例-super关键字使用

/* 格式:
    super.成员变量    	--    父类的
    super.成员方法名()   --    父类的 */
class Person {
    
    
    private String name ="凤姐";
    private int age = 20;

    public Person() {
    
    
        System.out.println("父类无参");
    }
    
    public Person(String name , int age){
    
    
        this.name = name ;
        this.age = age ;
    }

    // getter/setter省略
}

class Student extends Person {
    
    
    private double score = 100;

    public Student() {
    
    
        //super(); // 调用父类无参构造方法,默认就存在,可以不写,必须再第一行
        System.out.println("子类无参");
    }
    
     public Student(String name , int age,double score) {
    
    
        super(name ,age);// 调用父类有参构造方法Person(String name , int age)初始化name和age
        this.score = score;    
        System.out.println("子类有参");
     }
      // getter/setter省略
}

public class Demo07 {
    
    
    public static void main(String[] args) {
    
    
        // 调用子类有参数构造方法
        Student s2 = new Student("张三"2099);
        System.out.println(s2.getScore()); // 99
        System.out.println(s2.getName()); // 输出 张三
        System.out.println(s2.getAge()); // 输出 20
    }
}

注意:

  • 子类的每个构造方法中均有默认的super(),调用父类的空参构造。手动调用父类构造会覆盖默认的super()。

  • super() 和 this() 都必须是在构造方法的第一行,所以不能同时出现

  • super(…)是根据参数去确定调用父类哪个构造方法的。

9.6.4内存图

父类空间优先于子类对象产生

Cada vez que se crea un objeto de subclase, primero se inicializa el espacio de clase principal y luego se crea el objeto de subclase. El propósito es que si el objeto de la subclase contiene su correspondiente espacio de clase principal, puede contener los miembros de su clase principal. Si los miembros de la clase principal no se modifican de forma privada, la subclase puede usar los miembros de la clase principal a voluntad. Cuando el código se refleja en la llamada al constructor de la subclase, primero se debe llamar al constructor de la clase principal. La comprensión del diagrama es la siguiente:

imagen-20230813112250239

9.6.5 Casos de uso básicos de this()

este(…)

  • El valor predeterminado es buscar otros constructores en esta clase y determinar a qué constructor llamar según los parámetros .
  • Para tomar prestada la funcionalidad de otros constructores.
/* 格式:
	this.成员变量    	--    本类的
	this.成员方法名()  	--    本类的    */
package com.itheima._08this和super调用构造方法;
/**
 * this(...):
 *    默认是去找本类中的其他构造方法,根据参数来确定具体调用哪一个构造方法。
 *    为了借用其他构造方法的功能。
 */
public class ThisDemo01 {
    
    
    public static void main(String[] args) {
    
    
        Student xuGan = new Student();
        System.out.println(xuGan.getName()); // 输出:徐干
        System.out.println(xuGan.getAge());// 输出:21
        System.out.println(xuGan.getSex());// 输出: 男
    }
}

class Student{
    
    
    private String name ;
    private int age ;
    private char sex ;

    public Student() {
    
    
  // 很弱,我的兄弟很牛逼啊,我可以调用其他构造方法:Student(String name, int age, char sex)
        this("徐干",21,'男');
    }

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

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

    public char getSex() {
    
    
        return sex;
    }

    public void setSex(char sex) {
    
    
        this.sex = sex;
    }
}

ilustrar:

Este mapa de memoria se ha explicado en detalle en esta palabra clave.

repostaje de conocimientos

1. Modelo de memoria Java

En Java, HelloWorldel mapa de memoria para ejecutar un método.

imagen-20230303093525909

ilustrar:

La memoria de pila se usa para métodos , la memoria de montón se usa para objetos y el área de métodos se usa para el almacenamiento temporal de archivos de clase ejecutados .

Reponer:

  • Referencia: https://www.bilibili.com/video/BV17F411T7Ao/?p=107
  • Cuando se ejecuta el método principal, se generará el archivo de clase StringDemo.

2. Teclas de acceso directo de ideas

2.1 Ver la clase de implementación de la interfaz

ilustrar:

Ctrl+Alt+B

Seleccione un método y presione Ctrl+Alt+B para ver la clase de implementación que implementa esta interfaz.

imagen-20230321143750637

2.2 Pequeños detalles de iconos

Ctrl+F12 puede ver el estado de la clase actual, como métodos de miembros, propiedades de miembros, etc.

imagen-20230424201934606

imagen-20230424202204121

C representa clase, M representa método, F representa variable miembro constante o estática , ➡️ representa herencia, ⬆ representa anulación

3.La diferencia entre int y entero

​ 在Java中,int是一种原始数据类型(primitive data type),用于表示整数值。它是Java中最常用的数据类型之一,它的大小为4个字节(32位),可以表示介于-2,147,483,648和2,147,483,647之间的整数。

​ 而Integer是Java中的一个类(Class),它封装了一个基本类型的int的值。它允许将int值作为参数传递给需要一个对象的方法,也可以将int值转换为其他类型的值,例如字符串。

​ 因此,intInteger的主要区别在于int是一个原始数据类型,而Integer是一个类,用于封装int值以便进行更多的操作。此外,int在Java中是一种基本数据类型,而Integer是一种引用数据类型,也就是说Integer实际上是一个指向对象的指针,而不是一个简单的数据值。

4.String 和Character 区别

String是一种对象,用于表示一个字符序列(即一组字符)。它是Java中的一个类,具有许多实用方法来操作和处理字符串,例如连接、替换、搜索和分割等。字符串常量可以使用双引号括起来,例如"hello"

Character是Java中的char类型的包装类,它用于表示单个字符。每个Character对象都包含一个char类型的值。它也具有一些实用方法来操作和处理字符,例如将字符转换为大写或小写。字符常量可以使用单引号括起来,例如'A'

Por tanto, la principal diferencia entre Stringy Characteres el tipo de datos que representan. Stringse usa para indicar un grupo de caracteres y Characterse usa para indicar un solo carácter. Además, Stringes una clase, Characterpero un tipo de datos simple. En Java, una cadena es inmutable y, por lo tanto, no se puede modificar en la cadena original, Characterpero mutable ya que representa solo un carácter.

5. La diferencia entre tipos de datos básicos y tipos de datos de referencia

Enlace de referencia: (29 mensajes) La diferencia entre tipos de datos básicos y tipos de datos de referencia_Brandon comprende su blog-blog CSDN

Supongo que te gusta

Origin blog.csdn.net/D_boj/article/details/132192272
Recomendado
Clasificación