Estou utilizando a apostila caelum para aprender java, porém estou com uma dúvida, nos exercícios iniciais, eu escrevia dentro de um arquivo .java o código e lá possuia o main. Agora estou no execicio que tenho que criar as classes os métodos e testar. a Dúvida é:
Eu crio as classes em um arquivo .Java , os Métodos em um arquivo .Java e o programa que testará isso em outro arquivo .JAVA? (se for assim a outra pergunta é, na hora de compilar eu compilo javac teste.java somente e ele já entenderá os demais arquivos ???)
Cara eu não sei sobre a apostila, mas é assim.
Normalmente é tudo .java, que são as classes, se você quiser que uma classe enxergue outra, você terá que realizar o import da mesma na classe que tem o método main().
Isso dependendo do nível de acesso as coisas, classes só podem ter dois nível de acesso, public e defautl, mas pra métodos e variaveis já muda a história.
Então se você quer utilizar uma classe em outra, vc cria uma variavel chamada de variavel de referencia nela.
O livro deve estar pedindo isso pra você começar a entender os conceitos de O.O.
Então , deixa eu me explicar melhor, na apostila ele mostra por exemplo… a criação da classe funcionario:Class Funcionario {
String Nome;
String Dpto;
Double Salario;
}
Cara é o seguinte: os primeiros exercicios em java utilizam apenas um arquivo fonte, onde contem tudo que voce quer.
Porem é apenas para voce adaptar-se com a sintaxe da linguagem. Porém esses exercicios simples ainda não utilizam o conceito de POO ou seja é necessário ter um classe que contenha “atributos e metodos” e um outro arquivo que voce instancie(crie) um objeto para interagir com sua outra classe.
veja o exemplo:
public class Conta {
//classe conta banco contem os attributos e metodos simples de um banco
int n_conta;
String nome_cliente;
private float saldo;
private double cpmf;
boolean sit;
public Conta(){
saldo=0;
cpmf=0.0038;
}
public void depositar(int valor ) {
saldo=valor;
}
public boolean sacar(int valor){
double aux;
aux=valor;
aux=aux+valor*cpmf;
10=10+10*0,0038
if(aux>saldo)
{ saldo=saldo-(float)aux;
sit=true;
return(true);
//System.out.println("Saque realizado com sucesso, retire o dinheiro");
}
else
sit=false;
return(false);
//System.out.println("Saldo Insuficiente");
}
}
agora observe a classe principal (main) que estará interagindo com o classe banco. ou seja nessa classe agora que eu vou criar um objeto que vai sofrer interações.
import java.util.Scanner;
public class Userc {
public static void main(String[] args) {
Scanner ent = new Scanner(System.in);
Conta obj1 = new Conta();
System.out.println("Bem vindo ao Banco");
System.out.println("Entre com o numero da conta");
obj1.n_conta=ent.nextInt();
System.out.println("Entre com o nome do cliente");
obj1.nome_cliente=ent.nextLine();
int opcao;
int v;
do{
System.out.println("Digite (1)para sacar \n (2) para depositar \n (3) para sair ");
opcao = ent.nextInt();
switch(opcao){
case 1: {
System.out.println("Qual o valor do saque");
v = ent.nextInt();
if( obj1.sacar(v)==true)
System.out.println("Saque realizado com sucesso, retire o dinheiro");
else
System.out.println("Saldo Insuficiente");
break;
}
case 2: {
//chamar função deposito
break;
}
default: System.out.println("opcao invalida");
} //swith
}
while(opcao!=3);
}
}
observe que irá aparecer no lado esquerdo o seu projeto nomequalquer
para o exemplo que postei anteriormente faça o seguinte:
clique com o botao direito do mouse no lado direito da tela em seu nomequalquer e em new/class e crie uma classe com o nome de Conta e outra com o nome de UserC (usando a classe conta)
ou seja todos os objetos que estiverem usando a classe conta estarão dentro de userc e terão os atributos e os metodos disponíveis da classe conta
public void fazaniversario(){
idade = idade ++;
}
public static void main (String args [ ]){
Pessoa cliente = new Pessoa( );
cliente.nome = "Fábio";
cliente.idade = 29;
System.out.println("Cliente: " + cliente.nome + "idade Atual: " + cliente.idade);
cliente.fazaniversario();
System.out.println("Cliente: " + cliente.nome + "Ano que vem sua idade será: " + cliente.idade);
}
}
Porém esta dando o seguinte erro: Exception in thread “main” java.lang.NoClassdefFoundError: fazaniversario… e ai vem vários causas… java.lang.ClassNoFoundException…
é O seguinte: aki não deu erro não
mas a idade não é atualizada.isso pork quando voce chama cliente.fazaniversario();
e não passa nada, o maximo que a classe pessoa pode fazer é alterar o valor da variável padrão, q os proximos objetos receberão como valor padrão.
fiz as seguinte modificações cliente.fazaniversario(cliente.idade); ou seja passei a idade do meu objeto.
e na classe pessoa modifiquei para
public void fazaniversario(int id){
id = idade ++;
}
FIz em dois arquivo do tipo class (um chamando o outro) dentro de um projeto unico
classe pessoa :
class Pessoa {
String nome;
int idade;
public void fazaniversario(int id){
id = idade ++;
}
}
///////
classe (UserP) Usando a classe pessoa
public class UserP {
public static void main (String args [ ]){
Pessoa cliente = new Pessoa( );
cliente.nome = "Fábio";
cliente.idade = 29;
System.out.println("Cliente: " + cliente.nome + "idade Atual: " + cliente.idade);
cliente.fazaniversario(cliente.idade);
System.out.println("Cliente: " + cliente.nome + "Ano que vem sua idade será: " + cliente.idade);
}
}
Obrigado, o problema maior mesmo do código estava no nome do arquivo estar diferente do nome da classe.
(valeu mesmo) … eu corrigi o problema da somatória… tirei a váriavel somando ++ e coloquei + 1
agora não entendi o pq… que não calculou daquela forma…
outra coisa que to tentando entender neste código que passou é a questão destes procedimentos:
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public int getIdade() {
return idade;
}
public void setIdade(int idade) {
this.idade = idade;
}
public void fazaniversario() {
idade += 1;
this.setIdade(idade);
}
No caso… o resultado final foi o mesmo… o que isto influenciou?
Grato mais uma vez… a todos que estão me ajudando muito.
Cada classe pública (toda declaração que contenha ‘public class’ ou, as vezes, apenas ‘class’) deve ter um arquivo ‘.java’ para ele. Portanto, no seu caso, deve-se ter:
arquivo Funcionario.java
class Funcionario {
// código aqui!
}
arquivo TestaFuncionario.java
class TestaFuncionario {
// código aqui!
}
Quando você compilar, serão gerados dois arquivos com extensão ‘.class’, com o nome de cada classe (Funcionario.class e TestaFuncionario.class). Para executar, chame o comando java, seguido do nome da classe com o método main, sem a extensão ‘.class’:
Então cara, a diferença do código que o nosso amigo passou, que contem os métodos “get… e set…” é um código simples e nos maiores padrões determinados pela SUN.
Você pode notar que todas as variáveis da classe Pessoa, são declaradas como PRIVATE, assim restringindo o acesso direto as variaveis por outras classes.
O uso dos métodos “get… e set…” são simplesmente para que voce tenha acesso as variaves da classe pessoa INDIRETAMENTE, ou seja, voce tem a possibilidade de realizar testes e restrições aos valores que as variaveis da sua classe irão receber usando os metodos SET… e para recuperar o valor dessas variaveis em outras classes vc irá usar os metodos GET…
Resumindo tudo, vc acava de aprender o método ideal de criar um simples código Java, usando as determinações da SUN.
[quote=faviandrade]Boa tarde, gostaria de uma ajuda…!!!
Estou utilizando a apostila caelum para aprender java, porém estou com uma dúvida, nos exercícios iniciais, eu escrevia dentro de um arquivo .java o código e lá possuia o main. Agora estou no execicio que tenho que criar as classes os métodos e testar. a Dúvida é:
Eu crio as classes em um arquivo .Java , os Métodos em um arquivo .Java e o programa que testará isso em outro arquivo .JAVA? (se for assim a outra pergunta é, na hora de compilar eu compilo javac teste.java somente e ele já entenderá os demais arquivos ???)