[Entrevista con expertos] - Conceptos básicos de Java (36 preguntas)

Directorio de artículos

1. Clasificación de ocho tipos de datos básicos

(1) El primer tipo de tipo entero: byte, short, int, long
(2) El segundo tipo de tipo de punto flotante: float, double
(3) El tercer tipo de tipo lógico: booleano
(4) El cuarto tipo de carácter tipo: carbón

2. La diferencia entre reescribir y sobrecargar

1. Reglas de sobrecarga:

①Debe tener diferentes listas de parámetros.

②Puede haber diferentes modificadores de acceso.

③ Se pueden lanzar diferentes excepciones.

2. Reglas para anular métodos:

①La lista de parámetros debe ser exactamente la misma que la del método anulado; de lo contrario, no se puede llamar sobrescritura sino sobrecarga.

②El tipo devuelto siempre debe ser el mismo que el tipo de retorno del método anulado; de lo contrario, no se puede llamar sobrescritura sino sobrecarga.

③El límite del modificador de acceso debe ser mayor que el modificador de acceso del método anulado.

④El tipo de excepción arrojado por el método anulado de la subclase no es mayor que el tipo de excepción arrojado por el método anulado de la clase principal.

3. Diferencias en las relaciones de clases:

Anular es la relación entre subclases y clases principales, que es una relación vertical; sobrecargar es la relación entre métodos de la misma clase, que es una relación horizontal.

3. La diferencia entre int y entero

  • Tipo de datos: int es el tipo de datos básico de Java, entero es la clase contenedora de int
  • Capacidad de nulidad: es un tipo de datos básico que no puede representar nulo. Si una variable int no se inicializa explícitamente, se le asigna un valor predeterminado de 0. Un entero es un objeto que puede representar valores nulos. Puede establecer un número entero en nulo, lo que significa que no tiene valor.
  • Rendimiento: int ocupa menos espacio en la memoria porque es un tipo de datos básico y no requiere un encabezado de objeto ni espacio de almacenamiento adicional. Integer es un objeto, por lo que ocupa más espacio de memoria y requiere operaciones adicionales al encajonar (convertir int a Integer) y unboxing (convertir Integer a int), lo que puede afectar el rendimiento.
  • Métodos y operaciones: int no tiene métodos ni propiedades y solo puede realizar operaciones matemáticas y de comparación básicas. La clase Integer tiene métodos enriquecidos, como: equals, Compareto, toStringque pueden realizar diversas operaciones relacionadas con números enteros, como conversión a cadenas, comparación, análisis, etc.

4. Palabras clave de Java

(1) Modificadores de acceso (3)
Insertar descripción de la imagen aquí(2) Modificar métodos, clases, atributos y variables (9) (
Insertar descripción de la imagen aquí
3) Definir clases, interfaces, clases abstractas e interfaces de implementación, palabras clave de clases heredadas y 6 objetos instanciados
Insertar descripción de la imagen aquí
(4)) 2 palabras clave del paquete
Insertar descripción de la imagen aquí
(5) 12 palabras clave de tipo de datos
Insertar descripción de la imagen aquí
(6) Bucle condicional (12 en total)
Insertar descripción de la imagen aquí
(7) 5 manejo de errores
Insertar descripción de la imagen aquí
Resumen: Hay 51
palabras clave en Java + 2 reservadas Hay 53 , y todas las palabras clave minúscula! Palabras clave reservadas:

  • constante
  • Ir a la
    pregunta: Pero en el proceso de hacer las preguntas, verdadero, falso y nulo no son palabras clave de Java. En otras palabras, ¿solo hay 50 palabras clave de Java?
    Verdadero, falso y nulo en Java no son palabras clave ni palabras reservadas en Java. Solo muestran valores constantes, pero no se pueden usar como identificadores en Java.

5. ¿Qué es el autoboxing y unboxing?

  • Boxeo: los tipos básicos se convierten en tipos encapsulados, este proceso se realiza automáticamente sin código explícito.
  • Unboxing: el proceso de convertir tipos encapsulados en tipos básicos. , este proceso también se realiza de forma automática.
    Función: el empaquetado y desempaquetado automático hace que sea más conveniente convertir entre tipos de datos básicos y tipos empaquetados, al tiempo que reduce la redundancia de código.

