Estou usando o Bloco de Notas para entender o conceito de pacotes. O programa compila numa boa, porém se eu executar sem a instrução "package java.pacotes o programa funciona num boa, mas quando eu coloco-a gera um erro.
Eis as duas classes (arquivos distintos) que estão dentro do diretório C:\java\pacotes
classe TestaPacotes
[code]package java.pacotes;
public class TestaPacotes
{
public static void main (String args[])
{
System.out.println(“Estudando pacotes”);
}
}[/code]
e a class SegundoPacote
[code]package java.pacotes;
public class SegundoPacote
{
public static void main(String args[])
{
System.out.println(“Segundo Pacote”);
}
}[/code]
Podem me dizer se é erro no código, variáveis de ambiente ou alguma outra coisa?
vc tem aí apenas um pacote chamado “pacotes”
sendo que vc tem 2 class…
TestaPacotes
SegundoPacote
acho que vc so entendeu errado o que é o pacote.
o pacote é aonde vc tem todos os seus arquivos do projeto. Neste caso aí… são as 2 class que mencionei encima.
Se eu estiver errado… Até onde eu entendei um pacote é um conjunto de classe correlacionadas.
no caso aqui eu criei duas classes uma chamda TestaPacotes e a outra SegundoPacote. Eu quero que ambas façam parte do mesmo pacote. Ai eu criei uma pasta no caminho c:\java\pacotes e colocoquei estas duas classes dentro dela. Para que eu indique para o java que isto é uma pacote não é só colocar “package java.pacotes” no início de cada uma das classes (TestaPacote e SegundoPacote)?
Cara você está certo. Só tem um detalhe no seu código, sua instrução de package começa com um diretório “java”…
“Errado”
package java.pacotes
Nenhum package deve começar com um diretório java, pois a JVM irá lançar uma java.lang.SecurityException. Para funcionar, você deve ou mudar o diretório inicial ou alterar o J do java para maiúsculo por exemplo assim:
“Certo”
package Java.pacotes
para rodar estas classes com o package alterado (por exemplo para J maiusculo), basta você ir na raíz “C:” se for windows e digitar:
Boa noite!
Aproveitando o tópico, eu tenho uma dúvida.
Em todas as classe que tento compilar, dá o seguinte erro:
Exception in thread “main” java.lang.NoSuchMethodError: main
Ai percebi, que se colocar o método main resolve o problema:
public static void main (String[] args){ }
Gostaria de saber de vocês se realmente eu preciso ter métodos main em todas as classes, ou há outra maneira de compilar? Digo isso pois em muitos os exemplos do livro da Kathy não aparece nenhuma classe com método main.
Quando realmente sou obrigado a ter métodos main?
Você deve estar confundindo compilar com executar.
O comando para compilar é o “javac”, onde não necessariamente a classe a ser compilada precisa ter um método main.
Já para executar uma classe, o comando é o “java”, onde este sim necessita que a classe a ser executada possua um método main. É a partir de um método main que a jvm inicia a execução de um “programa”.
Exemplo de classe se o método main:
public class Pessoa
{
private int idade;
public int getIdade()
{
return idade;
}
public void setIdade(int idade)
{
this.idade = idade;
}
}
Exemplo de classe com o método main:
public class UsaPessoa
{
public static void main(String[] args)
{
Pessoa p = new Pessoa();
p.setIdade(20);
System.out.println("A idade é: " + p.getIdade());
}
}
As duas classes compilam normalmente com o uso do comando javac, porém somente a classe UsaPessoa é uma classe “executável” através do comando java.
Caro gilsonpolito, nossa muito obrigado mesmo pela explicação.
Isso ajuda a explicar pq muitos códigos que tentava executar com java, mas não rodavam.
Então só pra ver se entendi.
Se tenho duas classes, uma com um método main e outra sem.
1- Devo compilar as duas classes com o javac para gerar o bytecode (.class)
2- Somente a classe que possua um método main poderá ser executada com o comando java;
É isso mesmo, ou ainda entendi errado?
Valeu.
Abração.
É isso ai!
No exemplo que te passei inicia-se a execução pela classe UsaPessoa (que possui o método main) e esta classe se encarrega de carregar o objeto Pessoa (que vem da classe onde não possui o método main).
Qualquer coisa poste suas dúvidas ai. O que der para ajudar…