Package

14 respostas
7

Pessoal,

Estou seguindo um tutorial da net sobre java. Pelo que entendi quando coloco a palavra “package” no inicio do fonte estou indicando onde ele estará localizado. Também se o diretório não existir ele será criado.

Fiz isso nos fontes abaixo. Mas, o diretório não é criado automaticamente.

package meupacote;

class Classe1
{

public static int soma (int a, int b)

{

return(a+b);

}

}

package meupacote;

class Classe2
{

public static int sub (int a, int b)

{

return(a-b);

}

}

package meupacote;

class Classe3
{

public static void main(String args[])
{

Classe1 c1=new Classe1();
Classe2 c2=new Classe2();

System.out.println(c1.soma(1,2));
System.out.println(c2.sub(2,1));

}

}

Além disso, se eu colocar a palavra package nos fontes, a classe 1 e classe 2 compilam, mas a classe3 dá erro na compilação (sem a palavra package, todos 3 fontes compilam e executo com o comando c:>java Classe3):
Obs: todos 3 fontes estão no mesmo diretório.

C:>javac Classe3.java

Classe3.java:9: cannot resolve symbol

symbol  : class Classe1

location: class meupacote.Classe3

Classe1 c1=new Classe1();

^

Classe3.java:9: cannot resolve symbol

symbol  : class Classe1

location: class meupacote.Classe3

Classe1 c1=new Classe1();

^

Classe3.java:10: cannot resolve symbo

symbol  : class Classe2

location: class meupacote.Classe3

Classe2 c2=new Classe2();

^

Classe3.java:10: cannot resolve symbo

symbol  : class Classe2

location: class meupacote.Classe3

Classe2 c2=new Classe2();

^

4 errors

Se puderem me indicar onde estou errando.

Desde já, agradeço.

14 Respostas

drsmachado

Há um pequeno equívoco no seu entendimento. Java não interpreta package como mkdir(). Explico.
Java entende que a palavra reservada package indica o pacote onde o arquivo .java está.
Por exemplo, considere o package estacionamento, nele podem existir as classes moto, carro e onibus. Embora as classes possam conter a indicação package estacionamento, caso as classes não estejam ali, o sistema irá apresentar erro.

R

Isso mesmo o que foi explicado acima.

Quando você coloca o package, está apenas dizendo que a classe está no pacote citado.

7

Criei o diretório “meupacote”.

Coloquei os fontes nele.

As classes1 e classes2 compilam. A classe3 dá erro.
O que ainda pode estar errado ?

Erro:

C:\meupacote>javac Classe1.java

C:\meupacote>javac Classe2.java

C:\meupacote>javac Classe3.java

Classe3.java:9: cannot resolve symbol

symbol  : class Classe1

location: class meupacote.Classe3

Classe1 c1=new Classe1();

^

Classe3.java:9: cannot resolve symbol

symbol  : class Classe1

location: class meupacote.Classe3

Classe1 c1=new Classe1();

^

Classe3.java:10: cannot resolve symbol

symbol  : class Classe2

location: class meupacote.Classe3

Classe2 c2=new Classe2();

^

Classe3.java:10: cannot resolve symbol

symbol  : class Classe2

location: class meupacote.Classe3

Classe2 c2=new Classe2();

^

4 errors
R

Você precisa importar as classes 1 e 2 para a classe 3.

Depois do packege coloca o seguinte código:

import classe1;
import classe2;

Como estão no mesmo pacote, então não precisa especificá-los no import.

Mas caso ca classe 3 estivesse em outro pacote, você precisaria indicar todo o caminho.

Ex:

import meupacote.classe1;
import meupacote.classe2;

7

Fiz como indicado:

package meupacote;

import Classe1;

import Classe2;

class Classe3
{

public static void main(String args[])
{

Classe1 c1=new Classe1();
Classe2 c2=new Classe2();

System.out.println(c1.soma(1,2));

System.out.println(c2.sub(2,1));

}

}

Mas continua dando erro:

C:\meupacote>javac Classe3.java

Classe3.java:3: . expected

import Classe1;

^

Classe3.java:4: . expected

import Classe2;

^

Classe3.java:13: cannot resolve symbol

symbol  : class Classe1

location: class meupacote.Classe3

Classe1 c1=new Classe1();

^

Classe3.java:13: cannot resolve symbol

symbol  : class Classe1

location: class meupacote.Classe3

Classe1 c1=new Classe1();

^

Classe3.java:14: cannot resolve symbol

symbol  : class Classe2

location: class meupacote.Classe3

Classe2 c2=new Classe2();

^

Classe3.java:14: cannot resolve symbol

symbol  : class Classe2

location: class meupacote.Classe3

Classe2 c2=new Classe2();

^

6 errors
adriano_si

rizller:
Você precisa importar as classes 1 e 2 para a classe 3.

Depois do packege coloca o seguinte código:

import classe1;
import classe2;

Como estão no mesmo pacote, então não precisa especificá-los no import.