6. ¿Qué es el polimorfismo en Java?

En términos simples: es una variedad de formas, específicamente para completar un determinado comportamiento. Cuando diferentes objetos lo completan, se producirán diferentes estados.

Por ejemplo, el estudiante es una clase de padres, luego los estudiantes que toman clases de educación física en el patio de recreo y los estudiantes en el aula son sus subclases. En ese momento sonó el timbre de la clase, los alumnos de la clase de educación física fueron al patio de recreo, mientras que los alumnos del aula regresaron al aula, diferentes alumnos tuvieron diferentes reacciones, esto es polimorfismo.

Rol: Flexibilidad y mantenibilidad, reutilización de código, múltiples implementaciones de interfaces:

7. ¿Cuál es la diferencia entre interfaz y clase abstracta?

Las palabras clave definidas son diferentes: interfaz, clase abstracta: abstracto.
Las palabras clave de herencia o implementación de subclases son diferentes: interfaz: implementar, extiende.
Las extensiones de tipo son diferentes: las clases abstractas tienen herencia única, mientras que las interfaces tienen herencia múltiple.
Caracteres de control de acceso a métodos: no hay restricciones para las clases abstractas, pero los métodos abstractos en clases abstractas no pueden ser modificados por privado; las interfaces tienen restricciones y el carácter de control de interfaz predeterminado es público.
Símbolos de control de métodos de atributos: no hay restricciones para las clases abstractas, pero sí para las interfaces. El símbolo de control predeterminado para las interfaces es público.
Las implementaciones de métodos son diferentes: se deben implementar métodos ordinarios en clases abstractas y no se deben implementar métodos abstractos; mientras que los métodos ordinarios en interfaces no se pueden implementar, pero se deben implementar métodos estáticos y predeterminados en JDK 8.
El uso de bloques de código estático es diferente: las clases abstractas pueden tener bloques de código estático, pero las interfaces no.

8. ¿Cómo manejar excepciones en Java?

Utilice intentar... atrapar

9. ¿Cuál es la función de la palabra clave final en Java?

Estructuras que final se pueden usar para modificar: clases, métodos, variables
final se usa para modificar una clase: esta clase no puede ser heredada por otras clases.
final se usa para modificar métodos: indica que este método no se puede anular.
final se usa para modificar variables, en cuyo caso las variables son equivalentes a constantes.

10. ¿Qué es la serialización y deserialización en Java?

La serialización es el proceso de convertir el estado de un objeto en un flujo de bytes para que pueda transmitirse a través de una red o persistir en el disco. La deserialización es el proceso de restaurar un flujo de bytes serializado en un objeto. En Java, la serialización y deserialización se implementan a través de ObjectInputStream y ObjectOutputStream.

¿Por qué necesitamos la serialización?

En las aplicaciones modernas, a menudo es necesario transferir el estado de los objetos entre diferentes sistemas, procesos y subprocesos. Por ejemplo, en un sistema distribuido, es posible que sea necesario transferir objetos entre diferentes servidores. Otro ejemplo es cuando se almacenan objetos en caché, los objetos deben serializarse para poder guardarlos en el disco.

11. ¿Cuáles son las diferencias entre String, StringBuilder y StringBuffer en Java?

String declara un objeto inmutable. Cada operación generará un nuevo objeto String y el puntero apuntará al nuevo objeto.

StringBuffer y StringBuilder pueden funcionar sobre la base de los objetos originales.
La diferencia entre StringBuffer y StringBuiler es que StringBuffer es seguro para subprocesos y StringBuilder no es seguro para subprocesos.

StringBuilder >StringBuffer > String
Pero StringBuiler es más eficiente que StringBuffer.

12. ¿Cuáles son las cuatro características principales de la programación orientada a objetos en Java?

La encapsulación, la herencia, el polimorfismo y la abstracción son las cuatro características principales de la programación orientada a objetos.

13. ¿Cuáles son las funciones de los métodos equals() y hashCode() en Java?

