java13 orientado a objetos en profundidad

Java13 orientado a objetos en profundidad 2

contorno

empaquetar e importar

paquete

Visión de conjunto

El significado del paquete es evitar inconvenientes causados ​​por conflictos de nombres .

Un paquete es similar a una carpeta y hay varios archivos en la carpeta. La relación de afiliación entre paquete y paquete está relacionada con ".", Similar a una subcarpeta en una carpeta principal. Por ejemplo, java.lang.String es el archivo String en la carpeta lang en la carpeta java. java.io.InputStream es el archivo InputStream en la carpeta io en la carpeta java.

Los archivos con el mismo nombre no pueden existir en la misma carpeta y los archivos con el mismo nombre se permiten en carpetas con nombres diferentes, por lo que carpetas diferentes (es decir, se permite el mismo nombre de clase en paquetes diferentes).

<font color = 'red'> Para facilitar la gestión de una gran cantidad de clases en sistemas de software a gran escala y resolver el problema de los conflictos de nombres de clases, Java introduce un mecanismo de paquete para proporcionar múltiples espacios de nombres de clases para las clases. </font>

java13 orientado a objetos en profundidad

formato

El nombre general es: <font color = "blue"> nombre de dominio de la empresa al revés + nombre de la función | nombre del módulo. </font>

La declaración del paquete es la primera declaración en el archivo fuente de Java, que indica el paquete donde se encuentra la clase definida en el archivo. (Si esta declaración está predeterminada, se especifica como un paquete sin nombre).

package pkg1[.pkg2[.pkg3…]];

Ejemplo:

package com.java01.test;

El compilador de Java administra el paquete correspondiente al directorio del sistema de archivos. En la declaración del paquete, use '.' Para indicar el nivel del paquete (directorio). Por ejemplo, use la declaración: paquete com.java01, luego todas las clases en el archivo se encuentran en. \ Com directorio \ java01

Nota:

  • No defina el mismo paquete y la misma clase que jdk, de lo contrario causará muchos problemas que encontrará inexplicables
  • Debe agregar paquetes al escribir proyectos, no use los paquetes predeterminados.
  • com.oop y com.oop.test, estos dos paquetes no tienen relación de contención y son dos paquetes completamente independientes. Parece lógico que este último sea parte del primero.

importar

Si existe un nombre de paquete para una clase, cuando se usa la clase en otros paquetes, el nombre completo (nombre completo o nombre de clase completo para abreviar, com.java01.MyClass) debe usarse para que el compilador encuentre la clase; también puede usar import Introduzca las clases que se utilizarán al principio del archivo.

import java.util.Scanner;
import java.io.*; //模糊匹配当前io包下所有类
public class ImportDemo {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in); //因为使用import关键字导包,可以使用
        java.util.ArrayList list=new java.util.ArrayList(); //权限定名
        //导入集合 注意:导入是不要导错包
        //使用*,模糊匹配
        File file=new File("D://test.txt");
        InputStream isInputStream=new FileInputStream(file);
    }
}

Las clases que no necesitan usar la importación son:

  1. Las clases (String, System ...) en el paquete de idioma (java.lang)

  2. Clases en el mismo paquete

Importación estática: la
declaración de importación no solo puede importar clases, sino también aumentar la función de importar métodos estáticos

//导入静态属性
import static java.lang.Math.PI;
import static java.lang.System.out;
//导入静态方法
import static java.lang.Math.sin;

public class ImportDemo {
    public static void main(String[] args) {
        out.println(PI);
        sin(1.1);
    }
}

para resumir

  • Si desea poner una clase en un paquete, use paquete en la primera línea del archivo fuente de la clase

  • Debe asegurarse de que el archivo de clase de esta clase esté ubicado en el directorio correcto
  • Si otras clases quieren visitar:
    1. Escribe el nombre completo
    2. Introducir
      • La coincidencia aproximada (se introducirán todas las clases utilizadas en el paquete) reducirá la velocidad de compilación, pero no afectará la velocidad de ejecución
      • Nombre de clase específico
      • Importación estática
    3. No es necesario importar las clases del mismo paquete


