Hemos escrito algunos programas Java. Todos los programas Java anteriores se guardaban como un archivo, como Test.java. Posteriormente, el programa se compila en Test.class. Terminamos usando $java Test para ejecutar el programa.
Sin embargo, en un proyecto Java normal, a menudo necesitamos escribir más de un programa .java, y el producto Java final incluye todos los programas Java. Por tanto, Java necesita resolver el problema de organizar programas Java. El propósito de un paquete es organizar mejor los programas Java.
Creación de paquetes
La creación de paquetes es muy sencilla. Solo necesitamos agregar el paquete al comienzo del programa Java. Tomemos la clase Humana como ejemplo y pongámosla en el paquete:
Copie el código de código de la siguiente manera:
paquete com.vamei.society;
clase pública humana
{
/**
* constructor
*/
humano público (int h)
{
esta.altura = h;
System.out.println("Nací");
}
/**
*accesor
*/
público int getHeight()
{
devolver esta altura;
}
/**
* mutador
*/
altura de crecimiento del vacío público (int h)
{
esta.altura = esta.altura + h;
}
altura interna privada;
}
El código para copiar la primera línea de declaraciones anteriores es el siguiente:
paquete com.vamei.society;
Indica que el programa está en el paquete com.vamei.society. com.vamei (el reverso de vamei.com) representa el nombre de dominio del autor del paquete (desafortunadamente, este nombre de dominio ha sido registrado por otra persona, por lo que sólo se utiliza con fines de demostración). Java requiere que los paquetes tengan prefijos de nombres de dominio para distinguir diferentes autores. Sociedad es otro nombre de ruta local. com.vamei.society juntos forman el nombre del paquete.
Los paquetes proporcionan un espacio de nombres para programas Java. La ruta completa de una clase Java consta de su paquete y nombre de clase, como com.vamei.society.Human. El programa Human.java correspondiente debe colocarse en com/vamei/society/. Las clases se identifican por sus rutas completas, por lo que puedes tener clases con el mismo nombre en diferentes paquetes sin que Java se confunda. Por ejemplo, com.vamei.society.Human y com.vamei.creature.Human son dos clases diferentes.
Veamos un detalle más. La clase Humana es pública y su constructor también lo es, por lo que cualquier otro objeto puede llamar a esta clase. Como dijimos antes, solo puede haber una clase pública en un archivo Java y la clase debe tener el mismo nombre que el archivo .java. Una clase no necesita la palabra clave public, que en realidad representa un permiso: la clase es visible en el paquete en el que se encuentra. Es decir, otros programas Java del paquete pueden acceder a la clase. Este es el acceso predeterminado en Java.
Asimismo, los miembros de un objeto también pueden tener permisos predeterminados (visibles en los paquetes). Por ejemplo, eliminamos la palabra clave pública delante del método getHeight().
llamada de paquete
Solo necesitamos colocar el Human.class compilado por Human.java en la carpeta correspondiente. Por ejemplo, puse Human.class en com/vamei/society/. De hecho, también puede colocar el archivo .java en la ruta correspondiente y Java se compilará automáticamente cuando se utilice.
Si el paquete completo (es decir, la carpeta com) se encuentra en la ruta de trabajo actual, entonces no se requieren configuraciones especiales para usar el paquete, como el siguiente TestAgain.java:
Copie el código de código de la siguiente manera:
importar com.vamei.society.*;
prueba de clase pública de nuevo
{
principal vacío estático público (String [] argumentos)
{
Humano aPersona = nuevo Humano(180);
System.out.println(aPerson.getHeight());
}
}
La importación se utiliza para identificar rutas. Usando la declaración de importación, podemos introducir clases en la ruta correspondiente. *Indica la introducción de todas las clases en la carpeta de sociedad. En TestAgain, usamos la clase Humana directamente.
También podemos proporcionar la ruta completa a la clase. Esto puede distinguir entre clases con el mismo nombre pero diferentes rutas, como por ejemplo:
Copie el código de código de la siguiente manera:
prueba de clase pública de nuevo
{
principal vacío estático público (String [] argumentos)
{
com.vamei.society.Human aPerson =
nueva com.vamei.society.Human(180);
System.out.println(aPerson.getHeight());
}
}
Dado que proporcionamos el classpath completo, no es necesario utilizar la declaración de importación.
Si el paquete no se coloca en la ruta de trabajo actual, debemos notificar a Java cuando usemos el paquete. Por ejemplo, colocamos el paquete en /home/vamei/javapackage, de modo que Human.class esté ubicado en /home/vamei/javapackage/com/vamei/society/Human.class, y nuestra ruta de trabajo es /home/vamei. De esta forma, no se puede encontrar el paquete. Un método es usar -classpath para especificar la ruta de la carpeta donde se encuentra el paquete cuando se usa javac y java, por ejemplo:
Copie el código de código de la siguiente manera:
$javac -classpath /home/vamei/javapackage:.TestAgain.java
$java -classpath /home/vamei/javapackage:.
Simplemente busque el paquete en /home/vamei/javapackage y la ruta de trabajo (.). Java puede encontrar la clase Human en /home/vamei/javapackage y la clase TestAgain en .
Además, también puede configurar la variable de entorno CLASSPATH del sistema y agregar la ruta anterior a la variable sin tener que escribir la opción -classpath cada vez.
Los mecanismos similares a los paquetes también son comunes en otros lenguajes, como el mecanismo de importación en Python. Se trata de organizar y utilizar mejor los programas existentes. Usando paquetes, podemos expandir fácilmente los programas Java y usar bibliotecas de programas Java existentes. Observe que el paquete administra archivos .class. Java se conoce como "Compilar una vez, ejecutar en cualquier lugar" (Compilar una vez, ejecutar en cualquier lugar). Los archivos .class se pueden ejecutar en cualquier plataforma equipada con una máquina virtual Java (JVM, Java Virtual Machine), lo que nos ayuda a superar las dificultades de portabilidad de programas causadas por diferencias en el sistema.
Las diferencias entre sistemas pueden ser muy grandes. Si escribimos un programa en lenguaje C, el programa fuente debe volver a compilarse en cada plataforma para adaptarse a diferentes condiciones de hardware. La máquina virtual Java conecta la plataforma y el universo Java y forma la capa intermedia entre el hardware y la lógica de programación. La JVM oculta las diferencias de hardware y proporciona a los programadores un universo Java "estándar". El archivo .class puede considerarse como la moneda que circula en este universo Java. Con la infraestructura JVM y la asistencia de administración de paquetes, los programas Java logran una buena portabilidad.
Resumir
paquete, importar
Permisos predeterminados: visibles en el paquete
-ruta de clases, ruta de clases