El método equals() se usa para comparar si el contenido de los objetos es igual, mientras que el método hashCode() se usa para generar un código hash para el objeto para operaciones eficientes de búsqueda y comparación en estructuras de datos como clases de colección (como HashMap , HashSet). Estos dos métodos generalmente requieren coherencia, es decir, si dos objetos son lógicamente iguales, sus códigos hash también deben ser iguales para garantizar el funcionamiento correcto del conjunto.

14. ¿Cómo invertir una cuerda?

Utilice el método inverso() de StringBuilder o stringBuffer.

15. ¿Cuál es la diferencia entre los métodos “==” y “equal()”?

igual () compara si los valores (contenidos) de dos objetos son iguales.
"==" compara si las referencias (direcciones de memoria) de dos objetos son iguales y también se utiliza para comparar si los valores de las variables de dos tipos de datos básicos son iguales.

16. ¿Cuál es la diferencia entre final, finalmente y finalizar?

  1. Final se utiliza para declarar variables, métodos y clases, que representan constantes respectivamente. Los métodos no se pueden anular y las clases no se pueden heredar.
  2. Finalmente es parte de la estructura de la declaración de manejo de excepciones, indicando una sección de código que siempre se ejecutará independientemente de si ocurre o no.
    3.finalize es un método en la clase Objeto. Cuando se ejecuta el recolector de basura, se llamará al método finalize () del objeto reciclado para realizar otras operaciones de reciclaje de recursos durante la recolección de basura, como cerrar archivos y liberar conexiones.

17. ¿Cuál es la función del método intern() en String?

Si el grupo de constantes de cadena ya contiene una cadena igual a este objeto String, devuelva la referencia (dirección de memoria) de la cadena en el grupo de constantes; de lo contrario, coloque la nueva cadena en el grupo de constantes y devuelva la referencia de la nueva cadena (dirección de memoria).

18. ¿Qué son JVM, JRE y JDK?

JVMJVM
. Es la abreviatura de Java Virtual Machine, utilizada para ejecutar archivos de código de bytes Java (archivos *.class). JVM tiene implementaciones específicas para diferentes sistemas operativos (como Windows, Linux, nacOC). El propósito es utilizar el mismo código de bytes y ejecutar los mismos resultados en diferentes sistemas operativos. Este es el mecanismo central para que Java logre multiplataforma. La máquina virtual predeterminada en Java es HotSpot VM. Además, existen máquinas virtuales como JRockit (BEA), j9 (IBM), TaoBaoVM (Taobao); JRE JRE
significa
Java Runtime Environment. JRE incluye la máquina virtual Java y las bibliotecas de clases principales que necesitan los programas Java. Si desea ejecutar un programa Java desarrollado, solo necesita instalar JRE en su computadora.
JDK
JDK es la abreviatura de Java Development Kit (Java Development Kit), que se proporciona a los desarrolladores de Java. JDK contiene JRE y herramientas para desarrollar, ajustar y monitorear aplicaciones, herramientas de compilación (javac.exe), herramientas de empaquetado (jar.exe) , Plataforma de gestión y seguimiento de Java (jConsole, jvisualvm), etc.,

JDK contiene JRE y JRE contiene JVM. Entonces JDK > JRE > JVM.

19. ¿Cuáles son las ventajas del lenguaje Java?

1. Orientado a objetos (encapsulación, herencia, polimorfismo);
2. Multiplataforma (la máquina virtual Java logra independencia de plataforma);
3. Fiabilidad;
4. Seguridad;
5. Admite subprocesos múltiples;
6. Admite programación de red;
7. El método de ejecución adopta la coexistencia de ejecución de interpretación + ejecución de compilación
8. Hay muchos casos de aplicación práctica.

20.¿Qué es un método constructor?

El nombre del constructor es consistente con el nombre de la clase;
el constructor no tiene una estructura de tipo de valor de retorno y el constructor no puede declararse con void;
al crear un objeto, use la nueva palabra clave para llamar al constructor de ejecución;
incluso Si una clase no declara un constructor, Java proporcionará un método de construcción predeterminado sin argumentos.