Los paquetes JDK comúnmente utilizados en breve:

  1. Paquete de lenguaje java.lang: funciones de uso común en el lenguaje, como: String, Math, System, Integer, Thread ...

  2. java.util - Toolkit: proporciona algunas clases de herramientas útiles, como contenedores (List, Set, Map ...), clases de fecha

  3. Paquete java.io-input y output: proporciona clases relacionadas para operar y leer archivos, como: File, InputStream, OutputStream ...

  4. Paquete java.net-network: clases para operar recursos remotos, como InetSocketAddress, DatagramPacket, ServerSocket ...

  5. Paquete java.sql-database: clases para operar JDBC, Connection, Statement, ResultSet ...

Mecanismo de recolección de basura (gc)

Visión de conjunto

Mecanismo de recolección de basura de recolección de basura

Todos los programadores se han encontrado con una situación de desbordamiento de la memoria. Cuando el programa se está ejecutando, el espacio de la memoria es limitado, así que cómo borrar los objetos que ya no se utilizan a tiempo para liberar la memoria, esto es lo que tiene que hacer el GC.

Hablando de recolección de basura (GC), la mayoría de la gente considera esta tecnología como un producto complementario del lenguaje Java. De hecho, GC tiene una historia más larga que Java. Ya en 1960, Lisp usaba técnicas de recolección de basura y asignación de memoria dinámica.

java13 orientado a objetos en profundidad

Los programadores saben que la estructura de la memoria jvm se divide en cinco áreas: contador de programa, pila de máquina virtual, pila de método local, área de pila y área de método. Entre ellos, la pila de la máquina virtual, la pila del método local y el contador del programa son tres áreas que se generan y destruyen con el hilo. Por lo tanto, no hay necesidad de considerar el problema de la recolección de basura de memoria excesiva, porque cuando una llamada a un método termina o un hilo termina, la memoria es naturalmente Siga el reciclaje.

Nos enfocamos en el área de método y el área de almacenamiento dinámico La asignación y recuperación de esta parte de la memoria son dinámicas, que es exactamente a lo que el recolector de basura debe prestar atención.

GC realiza principalmente el trabajo de limpiar objetos y organizar la memoria.

Liberación del espacio de objetos en diferentes idiomas:

  • El lenguaje tradicional C / C ++ requiere que el programador sea responsable de reciclar la memoria asignada. Desventajas de la recolección de basura explícita:

    1. El programa se olvida de reciclar a tiempo, lo que provoca pérdidas de memoria y reduce el rendimiento del sistema.
    2. Un error de programa recupera la memoria de la biblioteca de clases principal del programa, lo que hace que el sistema se bloquee.
  • El lenguaje Java no requiere que el programador controle directamente la recuperación de la memoria, el JRE recupera automáticamente la memoria que ya no se usa en segundo plano, lo que se llama basura.

    Recolección de basura.

    1. Puede mejorar la eficiencia de la programación.
    2. Proteja la integridad del programa.
    3. Su sobrecarga afecta el rendimiento. La máquina virtual Java debe rastrear los objetos útiles en el programa y determinar cuáles son inútiles.

Los puntos clave del mecanismo de recolección de basura:

  • El mecanismo de recolección de basura solo recupera el espacio de objetos en la memoria de pila de JVM.
  • No hay energía para otras conexiones físicas, como conexión de base de datos, flujo de salida de flujo de entrada y conexión de socket
  • La JVM actual tiene una variedad de algoritmos de implementación de recolección de basura con diferentes rendimientos.
  • La ocurrencia de recolección de basura es impredecible y el programa no puede controlar con precisión la ejecución del mecanismo de recolección de basura.
  • La variable de referencia del objeto se puede establecer en nulo, lo que implica que el mecanismo de recolección de basura puede reclamar el objeto.
  • Los programadores pueden usar System.gc () o Runtime.getRuntime (). Gc () para notificar al sistema que realice la recolección de basura, lo que tendrá algunos efectos, pero aún no se sabe si el sistema realiza la recolección de basura.
  • Antes de que el mecanismo de recolección de basura reclame cualquier objeto, siempre llamará a su método finalize (si este método se anula y una nueva variable de referencia re-referencia el objeto, el objeto se reactivará).
  • Nunca llame de forma activa al método finalize de un objeto, debe ser llamado por el mecanismo de recolección de basura.

Supongo que te gusta

Origin blog.51cto.com/14966126/2542623
Recomendado
Clasificación