Clase
La ruta y el método de escritura del compilador Java al compilar archivos .Java y Java Virtual Machines ejecutan archivos .class es diferente.
Sin establecer ninguna variable de entorno de classpath, Javac puede compilar archivos .java de ruta completa. Por ejemplo:
javac d: /myjava/helloworld.java
Después de la compilación, genere archivos de clase en el mismo directorio de ruta.
La máquina virtual Java predeterminada debe buscar archivos de clase desde la ruta de la variable de entorno ClassPath para ejecutar. Para Java Virtual Machine, este no es un archivo de clase, sino una clase. Solo tiene classPaths, pero no hay rutas del sistema de archivos. La variable de entorno ClassPath es el entorno que proporciona un ClassPath de búsqueda para Java Virtual Machines. Tenga en cuenta que la máquina virtual no busca recursivamente rutas definidas por classpath.
Es decir, el archivo Java anterior se puede compilar correctamente, pero no se puede ejecutar. Pero si el classpath está configurado en ".; D:/myJava/", la máquina virtual Java primero buscará desde la ruta actual y luego buscará el archivo de clase desde d:/myJava.
Entonces, después de que se compila el helloworld.java anterior, se puede ejecutar directamente:
java helloworld
O cambie al directorio D:/MyJava y ejecute Java Helloworld.
Pero lo siguiente es de la manera incorrecta. Al final, aunque newdir.java se puede compilar correctamente, durante la ejecución, buscará si newdir.class está disponible en el directorio actual (d:/myJava), y luego buscará si newdir.class está disponible en el d:/myJava, pero no recurrirá al subdirectory newdir para buscar archivos de clases.
D:/CD myJavajavac newdir/newdir.javajava newdir
Por ejemplo, debajo de D:/myJava/Hello, hay dos archivos fuente de Java, y su contenido es el siguiente:
D:/myJava/Hola Cat.java Perro Public Class Dog {public static void main (string [] args) {cat c = new Cat (); }}La clase de perro directamente objetos nuevos de la clase CAT en otro archivo. Ya sea compilado o ejecutado, esto puede ser exitoso, porque el compilador Javac buscará automáticamente Cat.Class desde la ruta especificada por el ClassPath al compilar dog.java. Esta es solo la forma de buscar, y esta clase es una clase pública, por lo que la compilación es exitosa.
En resumen, debe estar claro que el compilador JAVAC busca rutas de archivos, que no tienen nada que ver con la variable de entorno classpath. La máquina virtual Java busca archivos de clase, estrictamente hablando, clases, y la ruta de búsqueda está determinada por la variable de entorno classpath y tiene una secuencia.
Para obtener más descripciones de classpath, consulte "Paquete" a continuación.
Paquete
Los paquetes son colecciones de clases. Escriba la palabra clave del paquete en la primera línea del archivo fuente de Java (excluyendo líneas de comentarios o líneas en blanco) y dar el nombre del paquete, puede poner el archivo de clase en el paquete.
Por ejemplo, el archivo d: /myjava/cat.java:
paquete com.longshuai.home; public class Cat {public static void main (string [] args) {system.out.println ("com.longshuai.home.cat"); }}Esto significa poner la clase CAT en el paquete com.longshuai. Los paquetes deben llevarse el nombre del nombre de dominio invertido para evitar que los nombres duplicados del paquete sean conflictivos, por supuesto, esto no es necesario.
Para los archivos de origen que no usan directivas de paquetes, las clases dentro de ellas se considerarán como "clases de desnudos" de forma predeterminada durante la compilación.
El método del paquete de administración Java se gestiona a nivel de directorio correspondiente al nombre del paquete. Por ejemplo, el paquete Com. Longshuai.Home anterior debe colocarse en Com/Longshuai/Home (si es ventanas, barra invertida), es decir, com/longshuai/home/cat.class.
JAVAC busca archivos desde rutas en el momento de la compilación. Por ejemplo, coloque este cat.java en com/longshuai/home. Al ejecutar, la máquina virtual Java busca el archivo de clase que se cargará desde la classpath, y la forma de cargar la clase es usar "". para conectar varios tipos de nombres. Por lo tanto, los métodos para compilar este archivo y ejecutar este archivo por Java Virtual Machine son:
javac com/longshuai/home/cat.javajava com.longshuai.home.cat
Tenga en cuenta que no existe una relación entre los paquetes anidados, como el paquete java.util y los paquetes java.util.jar no tienen ninguna dependencia.
Use las clases en el paquete e importación del paquete (importación)
En un archivo fuente de Java, las clases en otros archivos no se pueden usar directamente, a menos que la clase que desee usar puede buscar en la ruta ClassPath. Para hacer referencia a otras clases que no son classpath, solo puede agregarlas a classpath o cargarlas en paquetes y luego consultar las clases en el paquete.
Las referencias a la clase en el paquete se pueden hacer referencia especificando el nombre del paquete. Por ejemplo:
com.longshuai.home.cat c = new com.longshuai.home.cat ();
Pero obviamente esto es inconveniente. Puede usar la Directiva de importación para importar las clases en el paquete que necesita usar en las primeras líneas del archivo de origen Java (pero después del comando del paquete). Por ejemplo, importe la clase CAT, para que pueda usar la clase directamente:
import com.longshuai.home.cat; cat c = new Cat ();
Al importar paquetes, puede usar el asterisco "*" al final para que coincida enormemente con todas las clases importadas, y solo usar "*" al final, porque "*" coincide con el nombre de la clase, no el nombre del paquete. Por lo tanto, el símbolo "*" no puede usarse en los no enementos para indicar clases en otros paquetes, como:
import com.longshuai.home.*; // Importar todas las clases en el paquete com.longshuai.Home import com.longshuai.*; // Importar todas las clases en el paquete com.longshuai, pero las clases en com.longshuai.home no se importarán, // porque aunque hay anidación entre los niveles, estos paquetes no tienen relación importación com.*.*; // Esta es la forma incorrecta de escribirlo
Si hay una clase con el mismo nombre en el paquete importado, se producirá un error conflictivo al referirse a la clase con el mismo nombre. Por ejemplo, hay clases de fechas en los paquetes Java.util y Java.SQL.
import java.util.*; import java.sql.*; prueba de clase pública {public static void main (string [] args) {date Today = new Date (); }}Compilación:
Javac test.javatest.java:11: Error: la referencia hasta la fecha es la fecha poco clara de hoy = nueva fecha (); ^ La clase java.sql.date en java.sql y la clase java.util.date en java.util ambas pruebas de coincidencia. Java:11: Error: la referencia hasta la fecha es una fecha poco clara hoy = nueva fecha (); ^ La clase java.sql.date en java.util y la clase java.util ambos coinciden 2 errores
En este momento, puede importar explícitamente la clase de fecha o especificar el nombre del paquete al usar la clase de fecha. Es decir, los siguientes dos métodos son correctos:
// Método 1: import java.util.*; Import java.sql.*; Import java.util.date; // Método 2: import java.util.*; Import java.sql.*; Prueba de clase pública {public static void main (string [] args) {java.util.date Today = new java.util.date ();); }}Además de importar clases en paquetes, también puede poder métodos estáticos y variables estáticas en clases en paquetes. Simplemente agregue la palabra clave estática y especifique qué importar. Por ejemplo:
import static java.lang.system.*; import static java.lang.system.out;
Después de los métodos de importación estática, se puede omitir el prefijo, por ejemplo:
import static java.lang.system.out; public class Classname {public static void main () {out.println ("helloworld"); // equivalente a system.out.println ("helloworld"); }}Paquete de archivo en el paquete JAR
La máquina virtual Java puede reconocer directamente el paquete JAR. Puede archivar la ruta correspondiente al nombre del paquete en un paquete JAR utilizando el comando jar. Las instrucciones para usar el comando jar son las siguientes:
Uso de jar: jar {ctxui} [vfmn0pme] [jar -file] [manifest -file] [entrada -Point] [-c dir] archivos ... Opciones: -c Cree un nuevo archivo -t Lista de archivos -x -x Extraer los archivos especificados (o All) de la información de Archive -U Update existente. Manifiesto el archivo -n Después de crear un nuevo archivo, realice la normalización Pack200 -e especifique el punto de entrada de la aplicación para una aplicación independiente inclinada a un archivo jar ejecutable -0 solo; No use ninguna compresión ZIP -P Retener el componente de '/' (ruta absoluta) y ".." (directorio principal) -m no crea el archivo manifiesto para las entradas -I es la información de índice de archivo JAR especificada -C Cambio al directorio especificado y contiene el siguiente archivo es un directorio, se procesa recursivamente. El orden especificado de nombre de archivo manifiesto, el nombre del archivo de archivo y el nombre del punto de entrada es el mismo que el de las etiquetas 'M', 'F' y 'E'.Por ejemplo, el paquete A.Class y B.Class en el directorio actual en test.jar:
Prueba de CVF JAR.Jar A.Class B. Clase
Verifique la lista de archivos en el paquete JAR y se mostrará recursivamente:
jar -tf test.Jarmeta-Inf/Meta-Inf/manifest.mfjiecheng.class
Por ejemplo, archive el directorio COM en d: /dp.jar.
jar cvf d:/dp.jar com/Added manifest is being added: com/(input=0) (output=0) (storage 0%)Added: com/longshuai/(input=0) (output=0) (storage 0%)Added: com/longshuai/home/(input=0) (output=0) (storage 0%)Added: com/longshuai/home/Bird.class (input=420) (output=291) (comprimido 30%) Agregado: com/longshuai/home/bird.java (entrada = 136) (salida = 100) (comprimido 26%) agregado: com/longshuai/home/cat.class (input = 417) (salida = 289) (comprimido por 30%) agregando: com/longshuai/home/home/jaj.java (entrada = 134) (salida = 99) (comprimido (comprimido)
Con el archivo JAR, puede establecer directamente la ruta de ClassPath en el nombre del archivo JAR, de modo que al buscar archivos de clase, buscará directamente desde el archivo JAR. Por ejemplo, el classpath está configurado en:
.; D:/myJava; d: /dp.jar
Mecanismo de búsqueda de clases
Al buscar archivos de clase en máquinas virtuales Java, además de la ruta especificada por la variable de entorno ClassPath, primero se buscarán dos rutas predeterminadas: JRE/LIB y JRE/LIB/EXT, clases que parecen ser buscadas en el archivo JAR en JRE/lib/ext.
Por ejemplo, cuando ClassPath se establece en ".; D:/myJava; d: /myjar.jar", desea buscar el archivo de clase com.longshuai.com.cat:
(a). Primero busque archivos jar en jre/lib y jre/lib/ext;
(b) .Search para si hay com/longshuai/com/cat.class en el directorio actual;
(c) .Search d: /MyJava/cat.class nuevamente;
(d) .Search para si hay una clase com.longshuai.com.cat en el archivo d: /myjar.jar.
Si se hace referencia a una clase en un archivo fuente de Java, en el momento de la compilación, los siguientes métodos se utilizarán para determinar si la clase es razonable y válida:
(1) .Search si la clase de paquete importado contiene la clase.
(2). Busque el paquete java.lang importado implícitamente, que se importa de forma predeterminada.
(3). Si esta clase se define en el archivo actual.
(4). Busque si la clase está en ella de acuerdo con las reglas de búsqueda de la clase ((a)-(d)).
heredar
La lógica semántica de "qué es lo que" puede reflejarse entre las clases, para que se pueda realizar la herencia de las clases. Por ejemplo, un gato es un animal, entonces un gato puede heredar una clase de animales, mientras que una clase de gato se llama subclase y una clase de animales se llama clase padre.
Después de que la subclase hereda la clase principal, la subclase tiene todos los miembros de la clase principal, incluidas las variables y los métodos de los miembros. De hecho, en la memoria, cuando se utilizan nuevos objetos de subclase, una parte del área se divide en el montón para almacenar atributos heredados de la clase principal. Por ejemplo, el área A obtenida por New Parent, el Área B obtenida por New Child y el Área A se encuentra en el Área B.
La razón por la cual el objeto infantil contiene un objeto principal es que cuando los nuevos objetos infantiles, el objeto infantil se llama primero a construir el objeto infantil, y cuando comienza a construir el objeto infantil, el constructor de la clase principal se llama primero a construir el objeto principal. En otras palabras, antes de formar un objeto infantil, el objeto principal siempre se forma primero y luego complementa lentamente los atributos en el objeto infantil. Para contenido específico, consulte "Reescribir super () del método de construcción durante la herencia".
Una subclase no solo tiene miembros de la clase matriz, sino que también tiene sus propios miembros únicos, como sus propios métodos y sus propias variables miembros. Es fácil entender que los nombres de los miembros en subclases y clases de padres son diferentes, pero también pueden ser del mismo nombre. Si hay métodos del mismo nombre heredados de la clase principal en la subclase , como la clase principal tiene el método EAT () y la clase infantil también tiene el método EAT (), entonces esto puede ser una reescritura del método (ver más abajo). Si las variables del miembro en la subclase y las variables miembros de la clase principal tienen el mismo nombre, son independientes entre sí . Por ejemplo, la clase principal tiene un atributo de nombre, y la subclase también define un atributo de nombre en sí, que se permite porque se puede llamar usando esto y super respectivamente.
Use la palabra clave extensas al heredar clases. Al heredar, Java solo permite la herencia de una clase padre.
Persona de clase {nombre de cadena; int Age; void eat () {system.out.println ("comer ...");} void sleep () {system.out.println ("dormir ...");}} El estudiante de clase extiende a la persona {int studentId; Student (int id, name de cadena, int age) {this.name = name; this.age = edad; this.studentid = id; } void study () {System.out.println ("Studing ...");}} Heredia de clase pública {public static void main (string [] args) {Student S1 = New Student (1, "Malongshuai", 23); System.out.println (s1.studentid+","+s1.name+","+s1.age); s1.eat (); s1.sleep (); s1.study (); }}La explicación de ejemplo anterior basada en Java ClassPath Classpath and Package es todo el contenido que comparto con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.