21. ¿Cuáles son los métodos comunes en la clase String?

  1. indexOf(): Devuelve el índice del carácter especificado.
  2. charAt(): Devuelve el carácter en el índice especificado.
  3. reemplazar(): reemplazo de cadena.
  4. substring(): intercepta la cadena.
  5. split(): divide la cadena y devuelve una matriz de cadenas divididas.
  6. trim(): elimina los espacios en blanco en ambos extremos de la cadena.
  7. getBytes(): Devuelve una matriz de cadena de tipo byte.
  8. longitud(): Devuelve la longitud de la cadena.
  9. toLowerCase()/toUpperCase(): convierte cadenas a letras minúsculas/mayúsculas.
  10. igual (): comparación de cadenas.

22. ¿Por qué es necesario hashCode()? (Tome "Cómo verificar duplicados en HashSet" como ejemplo para ilustrar por qué es necesario hashCode)

1. Cuando agrega un objeto a un HashSet, el HashSet primero obtendrá el valor de código hash del objeto para calcular la posición donde se agrega el objeto y lo comparará con los valores de código hash de otros objetos que se han agregado.
2. Si no hay un código hash duplicado, HashSet asumirá que el objeto no aparece repetidamente y lo agregará normalmente.
3. Si se encuentran objetos con el mismo valor de hashCode, se utilizará el método igual () para verificar si los objetos con el mismo valor de hashCode son realmente iguales.
4. Si los dos son iguales, el HashSet no se agregará correctamente.
5. Si los dos son diferentes, se repetirán en otras ubicaciones.
6. Esto reduce en gran medida el número de ejecuciones de iguales() y, en consecuencia, aumenta la velocidad de ejecución.

23 ¿Por qué se debe anular el método hahsCode() al anular equals()?

Debido a que existe una cierta relación de cooperación entre el método equals() y el método hashCode(), trabajan juntos para garantizar el comportamiento correcto del objeto cuando se coloca en una estructura de datos como una tabla hash.
Para garantizar la coherencia y el rendimiento al utilizar estructuras de datos como tablas hash, generalmente se recomienda anular el método hashCode () al anular el método equals () y garantizar la coherencia lógica entre ellos. De lo contrario, se puede producir un comportamiento incorrecto de los objetos de la colección y problemas de rendimiento.

La relación entre el método equals() y el método hashCode() debe ser coherente.

  1. Si dos objetos son iguales (es decir, la comparación entre iguales devuelve verdadero), entonces sus valores de hashCode deben ser los mismos.
  2. Si dos objetos tienen el mismo código hash, no son necesariamente iguales (use iguales para comparar).

Relación de colaboración: en una tabla hash (como HashMap, HashSet), el valor hashCode del objeto se usa para determinar la ubicación de almacenamiento del objeto en la tabla, y el método igual se usa para verificar si dos objetos son iguales. Si dos objetos se consideran iguales (es decir, el método igual devuelve verdadero), entonces sus valores de hashCode deberían ser los mismos.

Rendimiento: si no implementa correctamente el método hashCode(), el rendimiento de la tabla hash puede verse afectado. En una tabla hash, la velocidad de búsqueda e inserción rápida depende del código hash del objeto. Si el método hashCode no es apropiado, puede causar conflictos de hash y reducir el rendimiento de la tabla hash.

Consistencia: según la especificación de Java, si dos objetos se consideran iguales en el método equals(), sus valores de hashCode deben ser los mismos. Esto se debe a que en la tabla hash, las coincidencias potenciales se buscan primero en función del valor del código hash y luego se utiliza el método igual para garantizar la precisión de la coincidencia.

En resumen, en cada clase que anula el método igual (), el método hashCode () también debe anularse. De lo contrario, se violará la convención general de Object.hashCode, lo que dará como resultado colecciones como HashSet y HashTable. Además, puede evitar que se llame a equals() con frecuencia y reducir la sobrecarga de rendimiento.

24. ¿Cuál es el papel de la tecnología de grupo constante en las clases de paquetes?

  1. Byte, Corto, Entero, Largo crean datos de caché en el rango [-128, 127].
    2.El carácter crea datos del búfer en el rango [0, 127].
    3. Si los datos están en el rango de la caché, no es necesario volver a crear el objeto y se obtienen directamente de la caché, lo que reduce la sobrecarga de memoria y rendimiento causada por la creación repetida de objetos.
    4. Si los datos exceden el rango de caché, se creará un nuevo objeto.

