Classpath
O caminho e o método de escrita do compilador Java ao compilar arquivos .java e Java Máquinas Virtuais Executar arquivos .class é diferente.
Sem definir quaisquer variáveis de ambiente de patrimão de classe, o JAVAC pode compilar arquivos .java completo. Por exemplo:
javac d: /myjava/helloworld.java
Após a compilação, gerar arquivos de classe no mesmo diretório de caminho.
A máquina virtual Java padrão precisa pesquisar arquivos de classe a partir do caminho da variável de ambiente de patrimônio da classe para executar. Para Java Virtual Machine, este não é um arquivo de classe, mas uma classe. Possui apenas caminhos de classe, mas nenhum caminho de sistema de arquivos. A variável de ambiente ClassPath é o ambiente que fornece um caminho de pesquisa para máquinas virtuais Java. Observe que a máquina virtual não procura recursivamente por caminhos definidos pelo ClassPath.
Ou seja, o arquivo Java acima pode ser compilado corretamente, mas não pode ser executado. Mas se o caminho de classe estiver definido como ".; d:/myjava/", a máquina virtual Java primeiro pesquisará no caminho atual e depois pesquisará o arquivo de classe de d:/myjava.
Então, após o helloworld.java acima, ele pode ser executado diretamente:
Java Helloworld
Ou mude para o diretório d:/myjava e execute o Java Helloworld.
Mas o seguinte é o caminho errado. No final, embora o Newdir.java possa ser compilado corretamente, durante a execução, ele procurará se o Newdir.class está disponível no diretório atual (d:/myjava) e, em seguida, procure se o NewDir.class está disponível no D:/myjava, mas não será recuperado para o subdirectory, o novo, no novo, para a classe.
d:/cd myjavajavac newdir/newdir.javajava newdir
Por exemplo, em d:/myjava/hello, existem dois arquivos de origem Java, e seu conteúdo é o seguinte:
d:/myjava/hello cat.java Dog.javaCat.java============================================================================================================ public class Dog {public static void main (string [] args) {Cat c = new Cat (); }}A classe de cães diretamente novos objetos da classe CAT em outro arquivo. Seja compilado ou executado, isso pode ser bem -sucedido, porque o compilador JAVAC procurará automaticamente o Cat.class a partir do caminho especificado pelo caminho de classe ao compilar cachorro.java. Essa é exatamente a maneira de pesquisar, e essa classe é uma classe pública, portanto a compilação é bem -sucedida.
Em resumo, deve ficar claro que o Javac Compiler pesquisa por caminhos de arquivo, que não tem nada a ver com a variável de ambiente. O Java Virtual Machine pesquisa arquivos de classe, rigorosamente falando, aulas e o caminho de pesquisa é determinado pela variável de ambiente e tem uma sequência.
Para obter mais descrições de pathes de classe, consulte "Pacote" abaixo.
Pacote
Pacotes são coleções de classes. Escreva a palavra -chave do pacote na primeira linha do arquivo de origem Java (excluindo linhas de comentários ou linhas em branco) e forneça o nome do pacote, você pode colocar o arquivo de classe no pacote.
Por exemplo, o arquivo d: /myjava/cat.java:
pacote com.longshuai.home; public class Cat {public static void main (string [] args) {System.out.println ("com.longshuai.home.cat"); }}Isso significa colocar a classe CAT no pacote com.longshuai.home. Os pacotes devem ser nomeados após o nome de domínio reverso para impedir que nomes duplicados de pacotes conflitantes, é claro, isso não é necessário.
Para arquivos de origem que não usam diretrizes de pacotes, as classes dentro deles serão consideradas "classes nuas" por padrão durante a compilação.
O método do pacote de gerenciamento Java é gerenciado no nível do diretório correspondente ao nome do pacote. Por exemplo, o pacote com.longshuai.home acima deve ser colocado em com/longshuai/home (se for o Windows, barra de barriga), ou seja, com/longshuai/home/cat.class.
O JAVAC procura arquivos de caminhos no momento da compilação. Por exemplo, coloque este cat.java sob Com/Longshuai/Home. Ao executar, o Java Virtual Machine pesquisa o arquivo de classe a ser carregado no caminho de classe e a maneira de carregar a classe é usar "." para conectar vários tipos de nomes. Portanto, os métodos para compilar este arquivo e executar este arquivo pela Java Virtual Machine são:
javac com/longshuai/home/cat.javajava com.longshuai.home.cat
Observe que não há relação entre pacotes aninhados, como o pacote java.util e os pacotes java.util.jar não possuem nenhuma dependência.
Use as classes no pacote e no pacote de importação (importação)
Em um arquivo de origem Java, as classes em outros arquivos não podem ser usadas diretamente, a menos que a classe que você deseja usar possa ser pesquisada pelo caminho da classe. Para fazer referência a outras classes que não são de classe, você só pode adicioná -las ao ClassPath ou carregá -las em pacotes e, em seguida, consultar as classes no pacote.
As referências à classe no pacote podem ser referenciadas especificando o nome do pacote. Por exemplo:
com.longshuai.home.cat c = novo com.longshuai.home.cat ();
Mas, obviamente, isso é inconveniente. Você pode usar a diretiva de importação para importar as classes no pacote que você precisa usar nas primeiras linhas do arquivo de origem Java (mas após o comando do pacote). Por exemplo, importe a classe CAT, para que você possa usar a classe diretamente:
importar com.longshuai.home.cat; cat c = new Cat ();
Ao importar pacotes, você pode usar o asterisco "*" no final para corresponder loucamente a todas as classes importadas e usar apenas "*" no final, porque "*" corresponde ao nome da classe, não com o nome do pacote. Portanto, o símbolo "*" não pode ser usado em não-end para indicar classes em outros pacotes, como:
importação com.longshuai.home.*; // importe todas as classes no pacote com.longshuai.home Import com.longshuai.*; // Importe todas as classes no pacote com.longshuai, mas as classes em com.longshuai.home não serão importadas, // porque, embora existam ninhos entre os níveis, esses pacotes não têm importação de relacionamento com.*.*; // Esta é a maneira errada de escrever
Se houver uma classe com o mesmo nome no pacote importado, ocorrerá um erro conflitante ao se referir à classe com o mesmo nome. Por exemplo, existem classes de data nos pacotes java.util e java.sql.
importar java.util.*; importar java.SQL. }}
Compilação:
Javac test.javatest.java:11: Erro: a referência até a data não está clara hoje = new Date (); ^ A classe java.sql.date em java.sql e a classe java.util.date em java.util Ambos os match test.java:11: erro: a referência até a data não está clara hoje = new Date (); ^ A classe java.sql.date em java.util e a classe java.util ambos correspondem a 2 erros
No momento, você pode importar explicitamente a classe de data ou especificar o nome do pacote ao usar a classe Data. Ou seja, os dois métodos a seguir estão corretos:
// Método 1: importar java.util.*; Importar java.sql. }}
Além de importar aulas nos pacotes, você também pode métodos estáticos e variáveis estáticas nas classes nos pacotes. Basta adicionar a palavra -chave estática e especificar o que importar. Por exemplo:
importar java estático.lang.system.*; importar java estático.lang.system.out;
Após os métodos de importação estática, o prefixo pode ser omitido, por exemplo:
importar java estático.lang.system.out; public class ClassName {public static void main () {out.println ("helloworld"); // equivalente a system.out.println ("helloworld"); }}Pacote de arquivos no pacote JAR
A máquina virtual Java pode reconhecer diretamente o pacote JAR. Você pode arquivar o caminho correspondente ao nome do pacote em um pacote JAR usando o comando jar. As instruções para usar o comando jar são as seguintes:
JAR Uso: jar {ctxui} [vfmn0pMe] [FILE DE JARO] [FILE DE MANUSENTO] [Ponto de entrada] [-C Dir] Arquivos ... Opções: -C Crie um novo arquivo -A atualização de arquivos de arquivos -V) Extrato de Arquivo -Atualmente, o NOMEF SNOMET STAWERATET STORNATET STORNATEND STORNATE STORNA Arquivo -n Após a criação de um novo arquivo, execute a normalização do Pack200 -E especifique o ponto de entrada do aplicativo para um aplicativo independente, empacotado para um arquivo JAR executável -0 apenas; Não use nenhum ZIP -P -P reter o componente '/' (caminho absoluto) e ".." (diretório pai) -m não cria o arquivo de manifesto para entradas -i é o índice de geração de arquivos JAR especificado Informações -c alterações no diretório especificado e contém os seguintes arquivos se algum arquivo for um diretório, ele é processado de maneira contribuída. A ordem especificada do nome do arquivo de manifesto, o nome do arquivo de arquivo e o nome do ponto de entrada é o mesmo dos tags 'm', 'f' e 'e'.Por exemplo, o pacote A.Class e B.Class no diretório atual em Test.Jar:
JAR CVF Test.Jar A.Class B.Class
Verifique a lista de arquivos no pacote JAR e será exibido recursivamente:
jar -tf test.jarmeta-inf/meta-inf/manifest.mfjiecheng.class
Por exemplo, arquiva o diretório COM em d: /dp.jar.
jar cvf d: /dp.jar com/adicionado manifesto está sendo adicionado: com/(input = 0) (output = 0) (armazenamento 0%) adicionado: com/longshuai/(input = 0) (output = 0) (storage 0%) adicionado: com/longshuai/home/(input = 0) (/saída = 0) (armazenamento 0%) adicionado: COM: COM/LongShuai/(input = 0). (saída = 291) (comprimido 30%) adicionado: com/longshuai/home/bird.java (entrada = 136) (saída = 100) (comprimido 26%) adicionado: com/longshuai/home/cat.class (input = 417) (saída = 289) (comprimido por 30%): addshuai. 99) (comprimido em 26%)
Com o arquivo JAR, você pode definir diretamente o caminho do ClassPath para o nome do arquivo JAR, para que, ao pesquisar arquivos de classe, pesquisar diretamente no arquivo JAR. Por exemplo, o caminho de classe está definido como:
.; d:/myjava; d: /dp.jar
Mecanismo de pesquisa de classe
Ao pesquisar arquivos de classe nas máquinas virtuais Java, além do caminho especificado pela variável de ambiente de patrimônio da classe, dois caminhos padrão serão pesquisados primeiro: JRE/LIB e JRE/LIB/EXT, classes que parecem ser pesquisadas no arquivo JAR em JRE/lib/ext.
Por exemplo, quando o ClassPath está definido como ".; d:/myjava; d: /myjar.jar", você deseja procurar o arquivo com.longshuai.com.cat:
(um). Primeira pesquisa por arquivos JAR em JRE/LIB e JRE/LIB/EXT;
(b). pesquise se há com/longshuai/com/cat.class no diretório atual;
(c) .search d: /myjava/cat.class novamente;
(d). Pesquise se há uma classe com.longshuai.com.cat no arquivo d: /myjar.jar.
Se uma classe for referenciada em um arquivo de origem Java, no momento da compilação, os seguintes métodos serão usados para determinar se a classe é razoável e válida:
(1). Pesquise se a classe de pacote importada contém a classe.
(2). Procure por um pacote java.lang implicitamente importado, que é importado por padrão.
(3). Se esta classe está definida no arquivo atual.
(4). Pesquise se a classe está nela de acordo com as regras de pesquisa do caminho de classe ((a)-(d)).
herdar
A lógica semântica de "o que é o que" pode ser refletido entre as classes, para que a herança das classes possa ser realizada. Por exemplo, um gato é um animal, então um gato pode herdar uma classe de animais, enquanto uma classe de gatos é chamada de subclasse e uma classe de animais é chamada de classe pai.
Após a subclasse herda a classe pai, a subclasse tem todos os membros da classe pai, incluindo variáveis e métodos de membros. De fato, na memória, quando novos objetos de subclasse são usados, uma parte da área é dividida na pilha para armazenar atributos herdados da classe pai. Por exemplo, a área A obtida pelo novo pai, a área B obtida por New Child e a área A está na área B.
A razão pela qual o objeto filho contém um objeto pai é que, quando novos objetos infantis, o objeto filho é chamado pela primeira vez para construir o objeto filho e, ao começar a construir o objeto filho, o construtor da classe pai é chamado primeiro para construir o objeto pai. Em outras palavras, antes de formar um objeto filho, o objeto pai é sempre formado primeiro e depois complementa lentamente os atributos no objeto filho. Para conteúdo específico, consulte "Reescrever super () do método de construção durante a herança".
Uma subclasse não apenas tem membros da classe pai, mas também tem seus próprios membros únicos, como seus próprios métodos e suas próprias variáveis de membros. É fácil entender que os nomes dos membros em subclasses e classes de pais são diferentes, mas também podem ter o mesmo nome. Se houver métodos de mesmo nome herdados da classe pai na subclasse , como a classe pai tem o método Eat () e a classe infantil também possui o método Eat (), isso pode ser uma reescrita do método (veja abaixo). Se as variáveis do membro na subclasse e as variáveis do membro da classe pai tiverem o mesmo nome, elas serão independentes uma da outra . Por exemplo, a classe pai tem um atributo de nome e a subclasse também define um atributo de nome, o que é permitido porque eles podem ser chamados usando isso e super respectivamente.
O uso estende a palavra -chave ao herdar aulas. Ao herdar, o Java apenas permite a herança de uma classe de pais.
classe pessoa {nome da string; Int Age; void Eat () {System.out.println ("Comer ...");} void Sleep () {System.out.println ("Sleep ...");}} Classe Student estende a pessoa {int studentId; Aluno (int id, nome da string, int age) {this.name = name; this.age = idade; this.studentId = id; } void study () {System.out.println ("Studing ...");}} public class Herança {public static void main (string [] args) {Student s1 = novo aluno (1, "malongshuai", 23); System.out.println (s1.studentId+","+s1.name+","+s1.age); s1.eat (); s1.sleep (); s1.study (); }}A explicação de exemplo acima com base no pacote de classe Java ClassPath é todo o conteúdo que compartilho com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.