Mas caso ca classe 3 estivesse em outro pacote, você precisaria indicar todo o caminho.

Ex:

import meupacote.classe1;
import meupacote.classe2;

Opa cara… acho que sua informação foi equivocada… Não posso fazer o teste aqui no trampo, mas creio que classes em mesmo pacote não precisam ser importadas…

B

O adriano tem razão, classes em mesmo pacote não precisam do import.

adriano_si

Fala 7AVA, cara to te ajudando porque acho que estás começando certo… Fazendo as coisas bem do começo tentando entender…

Mas dá uma lida no tópico de boas vindas do fórum para novatos… Pra facilitar nossa comunicação daqui por diante…

Retira esses imports, compila de novo e coloca o resultado no CODE… Posta tuas 3 classes e o resultado da compilação de cada 1…

Abs []

http://www.guj.com.br/posts/list/15477.java
http://www.guj.com.br/posts/list/50115.java

adriano_si

hauahauahuaahu bestei… cara… posso estar MUITO enganado, mas tens que compilar as classes ou passando o PATH completo das mesmas, ou de dentro da Pasta onde se encontram os teus .java

Faz tanto tempo que não trabalho compilando classes na mão que não lembro se a informação é precisa… Mas tenta aí… Não compila de dentro de C:\

Compila de dentro do PATH do “meupacote”…

Deve funcionar…

7

Mesmo tentando compilar de dentro do path “meupacote” dá erro:

Fonte 1:

package meupacote;

class Classe1
{

public static int soma (int a, int b)
{
return(a+b);
}

}

Compila sem erro.

Fonte 2:

package meupacote;

class Classe2
{

public static int sub (int a, int b)
{
return(a-b);
}

}

Compila sem erro.

Fonte 3

package meupacote;


class Classe3
{

public static void main(String args[])
{

Classe1 c1=new Classe1();
Classe2 c2=new Classe2();

System.out.println(c1.soma(1,2));
System.out.println(c2.sub(2,1));

}

}

Erro na compilação:

C:\meupacote>javac classe3.java

classe3.java:10: cannot resolve symbol

symbol  : class Classe1

location: class meupacote.Classe3

Classe1 c1=new Classe1();

^

classe3.java:10: cannot resolve symbol

symbol  : class Classe1

location: class meupacote.Classe3

Classe1 c1=new Classe1();

^

classe3.java:11: cannot resolve symbol

symbol  : class Classe2

location: class meupacote.Classe3

Classe2 c2=new Classe2();

^

classe3.java:11: cannot resolve symbol

symbol  : class Classe2

location: class meupacote.Classe3

Classe2 c2=new Classe2();

^

4 errors

Ainda não consegui…

adriano_si

cara… vê se não é isso

Classe != classe

Perceba que o Java é Case Sensitive… não sei… põe os comandos que estás usando pra compilar nas outras 2 classes e perceba que seu Arquivo.java deve ter uma classe publica chama Arquivo… Não sei mais o que pode estar ocorrendo…

Quando chegar em casa, se ninguém ainda estiver lhe ajudado, vou fazer os testes com suas classes e posto aqui…

Abs []

adriano_si

Consegui o Note de um amigo aqui… é realmente bom rever certas coisas na unha…

Todas as tuas classes estão dentro de C:\meupacote , ok ???

Quando isso acontece, não precisas colocar o pacote de referência da classe… Pra fazer un teste de acesso a pacote, faz as seguinte mudancas, joga tua Classe1.java e Classe2.java pra dentro de uma pasta ‘teste’…

vai lá no Package de Classe1 e Classe2 e coloca na primeira linha de ambas package teste; Dentro de Classe3.java, não vais colocar pacote nenhum, afinal, tua aplicação vai procurar tudo a partir dalí pra compilar, mas terás que colocar os imports pára Classe1 e Classe2 assim import teste.Classe1; import teste.Classe2; Nas primeiras linhas de Classe3…

Testa aí e nos retorne…

Assim, estás compilando tua class que referencias outras 2 que estão dentro de um pacote… isso que eu estava te indicando não funcionava porque ao compilar a Classe3, o javac estaava indo procurar a Classe2.class dentro de um pacote externo chamado meupacote, ou seja, sua classe teria que estar em C:\meupacote\meupacote

Abraços :wink:

7

Caro Adriano,

Funcionou !!!

Valeu pela ajuda.

Fiz como vc falou; Precisei colocar a Classe1 e Classe2 como public.

Obrigado pela atenção.

Abraços !!!

Tópico resolvido !!!

adriano_si

7AVA:
Caro Adriano,

Funcionou !!!

Valeu pela ajuda.

Fiz como vc falou; Precisei colocar a Classe1 e Classe2 como public.

Obrigado pela atenção.

Abraços !!!

Tópico resolvido !!!

Blz cara… só edita o tópico e coloca [RESOLVIDO] junto ao título…

Abs[]

Criado 12 de novembro de 2010
Ultima resposta 12 de nov. de 2010
Respostas 14
Participantes 5