25. ¿Qué es el grupo constante de cadenas?

El grupo constante de cadenas garantiza que las cadenas con el mismo contenido solo se almacenen una vez. Esto significa que si dos cadenas tienen la misma secuencia de caracteres (mismo contenido), harán referencia al mismo objeto de cadena.
Si crea un objeto String a través de nuevo, será un objeto nuevo.

Uso del método intern(): la clase String proporciona un método intern() que se puede utilizar para agregar explícitamente objetos de cadena al grupo de constantes de cadena. Si necesita asegurarse de que el objeto de cadena exista en el grupo constante, puede utilizar este método.

String str1 = "hello"; // 创建一个字符串对象,存储在常量池中
String str2 = "hello"; // 直接引用常量池中的同一字符串对象

String str3 = new String("hello"); // 创建一个新的字符串对象,存储在堆内存中
String str4 = str3.intern(); // 使用intern()方法将字符串对象添加到常量池中

System.out.println(str1 == str2); // true,引用同一常量池对象
System.out.println(str1 == str3); // false,不同对象
System.out.println(str1 == str4); // true,引用同一常量池对象

26. ¿Java se pasa por valor o por referencia?

En Java, todos los métodos se pasan por valor. Si el parámetro es de tipo básico, el valor del parámetro se copia y se pasa al método. Si el parámetro es un tipo de referencia, copie el valor de la dirección de memoria en el montón del parámetro del objeto y páselo al método.

27. ¿Cuáles son los métodos comunes en la clase Objeto?

  • Método getClass: obtiene el objeto de clase en tiempo de ejecución del objeto.El objeto de clase es el objeto que describe la clase a la que pertenece el objeto.
  • Método hashCode: este método se utiliza principalmente para obtener el valor hash de un objeto. Este método en Objeto devuelve la dirección de memoria dinámica del objeto de forma predeterminada.
  • método de clonación
  • método toString
  • método de finalización
  • método de espera
  • método de notificación

28. ¿Cuáles son las interfaces comunes en Java?

1. Marco de colección: interfaz de colección, interfaz de lista, interfaz de conjunto, interfaz de mapa;
2. Comparador: interfaz de comparador, interfaz comparable;
3. Operación IO: interfaz que se puede cerrar (flujo de archivos que se puede cerrar);
4. Interfaz de marcado: interfaz RandomAccess (Acceso aleatorio a elementos de la colección), Interfaz serializable (serialización), Interfaz clonable (clonación de objetos),
5. Interfaz de subproceso: interfaz ejecutable.

29. ¿Qué es una excepción?

Los errores en un programa se denominan colectivamente excepciones.

30. ¿Cómo entiendes el sistema de excepciones en Java?

  • Throwable es la clase principal de todas las clases de excepción;
    • Error El programa no puede manejar, como desbordamiento de memoria, excepción JVM
    • El programa de excepción puede manejar.
    • Excepciones comprobables: las más típicas son las excepciones IO. Use una declaración try-catch para capturarlas o use una cláusula throws para declararlas; de lo contrario, la compilación no pasará.
    • Excepción no verificable:
      • Las excepciones en tiempo de ejecución se detectan mediante try...catch
      • La compilación falla debido a excepciones fuera del tiempo de ejecución.

31.¿Cuál es la diferencia entre Error y Excepción?

  1. Los errores de tipo generalmente son errores relacionados con la máquina virtual, como fallas del sistema, memoria insuficiente, desbordamiento de la pila, etc. El compilador no detectará dichos errores y las aplicaciones JAVA no deberían capturarlos. Una vez que ocurren dichos errores, la aplicación es normalmente finaliza y no puede ser recuperada por la propia aplicación;
  2. Las excepciones de tipo excepción se pueden detectar y manejar en la aplicación. Por lo general, cuando se encuentra un error de este tipo, se debe manejar para que la aplicación pueda continuar ejecutándose normalmente.

