Eu não estou muito claro com a próxima pergunta do livro SCJP (embora eu li a solução e explicação ).
Considere a seguinte estrutura de diretório: –
foo --> test --> xcom --> A.class, B.java
Aqui foo, teste e xcom são diretórios. A.Class e B.Java são os arquivos no diretório xcom.
Os seguintes são os códigos de origem dos arquivos correspondentes: –
a.java
package xcom;public class A { }
b.java
package xcom;public class B extends A { }
O classpath padrão é / foo.
agora , para compilar b.java, eu mantenho meu diretório atual como teste e dar: –
javac -classpath xcom xcom/B.java
Aqui eu dou o classpath como xcom que tem a.class. Mas ainda não encontre a classe A. Por que é assim?
respostas
2 para a resposta № 1
Se as suas aulas estiverem no pacote XCOM, então seu caminho de classe deve estar em o diretório diretamente em cima disso. Neste caso, o classpath deve ser foo / teste.
e se o seu diretório atual é foo / teste, este deve ser seu JAVAC:
javac -classpath . xcom/B.java
0 para a resposta № 2
porque você deve especificar a raiz do ClassPath para argumento, como javac -classpath . xcom/B.java
. Para compilar a Classe B, o compilador Java requer a Classe A, tente localizar o arquivo de classe em {classpathroot}/xcom/
.
nota: .
– é um diretório atual
0 para a resposta № 3
Eu acho que a principal causa aqui é um mal-entendido de um “nome completo” em Java.
Os nomes completos de suas duas classes SonXCOM.A e XCOM.B. Sua fonte está em arquivos a.java e b.java em um diretório chamado XCOM; Nomes completos Avalie a estrutura do diretório. Quando você vai usar os arquivos, seja para compilar ou execute-os, o ClassPath contém um ou mais locais de onde você pode encontrar nomes completos; Então Java está procurando por xcoma.java e xcomb.java (quando compilado) e xcoma.class e xcomb.class (quando executado).
É por isso que a Classpath precisa especificar o diretório que contém XCOM.
à medida que você progride para ambientes mais complexos: o ClassPath pode ser uma lista de tais locais; Cada local é separado por um ponto e vírgula nas janelas e dois pontos em sistemas UNIX. Cada local pode ser um diretório, como você viu, mas também pode ser um arquivo jar. Os arquivos JAR estão no formato do arquivo ZIP e os arquivos ZIP têm uma estrutura de diretório, bem como discos. Portanto, você pode compactar seus arquivos de classe, mantendo seu pai XCom (mas não suas rotas completas) e especificar o arquivo JAR no ClassPath em vez de um diretório.