Ajuda. Como criar pacotes?

Boa tarde a todos.

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?

obrigado

me corrijam se eu estiver errado…

vc tem aí apenas um pacote chamado “pacotes”
sendo que vc tem 2 class…

  1. TestaPacotes
  2. 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.
:wink:

ola manrobfer,

O seu arquivo deve estar dentro de um diretório seguindo a estrutura
java
—pacotes
-------TestaPacotes.java

Cada palavra na instrução package corresponde a um diretório físico.

Espero ter ajudado.

[]´s

LG e gilsom polito e quem mais puder ajudar.

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)?

Ou não entedi nada mesmo?

fala ae manrobfer,

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:

java Java.pacotes.TestaPacotes

Qualquer dúvida é só postar…

[]´s

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?

Obrigado.

boa noite rmalati,

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.

Espero ter ajudado!!

[]'s

1 curtida

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…

abraços

Ok, entendi mesmo.
Muito obrigado. 8)

Muito bem, explicativo a questão de compilações com main e sem main (eu não sabia desse detalhe :D, apesar de ser iniciante java tambem).