32. ¿Cuál es la diferencia entre tirar y tirar?

  • La palabra clave throw se usa para lanzar objetos de excepción en métodos o bloques de código. Tanto las excepciones marcadas como las no marcadas se pueden lanzar y usar dentro de los métodos;
  • La palabra clave throws se utiliza para identificar la lista de tipos de excepciones que puede generar este método. Cuando se define el método, se define después de la lista de parámetros y antes del cuerpo del método.

33. ¿Cuáles son las excepciones comunes en Java?

  1. NullPointerException Excepción de puntero nulo: esta excepción se produce al llamar a una referencia nula no instanciada;
  2. ClassNotFoundException Excepción de clase no encontrada: esta excepción se generará al cargar una clase inexistente (como durante la reflexión) de acuerdo con el nombre completo de la clase;
  3. NumberFormatException Excepción de formato de número: al convertir una cadena en un número, esta excepción se generará si la cadena contiene contenido no numérico;
  4. IndexOutOfBoundsException Excepción de índice fuera de límites: esta excepción se generará cuando el índice de matriz o cadena exceda el rango;
  5. IllegalArgumentException Excepción de parámetro ilegal: el parámetro entrante es ilegal y se lanza esta excepción;
  6. ClassCastException Excepción de conversión de tipo: convierte un tipo de clase incompatible y lanza esta excepción;
  7. Excepción SQLException SQL: esta excepción se lanzará cuando ocurra un error de sintaxis SQL al operar la base de datos;
  8. Excepción de lectura y escritura IOException: esta excepción se generará cuando se produzca un error durante las operaciones de lectura y escritura de IO en la secuencia de archivos;
  9. NoSuchMethodException No hay ninguna excepción en el método: no se puede encontrar el método de llamada, se lanza esta excepción.

34. ¿Cuénteme sobre su comprensión de la visibilidad de la memoria?

Por ejemplo, hay una variable pública a, tres subprocesos, un subproceso modifica el valor de a y los otros dos subprocesos pueden no ver el valor modificado de a, lo que es un problema de visibilidad de la memoria.
La razón es: para mejorar la velocidad de procesamiento, cada subproceso mantendrá un caché local de variables compartidas en la CPU, y todas las operaciones del subproceso sobre variables compartidas se realizarán en su propio caché local. Si el hilo A cambia una variable compartida, es posible que el hilo B no vea la modificación del hilo A.
Solución:

  • Utilice la palabra clave volátil:
    declare una variable como volátil, lo que le indica a la máquina virtual Java que se asegure de que todos los subprocesos vean el valor más reciente.
    Cuando un subproceso modifica el valor de una variable volátil, el cambio se escribe inmediatamente en la memoria principal y otros subprocesos obtienen el último valor de la memoria principal al leer la variable.

  • Utilice la palabra clave sincronizada:
    utilice bloques sincronizados para sincronizar las operaciones de lectura y escritura para garantizar que solo un hilo pueda acceder a las variables compartidas al mismo tiempo.
    Cuando un hilo adquiere el bloqueo y modifica una variable compartida, otros hilos deben esperar a que el hilo libere el bloqueo antes de acceder a la variable, garantizando así la visibilidad.

  • Utilice clases de herramientas en el paquete java.util.concurrent:
    Java proporciona algunas clases de herramientas de concurrencia, como AtomicInteger, CountDownLatch, CyclicBarrier, etc., que se pueden utilizar para manejar problemas de visibilidad de subprocesos múltiples sin escribir código de sincronización manualmente.
    Estas clases de utilidad proporcionan operaciones atómicas y mecanismos de sincronización para garantizar que las modificaciones a las variables compartidas sean visibles para otros subprocesos.

35. Cuénteme su comprensión de la palabra clave volátil.

