ruta de clase, paquete 和 frasco

Error: No se pudo encontrar o cargar la clase principal

En primer lugar, se da un ejemplo:

  1. En el E:\aaadirectorio de la creación A.java

    A.java

    public class A {
    	public static void main(String[] args) {
    		System.out.println("AAA");
    	}
    }
    
  2. Compilar A.java por cmd

    javac E:\aaa\A.java
    

    En este momento en E: generación A.class \ directorio bajo el aaa

  3. Por cmd plazo A.class (en E: \ aaa directorio)

    java A
    

    En esta ocasión se puede ejecutar correctamente

  4. Por plazo cmd A.class (en E: \ directorio)

    Esta vez se encontrará con que fallan, porque no hay ninguna clase A

3 y 4 por la comparación, se puede concluir que cuando el comando java, es para que parezca en el directorio actual, no recursivos subdirectorios de búsqueda en el directorio actual, si no puede encontrar la clase en el directorio actual, se producirá un error .

Si sólo quiero E: directorio Run \ E: \ aaa \ archivos de clase en el directorio, cómo hacerlo? ¿Qué es necesario utilizar esta opción, la ruta de clases.

ruta de clases

En ejecutar comando java -helpse puede ver las instrucciones oficiales en la ruta de clase esta opción (que también incluye una descripción de otras opciones)

Este comando se utiliza para buscar archivos de clase , que es lo que queremos.

El formato es:

java -classpath 类路径 类名

Clase puede tener una pluralidad de trayectorias, con ;espaciado, no necesita ;final

A continuación, siga las instrucciones en el directorio E: \, me gustaría añadir comandos ruta de clase:

java -classpath E:\aaa A

Ejecución de éxito!

Esta vez se combina la segunda parte de la ruta de clase de vista, se puede ver por qué llevamos a cabo en el comando actual directorio de java para ejecutar el archivo de clase no es ningún problema. Porque cuando se ejecuta el comando java, de hecho, se unirá al directorio actual como un parámetro cuando se ejecuta.

Es decir, llevamos a cabo java Acomandos, ejecuta realmente java -classpath . A, lo que .representa el directorio actual.

paquete

Lo anterior es sólo una clase simple, una clase no pertenece a ningún paquete, en la práctica, vamos a poner la clase en el paquete, como un gran armario dividido en muchos pequeños rejilla, es fácil encontrarnos. En general, los nombres de paquetes están escritos en empresas de nombres de dominio inversa, similares a com.icecoffeeeste.

paquetes de varias etapas de Java son en forma de carpetas de varios niveles en el sistema de archivos, como com.icecoffee.testcorresponde al sistema de archivos es com\icecoffee\testuna carpeta tales multinivel. Siendo ese el caso, permítanme comenzar preguntando, si queremos ejecutar una com.icecoffee.testclase B bajo el paquete, que mi comando debería ser así? Como se muestra a continuación.

  1. La creación de B.java \ bbb \ directorio: E

    B.java

    package com.icecoffee.test;
    
    public class B {
    	public static void main(String[] args) {
    		System.out.println("BBB");
    	}
    }
    
  2. Compilar B.java

    javac B.java
    

    En el E: \ bbb \ directorio creado en el marco del archivo B.class, esta vez veo archivo B.class por JD-GUI, encontrar información de paquetes en el archivo no está en el código fuente

  3. La creación de com \ icecoffee \ test directorio \ bbb \ directorio de niveles múltiples, mover el archivo en el directorio B.class prueba: en E

    Este tiempo de visión por JD-GUI nuevo archivo B.class, encontrar esta línea de información del paquete de código allí, ¿por qué poner en el paquete correspondiente tendrá esta línea de código, no sé en la actualidad.

  4. El primer intento de ejecutar B.class

    java -classpath E:\bbb B
    

    un error

  5. El segundo intento de ejecutar B.class

    java -classpath E:\bbb\com\icecoffee\test B
    

    un error

  6. B.class correcta operación del comando

    java -classpath E:\bbb com.icecoffee.test.B
    

Este contraste de 4,5,6 tres comandos, podemos concluir que cuando la clase a la que se ubica en un paquete, el comando correcto es la capa más externa del paquete en el mismo directorio como parámetro la ruta de clase, nombre de la clase frente a la necesidad de añadir paquete de niveles múltiples, es decir, el nombre de la clase que se escribirá de manera nombre de clase completo. En éste, trato al paso 5 parámetros de varios niveles incluidos en el paquete se ejecutan en la ruta de clase, ha demostrado ser inviable.

tarro

paquete frasco es de varios archivos de clase en un paquete comprimido, archivos .jar se pueden abrir para ver por el software de compresión.

En cmd por jar -helppuede ver el uso relacionado con el comando jar

Ahora soy parte del tercer paquete de archivos B.class en un paquete frasco

En el E: \ bbb \ directorio, ejecute:

jar cvf B.jar com

com representa el directorio para ser envasados, ya que B.class pertenecen a com.icecoffee.testeste paquete, la capa más externa del paquete es com, comando jar recursivamente el directorio

Tras el éxito de la compresión generará un archivo comprimido B.jar en el directorio actual.

También podemos ejecutar directamente paquete frasco B.class

java -classpath E:\bbb\B.jar com.icecoffee.test.B

Ejecución de éxito!

Además, es necesario saber es que en la ejecución del mandato java, además de los parámetros de la ruta de clases, JVM irá jre \ lib y jre \ lib \ ext tanto en la categoría de búsqueda directorio por defecto, por lo que importamos el JDK además de la java.langparte exterior del paquete de la clase puede ser compilado para ejecutarse en la causa.

Por ejemplo, java.util.Dateesta clase se encuentra bajo rt.jar jre \ lib en este paquete

¿Por qué es, además de java.langfuera de la bolsa? Debido a que las clases del paquete es muy común, casi todas las clases de encargo necesita utilizar este paquete en la categoría, por ejemplo String. Por lo tanto, se introducen implícitamente todas las clases de este paquete, sin pasar por el archivo Java importexplícitamente importación.

Supongo que te gusta

Origin www.cnblogs.com/cailinfeng/p/12609640.html
Recomendado
Clasificación