Michael Morrison
Tentar executar qualquer ofício sem os instrumentos próprios é uma tarefa difícil na melhor das hipóteses. A programação de Java de fato é um ofício, e como de trabalhar madeira ou gravura, o seu nível de programar o êxito basicamente depende da sua escolha de instrumentos bem como a sua habilidade na utilização dos instrumentos. Começa esta semana de bônus olhando dentro dos instrumentos de programação de Java padrão incluídos com Java Developer's Kit (JDK). A lição de hoje não é somente um relance superficial aos instrumentos de Java, de qualquer modo. De fato cava nos detalhes de usar os instrumentos, inclusive algumas características escondidas e capacidades que parecem ter-se encoberto na maior parte da documentação de Java. Depois de aprender o ins e outs dos instrumentos de JDK padrão, terminará a lição dando uma olhada em um pouco de Java mais popular instrumentos de desenvolvimento visuais.
A lição de hoje cobre os seguintes tópicos principais:
Até ao fim da lição de hoje, conhecerá pessoalmente bem os instrumentos de JDK padrão e como trabalham. Esta compreensão dos instrumentos padrão lhe permitirá usá-los mais efetivamente nos seus próprios projetos. Mesmo se decidir usar um dos instrumentos visuais destacados em direção ao fim da lição, como Café de Symantec ou J Visual ++, ainda pode achar às vezes os instrumentos JDK inestimáveis em certas situações.
O JDK fornece um jogo principal de instrumentos necessários para desenvolver programas em Java. Embora os instrumentos JDK não sejam especialmente de fantasia na sua implementação, garantem-se para trabalhar com o último lançamento de Java porque os instrumentos JDK atualizados se escrevem em Java e são uma parte de cada lançamento. E embora os addons da terceira pessoa e os ambientes de desenvolvimento prometam fazer o desenvolvimento de Java mais liso e mais fácil, o JDK fornece todos os instrumentos essenciais e informação necessária para escrever Java profissional applets imediatamente e sem qualquer custo. Como o JDK é o conjunto de desenvolvimento oficial de Sol de Java, sempre pode contar com ele para fornecer o suporte de Java mais extenso.
O seguinte é uma lista completa dos instrumentos que são padrão com o JDK:
Aprenderá sobre cada um destes instrumentos detalhadamente na lição de hoje. Antes que comece, contudo, é importante assegurar-se que tem a última versão do JDK. Desde esta escrita, a última versão do JDK é a versão 1.02, que se inclui no CD-ROM acompanhante. Esta versão estará provavelmente em volta durante algum tempo, portanto deve estar usando-a okey. Somente para estar seguro, pode verificar o Web site de Java de Sol em http://www.javasoft.com para ver qual a última versão é. Este Web site fornece todas as últimas notícias e informação quanto a Java, inclusive o último lançamento do JDK. Tenha em mente que Java é uma nova tecnologia que ainda está em um estado da modificação rápida. Sem falta vigie o Web site de Java da última informação.
O intérprete de tempo de execução de Java é uma versão autônoma do intérprete de Java incorporado em Navegadores da Web compatíveis com Java, como Navegador de Netscape 3.0 e Microsoft Internet Explorer 3.0. O intérprete em tempo de execução fornece o suporte para dirigir Java programas executáveis no formato de classe bytecode compilado. Desde que o intérprete não fornece diretamente nenhum meio de examinar a produção gráfica, limita-se à utilização dele para realizar programas Java puramente textuais e aplicações que dirigem a sua própria gráfica. Se quiser dirigir Java gráfico applets, tem de usar Java applet espectador ou um Navegador da Web compatível com Java.
Pode pensar no intérprete em tempo de execução como exposição dos princípios básicos nus do sistema de tempo de execução de Java. Embora use o termo princípios básicos nus, o intérprete de fato deixa-o fazer quase tudo. Essencialmente, pode dirigir qualquer programa Java que não confia na classe de Applet. De fato, a afirmação antes sobre a incapacidade de dirigir programas gráficos não inteiramente é verdade; pode dirigir aplicações de Java gráficas, mas somente não pode dirigir Java applets. A diferença entre uma aplicação de Java e Java applet é que uma aplicação é responsável por criar e manter a sua própria janela deve-o necessitar a necessidade da produção gráfica, ao passo que um applet confia em um Navegador da Web para fornecer uma janela na qual expor a gráfica. Portanto o intérprete de Java é capaz da execução tanto programas Java textuais como aplicações de Java gráficas, mas não applets.
O intérprete em tempo de execução é um instrumento de linha de comando para dirigir programas Java e aplicações; Java applets necessita a gráfica e expõe o suporte de um Navegador da Web.
Novo termo |
Um instrumento de linha de comando é um instrumento que se realiza em uma ordem pronta, como um DOS ou concha de UNIX pronta, com uma lista especificada de argumentos. |
A sintaxe para usar o intérprete de tempo de execução de Java segue:
java Options Classname Arguments
O argumento de Classname especifica o nome da classe que quer realizar. Se a classe residir em um pacote, deve qualificar totalmente o nome. Por exemplo, se quer dirigir uma classe chamada SolveIt que se localiza em um pacote chamado Equations, o realizaria no intérprete como isto:
java Equations.SolveIt
Quando o intérprete de Java realiza uma classe, o que realmente faz realiza o método de main da classe. As saídas de intérprete quando o método de main e qualquer fio criado por ele se terminam realizando. O método de main aceita uma lista de argumentos que podem usar-se para controlar o programa. O seguinte é a definição do método de main como especificado pela língua de Java:
class DoIt { public static void main(String argv[]) { // do something } }
Note que main tem um parâmetro único, argv, que é uma tabela de objetos de String. Isto traz-nos ao argumento de Arguments pelo intérprete em tempo de execução, que especifica que os argumentos passaram no método de main. Qualquer argumento passado ao intérprete em tempo de execução via Arguments é acessível do parâmetro de argv em main. A seguinte chamada de intérprete passa dois argumentos numéricos ao método de main na classe de DoIt:
java DoIt 8 24
Nota técnica |
O fato que o intérprete de tempo de execução de Java de fato realiza o método de main dirigindo uma classe deve dar-lhe uma ideia sobre uma das razões porque não pode dirigir applets utilização do intérprete em tempo de execução. Desistir? A resposta é que applets até não têm um método de main, então não há caminho para o intérprete em tempo de execução saber como começar a realizar um applet. |
O argumento de Options especifica opções relacionadas a como o intérprete em tempo de execução realiza o programa Java. O seguinte é uma lista das opções de intérprete em tempo de execução mais comuns:
-debug -checksource or -cs -classpath Path -mx x -ms x -noasyncgc -noverify -prof -ss x -oss x -t -verbose or -v -verbosegc -verify -verifyremote -DPropertyName=NewValue
A opção de -debug começa o intérprete na depuração de modo, que lhe permite usar o depurador de Java (jdb) em conjunto com o intérprete. Aprenderá mais sobre a utilização do depurador de Java um pouco depois na lição de hoje.
A opção de -checksource causa ao intérprete comparar as datas de modificação dos arquivos de texto fonte e arquivos de classe executáveis. Se o arquivo original for mais recente, a classe recompila-se automaticamente e o novo executável bytecode carrega-se.
O intérprete de Java usa uma variável de ambiente, CLASSPATH, para determinar onde procurar classes definidas pelos usuários. A variável de CLASSPATH contém uma lista delimitada pelo ponto-e-vírgula de caminhos de sistema para classes de Java definidas pelos usuários. De fato, a maioria dos instrumentos de Java usam a variável de CLASSPATH para saber onde encontrar classes definidas pelos usuários. A opção de -classpath informa o intérprete em tempo de execução ignorar CLASSPATH com o caminho especificado por Path.
A opção de -mx x permite-lhe modificar o tamanho máximo do consórcio de alocação de memória ou montão de coleção de lixo, usado pelo intérprete. À revelia, o consórcio tem um tamanho máximo de 16 Mb (-mx 16m). x especifica o novo tamanho máximo do consórcio e mede-se em bytes à revelia. Também pode especificar x em kilobytes ou em megabytes acrescentando a carta k ou m (respectivamente) para o valor. Também, x deve ser maior do que 1.000 bytes, significando que o consórcio deve ter um tamanho máximo de pelo menos 1.000 bytes.
A opção de -ms x é semelhante à opção de -mx, exceto ele permite-lhe modificar o tamanho inicial do consórcio de alocação de memória em vez do tamanho máximo. À revelia, o tamanho do consórcio estabelece-se inicialmente em 1 Mb (-ms 1m). x especifica o novo tamanho de consórcio inicial e mede-se em bytes à revelia. Semelhante à opção de -mx, também pode especificar x em kilobytes ou em megabytes acrescentando a carta k ou m (respectivamente) para o valor. Adicionalmente, x deve ser maior do que 1.000 bytes.
O sistema de tempo de execução de Java tipicamente executa a coleção de lixo automaticamente para assegurar-se que a memória desnecessária fica liberta. Isto realiza-se em um fio assíncrono que corre ao lado de outros fios no sistema em tempo de execução. A opção de -noasyncgc altera este comportamento apagando a coleção de lixo assíncrona. O resultado consiste em que nenhuma coleção de lixo se realiza a menos que se convide explicitamente ou o programa Java fica sem memória.
Nota técnica |
Pode forçar uma coleção de lixo explícita chamando o método de gc na classe de System. |
A opção de -noverify apaga toda a verificação de código, significando que nenhuns bytecodes se processam pelo verificador bytecode. Tipicamente, o verificador verifica o código carregado no sistema usando um carregador de classe.
O intérprete em tempo de execução inclui um proenchedor construído, que se invoca usando a opção de -prof. O emprego do proenchedor é informar no período de tempo passado em cada seção do código como um programa realiza, que muitas vezes pode usar-se para encontrar gargalos de realização no código. O proenchedor construído escreve a informação sobre perfil a um arquivo chamado java.prof, que é um arquivo de texto. A informação sobre perfil compõe-se de quantas vezes cada método se chamou e o período de tempo relativo passa-se no método durante cada chamada. Maior o último número é, mais caro o método quanto a processador em cima. Pode usar facilmente esta informação como um guia para determinar o código que enfocar os seus esforços de otimização de código.
Observar |
Desde que o intérprete em tempo de execução, e por isso o proenchedor construído, só pode usar-se com programas Java textuais e aplicações autônomas, pode estar admirando-se como representar Java de perfil applets. Afortunadamente, pode usar o proenchedor no intérprete em tempo de execução em conjunto com Java applet espectador. Aprenderá como fazer isto um pouco depois hoje quando descobre sobre o espectador applet. |
Cada fio no sistema de tempo de execução de Java dá-se duas pilhas: um para código de Java e um para C/C ++ código. A presença de duas pilhas reflete o suporte de código nativo em Java. A opção de -ss x permite-lhe alterar o tamanho de pilha máximo usado pelo código de C em um fio. O default C tamanho de pilha é 128 KBS (-ss 128k). O parâmetro de x especifica o novo tamanho máximo em bytes da pilha de C, que deve ser maior do que 1.000 bytes. Também pode especificar x em kilobytes ou em megabytes acrescentando a carta k ou m (respectivamente) para o valor. Tenha em mente que esta opção aplica a todos os fios criados durante a execução de programa.
Semelhante à opção de -ss x, a opção de -oss permite-lhe estabelecer o tamanho de pilha máximo que pode usar-se pelo código de Java em um fio. O default tamanho de pilha de código de Java é 400 KBS (-oss 400k). O parâmetro de x especifica o novo tamanho máximo em bytes da pilha de Java, que deve ser maior do que 1.000 bytes.
A opção de -t imprime um traço das instruções bytecode realizadas. Esta opção só trabalha com a versão não-otimizada do intérprete de Java, java_g. (Aprenderá sobre o intérprete não-otimizado durante um momento.) A opção de -t gera muita informação que pode dar-lhe muita compreensão o que acontece dentro de um programa, contanto que seja bom na seguinte ferida bytecodes!
A opção de -verbose causa ao intérprete imprimir uma mensagem para a produção padrão cada vez quando uma classe de Java carrega-se. Semelhantemente a opção de -verbosegc causa ao intérprete imprimir uma mensagem cada vez quando uma coleção de lixo executa-se. Uma coleção de lixo executa-se pelo sistema em tempo de execução para limpar objetos desnecessários e libertar a memória.
O contrário da opção de -noverify, a opção de -verify causa ao intérprete dirigir o verificador bytecode em todo o código carregado no ambiente em tempo de execução. A função à revelia do verificador só deve verificar o código carregado no sistema usando um carregador de classe. Este comportamento à revelia também pode especificar-se explicitamente usando a opção de -verifyremote.
A opção de -D permite-lhe redefinir valores de propriedade de sistema. PropertyName especifica o nome da propriedade de sistema que quer modificar, e NewValue especifica o novo valor que quer destinar-lhe.
Novo termo |
As propriedades de sistema são variáveis de sistema globais que refletem o estado do sistema de tempo de execução de Java. Por exemplo, a versão do sistema de tempo de execução de Java guarda-se na propriedade de sistema de java.version. |
Algumas distribuições do Conjunto de Desenvolvedor de Java incluem um intérprete de Java alternativo chamado java_g. Isto é uma versão não-otimizada do intérprete de Java que realiza Java bytecodes em uma maneira mais conveniente para a depuração. Se este intérprete estiver na sua distribuição JDK, com certeza o usarão quando realiza o código dentro do depurador de Java.
O compilador de Java (javac) usa-se para compilar arquivos de texto fonte de Java em Java executável bytecode classes. Em Java, os arquivos de texto fonte têm a extensão .java. Como viu em todas as partes deste livro, os arquivos de texto fonte de Java são arquivos de texto ASCII padrão, muito como os arquivos de texto fonte de outras linguagens de programação populares como C ++. É o emprego do compilador de Java de processar arquivos de texto fonte de Java e criar Java executável bytecode classes deles. Os arquivos de classe bytecode executáveis têm a extensão .class e representam uma classe de Java na sua forma usável.
Os arquivos de classe de Java geram-se em uma base individual com as classes definidas no texto fonte. Em outras palavras, o compilador de Java gera exatamente um arquivo de .class de cada classe que cria. Desde que é tecnicamente possível definir mais de uma classe em um arquivo original único, por isso, é possível para o compilador gerar múltiplos arquivos de classe de um arquivo original único. Quando isto acontece, significa que o arquivo original contém múltiplas definições de classe.
Pode ter ouvido algo sobre compiladores just-in-time na relação a Java. É importante não confundir estes compiladores com o compilador de Java e o papel que joga. O compilador de Java é responsável por converter o texto fonte de Java em Java bytecodes que pode realizar-se dentro do sistema de tempo de execução de Java. Java máquina virtual, que é um componente do sistema em tempo de execução, é responsável por interpretar o bytecodes e fazer o nível de sistema apropriado chama à plataforma nativa. Está neste ponto onde a independência de plataforma se realiza por Java; os bytecodes estão em uma forma genérica que só se converte em uma forma nativa quando processado pela máquina virtual.
Os compiladores just-in-time retiram o papel do intérprete em tempo de execução convertendo Java bytecodes ao código nativo durante o voo antes de realizar um programa Java. Deste modo, os compiladores de Java just-in-time trabalham mais como o fim traseiro de compiladores de língua tradicionais nisto geram o código de uma plataforma nativa. Semelhantemente o compilador de Java trabalha mais como a parte dianteira de um compilador tradicional em que analisa o texto fonte de Java e gera classes bytecode interiormente úteis.
Observar |
Tanto o Navegador de Netscape 3.0 como Microsoft Internet Explorer 3.0 incluem compiladores de Java just-in-time. |
Tenha em mente que Java executables ainda se centra em volta do formato de classe bytecode. Mesmo com compiladores just-in-time no quadro, tudo deve preocupar-se com como um desenvolvedor gera as classes bytecode apropriadas usando o compilador de Java. Se nenhum compilador just-in-time estiver presente no sistema de um usuário, as classes bytecode vão se processar e vão se realizar pelo intérprete em tempo de execução. De outro lado, se um compilador just-in-time resultar existir no sistema, as classes bytecode vão se converter no código nativo e logo vão se realizar. Quaisquer caminho, a chave à execução programas Java é as classes bytecode, que se criam pelo compilador de Java.
O compilador de Java é um instrumento de linha de comando cuja sintaxe segue:
javac Options Filename
O argumento de Filename especifica o nome do arquivo de texto fonte que quer compilar. O compilador gerará classes bytecode de todas as classes definidas neste arquivo. De mesmo modo, o compilador também gerará classes bytecode de qualquer classe dependente que ainda não se compilou. Em outras palavras, se estiver compilando a classe A, que se consegue da classe B e classe B ainda não se compilou, o compilador notará a dependência e progredirá e compilará ambas as classes.
O argumento de compilador de Options especifica opções relacionadas a como o compilador cria as classes de Java executáveis. O seguinte é uma lista das opções de compilador:
-classpath Path -d Dir -g -nowarn -O -verbose
A opção de -classpath diz ao compilador ignorar a variável de ambiente de CLASSPATH com o caminho especificado por Path. Isto faz que ao compilador procure classes definidas pelos usuários no caminho especificado por Path. Path é uma lista delimitada pelos dois pontos de caminhos diretivos que tomam a seguinte forma:
.;YourPath
Um exemplo de um uso específico de -classpath segue:
javac -classpath .;\dev\animate\classes;\dev\render\classes A.java
Neste caso, o compilador usa um caminho de classe definido pelos usuários para acessar qualquer classe da qual precisa compilando o arquivo de texto fonte A.java. A opção de -classpath é às vezes útil quando quer tentar compilar algo sem fazer esforços para modificar a variável de ambiente de CLASSPATH.
A opção de -d determina o diretório de raiz onde as classes compiladas se guardam. Isto é importante porque muitas vezes as classes se organizam em uma estrutura diretiva hierárquica. Com a opção de -d, a estrutura diretiva vai se criar abaixo do diretório especificado por Dir.
A opção de compilador de -g faz que ao compilador gere mesas de depuração das classes de Java. As mesas de depuração usam-se pelo depurador de Java e contêm a informação como variáveis locais e números de linha. A ação à revelia do compilador só deve gerar números de linha.
Novo termo |
Uma mesa de depuração é uma coleção da informação sobre um programa que se usa interiormente por um depurador. As mesas de depuração constroem-se diretamente em classes executáveis durante a compilação. |
Aviso |
Se estiver indo estar usando o depurador de Java para depurar as classes geradas pelo compilador, deve usar a opção de -g. Adicionalmente, para a depuração asseguram-se que não usa a opção de -O, que otimiza o código. |
A opção de -nowarn apaga avisos de compilador. Os avisos imprimem-se para a produção padrão durante a compilação para informá-lo sobre problemas potenciais com o texto fonte. É geralmente uma boa ideia de guardar avisos permitidos porque muitas vezes transmitem zonas problemáticas no seu código. Contudo, pode bater em uma situação onde os avisos chegam o caminho, em que caso a opção de -nowarn poderia ser útil.
A opção de -O faz que ao compilador otimize o código compilado. Neste caso, a otimização simplesmente significa que os métodos estáticos, finais, e privados se compilam ligados em série. Quando um método se compila ligado em série, significa que o corpo inteiro do método se inclui no lugar de cada chamada ao método. Isto acelera a execução porque elimina a chamada de método em cima. As classes otimizadas são normalmente maiores no tamanho para acomodar o código duplicado. A opção de otimização de -O também suprime a criação à revelia de números de linha pelo compilador. Tenha em mente que a opção de -O não deve usar-se quando planeja depurar o código compilado usando o depurador de Java.
Novo termo |
O método inlining é o processo de substituir cada chamada a um método com o código de método real. Inlining muitas vezes aumenta o tamanho do arquivo de classe resultante, mas pode ajudar a melhorar a realização. |
A opção de -verbose tem um tanto de um efeito contrário como a opção de -nowarn - imprime a extra informação sobre o processo de compilação. Pode usar -verbose para ver exatamente que arquivos originais se estão compilando e que arquivos de classe se estão carregando.
Algumas distribuições do Conjunto de Desenvolvedor de Java incluem um compilador de Java alternativo chamado javac_g. Esta versão do compilador de Java gera o código sem algumas otimizações internas executadas pelo compilador de javac padrão. Se este compilador estiver na sua distribuição JDK, com certeza o usarão quando compila o código da depuração. De outra maneira, pau com o compilador de javac de todo o código de lançamento.
O método típico de realizar Java applet é de dentro de um Navegador da Web que tem uma Página da Web carregada contendo o applet. Isto é o cenário típico no qual a maior parte de usuários de Web entram no contato com Java applets. Como um desenvolvedor de Java, tem outra opção para dirigir Java applets que não implica o uso de um Navegador da Web. Esta opção é Java applet espectador, que serve de uma cama de experiência mínima de Java applets. De vez em quando não pode querer discutir com a utilização de um Navegador da Web completamente desabrochado para testar um applet, em que caso o espectador applet é uma alternativa ideal.
Embora o espectador applet logicamente tome o lugar de um Navegador da Web, funciona muito diferentemente de um Navegador da Web. O espectador applet produz documentos HTML, mas só procura etiquetas de applet introduzidas; ignora qualquer outro código de HTML no documento. Cada vez quando o espectador applet encontra uma etiqueta de applet em um documento HTML, lança uma janela de espectador applet separada que contém o respetivo applet.
O único desconto à utilização do espectador applet consiste em que não lhe mostra como um applet correrá dentro dos limites de uma verdadeira colocação de Web. Desde que o espectador applet ignora todos os códigos de HTML exceto etiquetas de applet, até não tenta expor qualquer outra informação contida no documento HTML. Assim, uma vez que testou o seu applet utilização do espectador applet, ser seguro do testar também usando um Navegador da Web somente para assegurar-se que trabalha no contexto de uma verdadeira Página da Web.
Java applet espectador é um instrumento de linha de comando, significando que se invoca de uma ordem pronta. A sintaxe do espectador applet segue:
appletviewer Options URL
O argumento de URL especifica um documento URL que contém uma página de HTML com Java introduzido applet. O espectador applet lança uma janela separada para cada um applet introduzido no documento HTML. Se o documento não contiver nenhum applets introduzido, o espectador applet simplesmente sairá. A figura 22.1 mostra ao espectador applet na ação.
A figura 22.1 mostra a demonstração de Animator applet, que vem com o Conjunto de Desenvolvedor de Java, que corre no espectador applet. Dirige o applet modificando-se para o diretório que contém a classe de Animator bytecode e arquivo de HTML introduzido e logo realiza a seguinte afirmação na ordem pronta:
A figura 22.1: Animator applet que corre em Java applet espectador.
appletviewer example1.html
example1.html é o arquivo de HTML que contém Java introduzido applet. Como pode ver, não há nada complicado sobre a gerência de Java applets utilização do espectador applet. O espectador applet é um instrumento útil e fácil a trabalhar para testar Java applets em um ambiente simples.
O argumento de Options ao espectador applet especifica como dirigir Java applet. Há atualmente só uma opção apoiada pelo espectador applet, -debug. A opção de -debug começa o espectador applet no depurador de Java, que lhe permite depurar applets. Aprenderá mais sobre a utilização do depurador de Java um pouco depois na lição de hoje.
O espectador applet tem um cardápio cair chamado Applet que contém um grupo de ordens, como mostrado na Figura 22.2.
A figura 22.2: Java applet espectador com ordens disponíveis no cardápio cair.
A ordem de Restart reinicia o applet atualmente carregado, resultando em uma chamada ao método de start do applet. A ordem de Restart não recarrega o applet, de qualquer modo. Semelhante a Restart, a ordem de Reload recarrega o applet e logo começa-o. Reload muitas vezes é uma melhor ordem de usar para reiniciar applets como assegura que um applet se reinicializa completamente.
A ordem de Clone lança outro exemplo do espectador applet que realiza o mesmo applet. Esta ordem é útil quando quer dirigir múltiplas cópias de um applet. Por exemplo, uma rede multiusuária applet poderia apoiar múltiplos exemplos que podem comunicar-se um com outro. Pode carregar um exemplo do applet e logo usar a ordem de Clone de começar outros exemplos.
A ordem de Tag expõe uma janela mostrando o HTML applet etiqueta da execução applet. A janela Applet HTML Tag mostra-se na Figura 22.3.
A figura 22.3: A janela Applet HTML Tag expõe-se pela ordem de Tag.
A ordem de Info expõe uma informação sobre exposição sobre janela sobre a execução applet, inclusive informação applet geral e informação que se relaciona com os parâmetros usados pelo applet. Esta informação devolve-se pelo getAppletInfo e os métodos de getParameterInfo da classe de Applet. A janela Applet Info mostra-se na Figura 22.4.
A figura 22.4: A janela Applet Info expõe-se pela ordem de Info.
A ordem de Edit é inválido no lançamento atual do espectador applet. Vai se ativar presumivelmente em um futuro lançamento do espectador applet, em que caso fornecerá provavelmente um modo de alterar os parâmetros applet no documento HTML que contém a etiqueta de applet.
A ordem de Properties expõe uma janela com opções de acesso que se relacionam com HTTP e procurações de firewall e servidores, junto com rede e opções de acesso a classe. A janela AppletViewer Properties mostra-se na Figura 22.5.
A figura 22.5: A janela Applet Viewer Properties expõe-se pela ordem de Properties.
Finalmente, o Close e as ordens de Quit executam a mesma função, que fecha o espectador applet. Não é claro porque há duas ordens diferentes para fechar o espectador-it's applet presumivelmente uma superintendência.
Aprendeu um pouco antes hoje sobre o proenchedor incorporado no intérprete de tempo de execução de Java. Aprendeu que não pode representar applets de perfil utilização do intérprete em tempo de execução sozinho porque não pode até dirigir applets utilização do intérprete. Contudo, pode representar applets de perfil dirigindo o proenchedor do intérprete em conjunto com o espectador applet. Neste caso, o espectador applet lança-se de dentro do intérprete em tempo de execução, como isto:
java -prof sun.applet.AppletViewer URL
URL especifica o nome do arquivo de HTML que contém uma etiqueta de applet (ou etiquetas). Note que o espectador applet se refere usando o seu nome de classe totalmente qualificado, AppletViewer. Quando termina de dirigir o applet, o intérprete escreve um arquivo de texto denominado java.prof ao diretório atual. Este arquivo contém a informação sobre perfil do applet que somente dirigiu. Envie à discussão mais adiantada do proenchedor na seção "O Intérprete em tempo de Execução" da informação quanto à significação dos conteúdos deste arquivo.
O depurador de Java (jdb) é uma utilidade de linha de comando que lhe permite depurar programas Java. O depurador de Java usa o Depurador de Java API para fornecer o suporte de depuração dentro do intérprete de tempo de execução de Java. Embora o depurador seja um instrumento de linha de comando, ainda fornece uma ampla variação de características de depuração padrão como colocação de limites e marcha única pelo código.
Novo termo |
Um limite é uma linha do código especifica que para a execução de um programa. |
Novo termo |
A marcha única é o processo de realizar o seu código uma linha de uma vez (em passos únicos). |
Antes que possa usar jdb, deve compilar o seu código para que inclua a informação sobre depuração. O comutador de compilador de Java para fazer isto é -g, que faz que ao compilador gere mesas de depuração que contêm informação sobre números de linha e variáveis.
Observar |
Algumas distribuições do JDK também incluem um compilador de Java alternativo chamado javac_g. Se tiver este compilador na sua distribuição (olhada no diretório java/bin), use-o, porque compila o código sem usar algumas otimizações internas executadas pelo compilador de javac. |
Como a depuração é um sujeito muito largo, tentei guardar esta discussão concentrou-se no depurador de Java e os fundamentos de como se usa. Para uma olhada mais prática em depuração de Java, pode querer verificar seminários de depurador de Java online de Sol, que se localizam no Web site de Java de Sol em http://www.javasoft.com/products/JDK/debugging/.
A sintaxe para usar o depurador de Java segue:
jdb Options <Classname>
O argumento de Classname é opcional e especifica o nome da classe que quer realizar. O fato que Classname é opcional sobe um ponto interessante quanto ao uso do depurador: há dois modos diferentes de ir sobre a utilização do depurador, dependendo de se depura uma aplicação ou um applet. Para aplicações, simplesmente realiza jdb diretamente e fornece o nome da classe principal no argumento de Classname, como as demonstrações de sintaxe prévias. Se estiver depurando um applet, contudo, deve realizar o depurador dentro do espectador applet, como isto:
appletviewer -debug URL
Neste caso, URL remete a um documento URL que contém uma página de HTML com o applet a depurar-se. Em vez de realizar diretamente a classe, o espectador applet lança o depurador e permite-lhe depurar o applet. Tecnicamente, há três modos de usar o depurador de Java. A terceira técnica implica a ligação do depurador a uma aplicação que já corre no intérprete. Aprenderá um pouco mais sobre esta aproximação de depuração na seguinte seção.
O argumento de Options usa-se para especificar colocações diferentes quanto a como uma sessão de depuração se começa. O seguinte é uma lista das opções de depuração:
-host Hostname -password Password
A opção de -host usa-se para especificar o nome da máquina de anfitrião onde um intérprete de Java existente corre. Neste caso, o depurador anexa-se ao intérprete portanto a atualmente aplicação de execução pode depurar-se. Especifica o nome da máquina de anfitrião no argumento de Hostname.
A opção de -password também se usa anexando o depurador a uma sessão de intérprete existente. Quando o intérprete se começa com a opção de -debug, uma senha expõe-se que deve usar-se iniciando a sessão de depuração. Especifica esta senha ao depurador via a opção de -password e o argumento de Password.
Quando o depurador está no fim e gerência, controla-o por ordens que se introduzem em uma linha de comando pronta. A linha de comando de depurador pronta é um > pronto à revelia, semelhante ao DOS ou a concha de UNIX incita. Isto incita especifica que não há gerência de fio à revelia. O fio que realiza atualmente no depurador expõe-se na ordem pronta ela mesma, portanto o > pronto significa que nenhum fio se está atualmente depurando. Quando depura um fio, a ordem modificações prontas de um nome de fio seguido da posição atual da armação de pilha, que se cerca em suportes de forma triangular quadrados. Um exemplo de um fio pronto é main[1], que significa que o fio de main corre e está na posição o mais alta (1) na armação de pilha.
O seguinte é uma lista de algumas as ordens de depuração mais úteis:
help locals print Object dump Object methods Class classes stop in Classname.Methodname stop at Classname.LineNumber step cont clear <Classname.LineNumber>
Possivelmente a ordem mais importante em jdb é a ordem de help, que imprime uma listagem de todas as ordens disponíveis e o que fazem. Três seguintes ordens relacionam-se todos à impressão de informação sobre objetos. A ordem de locals expõe o valor atual de todos os objetos no alcance atual (armação de pilha). O print e as ordens de dump usam-se ambos em objetos independentes do alcance atual. A ordem de print usa-se para imprimir tanto objetos inteiros como variáveis de membro individuais; simplesmente especifica o nome do objeto ou variável de membro no argumento de Object. Semelhante a print, a ordem de dump também imprime objetos ou variáveis de membro, mas imprime a informação mais detalhada como a herança de um objeto.
A ordem de methods usa-se para enumerar todos os métodos definidos na classe especificada por Class. A ordem de classes enumera todas as classes que se carregam atualmente na memória. A lista gerada pela ordem de classes muitas vezes é bastante grande desde que muitas classes diferentes terminam de carregar-se nos bastidores até em programas Java simples.
Agora que tem uma ideia como olhar para os valores de coisas diferentes no depurador, vamos mudar a algumas ordens que são um pouco mais excitantes. O stop in e as ordens de stop at usam-se para estabelecer limites em métodos e em linhas específicas do texto fonte, respectivamente. Por exemplo, para estabelecer um limite no método de mouseDown de um applet chamado Groovy, datilografaria a seguinte ordem na linha de comando de depurador:
stop in Groovy.mouseDown
Quando clicar no botão de rato na janela applet, o depurador parará o applet no início do método de mouseDown. Para começar a marcha única pelo método, usa a ordem de step. O depurador realiza uma linha do código de cada ordem de step emitida. Quando descobre a informação precisa e está pronto para adquirir coisas que correm na velocidade cheia novamente, usa a ordem de cont, que continua a execução normal do programa. De mesmo modo, pode compensar qualquer limite que estabelece com a ordem de clear.
Isto sumaria os fundamentos de usar o depurador de Java. Como qualquer instrumento potente, ganhará a confiança com o depurador remendando-o simplesmente. Aconselho dirigir o depurador em um programa simples e conhecer algumas ordens antes de tentar empreender um projeto de depuração sério.
O disassembler de arquivo de classe de Java (javap) usa-se para desmontar um arquivo de classe, que significa que o arquivo de classe executável se resolve em uma lista de dados públicos, métodos ou ferida bytecode instruções. A produção à revelia do disassembler compõe-se dos dados públicos e métodos de uma classe. O disassembler de arquivo de classe é útil em casos onde não tem o texto fonte de uma classe mas você gostaria de saber algo sobre como se implementa.
A sintaxe do disassembler segue:
javap Options ClassNames
O argumento de ClassNames especifica os nomes de uma ou várias classes a desmontar-se.
O argumento de Options especifica como as classes devem desmontar-se. O disassembler apoia as seguintes opções:
-c -p -h -classpath Path -verify -version
A opção de -c diz o disassembler à produção o bytecodes real de cada método. O
A opção de -p diz ao disassembler incluir também variáveis privadas e métodos na sua produção. Sem esta opção, o disassembler só produções as variáveis de membro públicas e métodos. A opção de -h especifica que a informação se crie que pode usar-se em arquivos de cabeçada C. Isto é útil quando tenta inter-relacionar o código de C a uma classe de Java para a qual não tem o texto fonte.
A opção de -classpath informa o disassembler para ignorar CLASSPATH com o caminho especificado por Path procurando a classe de entrada ou classes. A opção de -verify diz ao disassembler dirigir o verificador na classe e informação sobre depuração sobre produção. Finalmente, a opção de -version faz que ao disassembler imprima o seu número da versão.
A cabeçada de Java e o gerador de arquivo de toco (javah) usam-se para gerar cabeçada C e arquivos originais para implementar métodos de Java em C. Os arquivos gerados podem acostumar-se a variáveis de membro de acesso de um objeto do código de C. O gerador de arquivo de toco e cabeçada realiza isto gerando uma estrutura C cujos jogos de leiaute aquela da classe de Java correspondente.
Observar |
Aprendeu como usar a cabeçada de javah e gerador de arquivo de toco no Dia 20, "Usando Métodos nativos e Bibliotecas". Pode pensar na cobertura de hoje como mais de uma referência do próprio instrumento de javah desde que aprende sobre todas as opções apoiadas por javah. |
A sintaxe para usar a cabeçada e gerador de arquivo de toco segue:
javah Options ClassName
O argumento de ClassName é o nome da classe para gerar arquivos originais C de.
O argumento de Options especifica como os arquivos originais devem gerar-se. O seguinte é as opções apoiadas pelo gerador de arquivo de toco:
-o OutputFile -d Dir -td Dir -stubs -verbose -classpath Path
A opção de -o usa-se para concatenar a cabeçada resultante e arquivos originais quando múltiplas classes se estão fazendo funcionar em. Quando usado, a opção de -o resulta na informação concatenada que se guarda no arquivo especificado por OutputFile.
A opção de -d determina o diretório de raiz onde a cabeçada gerada e os arquivos originais se guardam. Junto com a escrita da cabeçada e arquivos originais, a cabeçada e gerador de arquivo de toco também escreve os seus próprios arquivos temporários. A opção de -td especifica o diretório onde estes arquivos temporários se guardam. À revelia, os arquivos temporários guardam-se no diretório especificado pela variável de ambiente de %TEMP%; a opção de -td ignora este diretório com Dir.
A opção de -stubs é provavelmente a opção mais importante apoiada pela cabeçada e gerador de arquivo de toco. A opção de -stubs faz que a declarações C se gerem da classe de Java especificada ou classes. Sem a opção de -stubs, só os arquivos de cabeçada se geram. Quando usa a opção de -stubs, o gerador de arquivo de toco e cabeçada cria tanto cabeçada como arquivos de toco, que se necessitam ambos tipicamente incorporar o código de C nativo com Java.
A opção de -verbose faz que à cabeçada e gerador de arquivo de toco imprimam uma mensagem para a produção padrão quanto à posição de arquivos como se estão gerando. Finalmente, a opção de -classpath informa a cabeçada e gerador de arquivo de toco para ignorar CLASSPATH com o caminho especificado por Path procurando a classe de entrada.
O gerador de documentação de Java (javadoc) é um instrumento útil para gerar a documentação de programação diretamente do texto fonte de Java. O gerador de documentação analisa por arquivos originais de Java e gera páginas de HTML baseadas nas declarações e comentários. A documentação de API de Java online de sol criou-se usando o gerador de documentação, que certifica a natureza prática deste instrumento.
A sintaxe para usar o gerador de documentação segue:
javadoc Options FileName
O argumento de FileName especifica um pacote ou um arquivo de texto fonte de Java. Para arquivos de texto fonte, o gerador de documentação cria páginas de HTML baseadas nos comentários de documentação especiais (/** e */) usado em todas as partes do código. O gerador de documentação reformata e inclui todas as declarações públicas e protegidas de classes, interfaces, métodos e variáveis. Pode incluir etiquetas de documentação especiais dentro dos comentários de documentação que lhe permitem um pouco mais poder e flexibilidade sobre a documentação resultante. Aprenderá sobre estas etiquetas durante um momento.
O parâmetro de FileName ao gerador de documentação também pode referir-se a um nome de pacote, em que caso a documentação se cria para todas as classes contidas no pacote. Isto é um modo fácil de acionar com manivela fora a documentação de um grande jogo de classes com uma ordem fácil.
O argumento de Options permite-lhe modificar o comportamento à revelia de javadoc. O seguinte é as opções apoiadas pelo gerador de documentação:
-d Dir -classpath Path
A opção de -d especifica onde os documentos HTML gerados se guardam. A opção de -classpath informa o gerador de documentação para ignorar CLASSPATH com o caminho especificado por Path procurando os arquivos originais de Java.
O gerador de documentação apoia etiquetas especiais para acrescentar a extra informação aos documentos HTML gerados. Todas as etiquetas começam com um símbolo de @ e devem aparecer no início de uma linha. O seguinte é as etiquetas relacionadas à geração de documentação de classe:
@see Classname @see FullyQualifiedClassname @see Classname.Methodname @version Version @author AuthorName
O @see marca todos acrescentam um "também veem" o hyperlink para o documento HTML que se refere a uma classe ou método dentro de uma classe. Isto é um modo fácil de prover associações entre classes na documentação. Java de sol API faz o grande uso da etiqueta de @see para fornecer referências entre classes.
A etiqueta de @version permite-lhe incluir a informação sobre versão com a classe, como especificado por Version. Version pode conter qualquer texto que escolhe relacionando-se com a versão do código. A etiqueta de @author deixa-o fornecer o nome do autor ou os autores do texto fonte, como especificado por AuthorName.
O seguinte é um exemplo do texto fonte que utiliza as etiquetas de documentação de classe:
/** * A class for modeling precious gems. * * @see Object * @see gemology.Rock * @version 2.0 Dec 5, 1996 * @author Brett Weir */ class Gem extends Rock { // class definition }
Note que o comentário de documentação de classe e as etiquetas aparecem justo antes da definição de classe. Isto é importante porque o gerador de documentação associa este comentário com a classe de Gem. Também pode associar comentários com variáveis e métodos de um modo semelhante. Para variáveis, limita-se à utilização da etiqueta de @see. Para métodos, contudo, pode usar algumas outras etiquetas:
@param ParamName Description @return Description @exception Classname Description
A etiqueta de @param usa-se para acrescentar os parâmetros do método à seção de Parameters gerada no documento HTML. A seção de Parameters é uma seção de HTML que enumera os parâmetros necessitados de um método. ParamName refere-se ao nome do parâmetro como definido pelo método, e Description é uma descrição de texto do parâmetro.
A etiqueta de @return acrescenta uma seção de Returns ao documento HTML que traz a atenção para o valor de retorno do método. Simplesmente fornece uma descrição do valor de retorno em Description.
Finalmente, a etiqueta de @exception acrescenta uma seção de Throws ao documento HTML, que enumera as exceções potencialmente lançadas pelo método. Especifica a exceção em Classname junto com uma descrição de em que as circunstâncias resultam na exceção que se lança
Description. Pode usar múltiplas etiquetas de exceção. O gerador de documentação automaticamente cria um hyperlink para a documentação da classe de exceção referida.
O seguinte é um exemplo do texto fonte que usa as etiquetas de método:
/** * Determines an estimate of the gem's value. * * @param weight The weight of the gem in carats. * @param color The color of the gem (0 -> 1.0). * @param clarity The clarity of the gem (0 -> 1.0). * @return The estimated value of the gem. * @exception NumberFormatException When the color or clarity isn't * in the range 0 -> 1.0. */ public int estimateValue(float weight, float color, float clarity) { // method definition }
Embora os instrumentos JDK sejam potentes e certamente adequados para a programação de Java séria, poucas pessoas argumentarão os benefícios de usar instrumentos de desenvolvimento visuais. Junto com o fornecimento de editores de texto fonte empacotados com a característica, a maior parte de instrumentos visuais combinam muitos dos instrumentos de programação de Java padrão dentro de um ambiente. Por exemplo, de um ambiente de desenvolvimento pode editar tipicamente, compilar, dirigir e depurar programas Java. Esta fusão aparentemente simples de instrumentos realmente pode ajudar a salvar o tempo de desenvolvimento precioso.
Embora o fornecimento das versões visuais dos instrumentos de linha de comando de Java padrão seja um benefício em e de si mesmo, os instrumentos de desenvolvimento visuais raramente param lá. A maior parte de instrumentos visuais também incluem facilidades de gerenciamento de projetos sofisticadas bem como instrumentos de geração do código para criar padrões applet com o texto fonte completo que executa certo tipo da funcionalidade principal. Alguns instrumentos visuais até vão um passo além disso e eliminam a maior parte da programação. Estes instrumentos concentram-se em arnesar componentes preconstruídos que lhe permitem desenvolver programas Java sem escrever de fato o código de Java. Estes tipos de instrumentos um pouco mais limitam-se tipicamente por causa do seu desenho de alto nível, mas podem salvar períodos de tempo enormes e energia em certos casos.
O resto da lição de hoje concentra-se em um pouco de Java mais popular instrumentos de desenvolvimento visuais que estão atualmente disponíveis. A minha intenção não é taxar os instrumentos ou persuadi-lo a tentar um sobre o outro. A minha meta simplesmente é avisá-lo o que é lá fora portanto pode investigar que tipo de instrumento poderia ajustar as suas necessidades. Muitos dos instrumentos têm versões de avaliação de que pode carregar grátis de um Web site associado, portanto pode muito prová-los facilmente para você e vir às suas próprias conclusões. Divirta-se!
Java de sol WorkShop é um instrumento de desenvolvimento visual escrito inteiramente em Java. Isto é um instrumento interessante porque o seu desenho é muito Cêntrico pela web, significando que tão a maior parte do próprio instrumento se compreende de Java applets introduzido em páginas de HTML. Java WorkShop está atualmente disponível para sistemas de Solaris e Windows. Pode verificá-lo em http://www.sun.com/sunsoft/Developer-products/java/, que é Java de Sol Web site de WorkShop (ver a Figura 22.6).
A figura 22.6: Java de Sol Web site de WorkShop.
O Café de Symantec é um ambiente de desenvolvimento de Java visual baseado em C popular de Symantec ++ ambiente de desenvolvimento. Foi um dos primeiros instrumentos de Java visuais disponíveis e atualmente apoia tanto Windows como plataformas de Macintosh. Pode adquirir a última informação sobre o Café no Web site de Café de Symantec (ver a Figura 22.7), que se localiza em http://cafe.symantec.com/.
A figura 22.7: O sítio Symantec CafeWeb.
Microsoft finalmente decidiu entrar na correria de desenvolvimento de Java na força cheia com J Visual ++, que é um instrumento de Java visual semelhante ao seu C Visual popular ++ ambiente de desenvolvimento. J visual ++ atualmente está só disponível para a plataforma de Windows. Pode verificar J Visual ++ em J Visual de Microsoft ++ Web site (ver a Figura 22.8), que se localiza em http://198.105.232.5/visualj/.
A figura 22.8: O Microsoft Visual J ++ Web site.
O Assador de Inteligência natural é o primeiro ambiente de desenvolvimento de Java visado especificamente para a plataforma de Macintosh. Para a informação sobre o Assador, verifique o Web site de Assador de Inteligência Natural (ver a Figura 22.9) em http://www.natural.com/pages/products/roaster/.
A figura 22.9: o Web site de Assador de Inteligência Natural.
O instrumento de desenvolvimento de Java JFactory de software de Onda de velhaco destina-se mais para o desenvolvimento de aplicações rápido com um montante mínimo da programação. Este gerador aplicado visual está atualmente disponível para a plataforma de Windows. Pode adquirir mais informação sobre JFactory do Web site JFactory de software de Onda de Velhaco (ver a Figura 22.10), que se localiza em http://www.roguewave.com/products/jfactory/jfactory.html.
A figura 22.10: o Web site JFactory de software de Onda de Velhaco.
O instrumento de desenvolvimento Mojo de software de penumbra oferece um ambiente de programação baseado basicamente em componentes reutilizáveis. Concedido, isto é uma tendência comum entre muitos dos instrumentos visuais, mas Mojo faz uma grande tentativa de minimizar a codificação de costume sempre que possível. Mojo está atualmente disponível para a plataforma de Windows. Pode verificar Mojo no Web site de software de Penumbra (ver a Figura 22.11), que se localiza em http://www.penumbrasoftware.com/.
A figura 22.11: o Web site Mojo de software de Penumbra.
Jamba de Aimtech é um dos primeiros oferecimentos na área de instrumentos de Java visuais de alto nível. Jamba destina-se para desenvolvedores de Internet que querem arnesar o poder de Java sem qualquer programação ou scripting. Jamba está atualmente disponível para a plataforma de Windows. Pode adquirir a pá em Jamba tomando um passeio pelo Web site de Jamba de Aimtech (ver a Figura 22.12), que se localiza em http://www.aimtech.com/prodjahome.html.
A figura 22.12: o Web site de Jamba de Animtech.
O último dos instrumentos visuais é o Hiperarame de Kinetix, que é outro instrumento de alto nível um tanto semelhante a Jamba. Diferentemente de Jamba, contudo, a ênfase de Hiperarame dá-se basicamente à criação de Java altamente gráfico applets, inclusive a gráfica 3D. O hiperarame está atualmente disponível para a plataforma de Windows. Pode adquirir mais informação sobre o Hiperarame do Web site de Hiperarame de Kinetix (ver a Figura 22.13), que se localiza em http://www.ktx.com/products/hyperwire/.
A figura 22.13: o Web site de Hiperarame de Kinetix.
Observar |
Os instrumentos de alto nível como Jamba e Hyperwire são referidos às vezes como ferramentas de autoria porque implicam pouca ou nenhuma programação. |
Embora Java seja mais fácil usar do que algumas outras linguagens de programação, tornando-se um programador de Java proficiente ainda apresentam um número de barreiras à maioria de nós. Um modo de abaixar estas barreiras um pouco é ficar bem informado com os instrumentos de desenvolvimento que usa. Possivelmente até mais importante é a sua escolha inicial de instrumentos de desenvolvimento, que podem afetar muito a sua eficácia como um programador de Java. A lição de hoje dirige ambos destes assuntos presentando-lhe uma olhada detalhada nos instrumentos de JDK padrão, junto com a exposição de você algumas outras opções na forma de instrumentos de desenvolvimento visuais.
Enfim, a sua seleção de um instrumento de desenvolvimento ou instrumentos dependerá ao seu nível da perícia e o seu estilo de desenvolvimento. Apesar de que tipo de instrumento gravita em direção a, ser seguro de levar um tempo para aprender tudo que pode sobre ele. Se ainda for inseguro de que tipo de instrumento de desenvolvimento para usar, pique com o JDK durante algum tempo, desde que se garante para satisfazer condições necessárias para construir programas Java. Além disso, entendendo a programação de Java da perspectiva dos instrumentos de JDK padrão lhe dará enfim mais compreensão do "grande quadro" do desenvolvimento de Java.
Está provavelmente cansado da audição de mim divagar sobre instrumentos por agora. Isto está bem, porque amanhã desloca engrenagens e encabeça diretamente atrás na programação aprendendo sobre estruturas de dados em Java. Estou seguro que não pode esperar!
Qual é a significação do proenchedor incorporado no intérprete em tempo de execução? | |
O proenchedor é útil na avaliação dos tempos de execução relativos de partes diferentes de um programa Java, que é crucial para situações nas quais tenta melhorar a realização de um programa Java. Com a informação gerada pelo proenchedor, pode visar seções específicas do código para enfocar esforços de otimização. | |
Como compilo múltiplas classes dentro de um arquivo de texto fonte único? Continuo adquirindo erros de compilador! | |
Embora possa compilar múltiplas classes que se definem em um arquivo de texto fonte, só uma das classes pode ser pública. Além disso, o arquivo original deve chamar-se como a classe que é pública. O objetivo aqui é permitir-lhe incluir classes de suporte no mesmo arquivo com classes públicas. Contudo, só lhe permitem uma classe pública por arquivo de texto fonte. | |
Quando uso o disassembler de arquivo de classe? | |
O disassembler de arquivo de classe, embora potente no seu próprio direito, é não necessariamente um instrumento que encontrará você mesmo usando muito. O seu objetivo primário disseca classes de Java para as quais não tem o texto fonte. Usando o disassembler, pode olhar para todos os métodos públicos e variáveis de membro de uma classe, que pode ajudar muito quando tenta.
|