volátil es una palabra clave en Java que se utiliza para modificar variables. Su función principal es garantizar la visibilidad y el orden en un entorno de subprocesos múltiples, lo que significa que cuando un subproceso modifica el valor de una variable volátil, otros subprocesos pueden ver inmediatamente la modificación.
El papel de la palabra clave volátil:

  • Visibilidad: en un entorno de subprocesos múltiples, cuando un subproceso modifica el valor de una variable volátil, este cambio es visible para otros subprocesos. Esto significa que cuando un subproceso modifica una variable volátil, otros subprocesos no leerán el valor almacenado en caché caducado, pero podrán ver el valor más reciente.
  • Deshabilitar el reordenamiento de instrucciones (Ordenar): la palabra clave volátil también evita que el compilador y el procesador reordenen las instrucciones. Esto garantiza que las lecturas y escrituras en variables volátiles se ejecuten en el orden del código sin reordenamiento inesperado de las instrucciones.
  • La atomicidad no está garantizada: la palabra clave volátil solo garantiza visibilidad y orden, pero no atomicidad. Si varios subprocesos escriben en la misma variable volátil al mismo tiempo, puede ocurrir una condición de carrera. Para escenarios que requieren operaciones atómicas, se deben utilizar clases atómicas o sincronizadas en java.util.concurrent.

Escenarios aplicables: volátil es adecuado para algunas operaciones simples de identificación de estado o bit de bandera, como la notificación de señales entre subprocesos. No es adecuado para operaciones complejas como operaciones de acumulación.

36. ¿Cuáles son las nuevas características de Java 8?

(1) Métodos predeterminados y métodos estáticos de las interfaces: anteriormente, las interfaces solo podían declarar métodos sin implementación. Después de Java 8, las interfaces pueden tener una implementación predeterminada, que debe marcarse con el modificador predeterminado;

default void test(){
    
    }
static void test2(){
    
    }
  • efecto:
    • Agregar nuevos métodos a las interfaces existentes: los métodos predeterminados permiten agregar nuevos métodos a las interfaces existentes sin romper las clases que ya implementan la interfaz. Antes de Java 8, si deseaba agregar un nuevo método a una interfaz, todas las clases que implementaban la interfaz tenían que proporcionar una implementación de ese método, lo que podía llevar a romper el código existente.
    • Extensibilidad de la interfaz: el método predeterminado mejora la extensibilidad de la interfaz. Se pueden agregar nuevos métodos a la interfaz sin romper las clases de implementación existentes. Esto es útil para la programación orientada a interfaz porque permite que la interfaz evolucione gradualmente sin afectar el código existente.
    • Expresiones lambda y programación funcional: la introducción de métodos predeterminados, junto con expresiones lambda, hace que las interfaces sean más fáciles de usar para la programación funcional. Por ejemplo, la interfaz funcional en el paquete java.util.function en la biblioteca estándar de Java usa métodos predeterminados, lo que le permite implementar solo uno o algunos métodos abstractos cuando usa expresiones Lambda.

(2) Expresión Lambda: lo más intuitivo de Lambda es que hace que el código sea más ordenado.

     

(3) Interfaz funcional:

  • Comparador
  • Consumidor
  • predicado (interfaz asertiva)
  • Proveedor
  • Función (interfaz funcional)

(4) Referencia de método: se utiliza para acceder directamente a métodos o constructores en una clase o instancia, de modo que el código sea más legible.
Simplemente úselo ::para llamar al método en la clase:

在这里插入代码片

(5) Stream: Permite procesar la recopilación de datos de forma declarativa.

  • Características:
    • Iteración interna:
    • Solo se puede atravesar una vez: cuando se completa el recorrido de la secuencia, la secuencia se consume.
    • Se puede procesar en paralelo:select.stream().parallel()

(6) Opcional: para resolver la excepción del puntero nulo. Y hace que el código sea más conciso; al usarlo, no necesitamos realizar explícitamente la detección de puntero nulo.
Opcional + lambda implementa comparar cadenas y encontrar la cadena más larga

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

public class OptionalLambdaExample {
    
    

    public static void main(String[] args) {
    
    
        List<String> stringList = Arrays.asList("apple", "banana", "cherry", "date", "elderberry");

        Optional<String> longestString = stringList.stream()
                .reduce((s1, s2) -> s1.length() > s2.length() ? s1 : s2);

        longestString.ifPresent(s -> System.out.println("最长的字符串是: " + s));
    }
}

(7) Fecha/Hora
(8) Anotaciones duplicadas
(9) Soporte de anotación extendida
(10) Base64
(11) JavaFx

Supongo que te gusta

Origin blog.csdn.net/qq_42785250/article/details/132942929
Recomendado
Clasificación