Diferença

7 respostas
F

Começando em java e um exercícizinho :lol: para começar, apenas para somar dois valores:

package Exercício;

public class NumQual {
	int x = 40;
	int y = 50;
	int soma;
	public NumQual(int a1, int b1){
		x = a1;
		y = b1;
	}
	public void SomaValores(){
		soma = x + y;
	}
	public static void main(String args[]){
		NumQual s1 = new NumQual();
		s1.SomaValores();
		System.out.println("Soma é = " + s1.soma);
		}
	}

Dessa forma da esse erro:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
	Syntax error on token "int", delete this token
	Cannot make a static reference to the non-static field x
	Cannot make a static reference to the non-static field y

mas se passo os valores que declarei acima, da certo:

package Exercício;

public class NumQual {
	int x, y, soma;

	public NumQual(int a1, int b1){
		x = a1;
		y = b1;
	}
	public void SomaValores(){
		soma = x + y;
	}
	public static void main(String args[]){
		NumQual s1 = new NumQual(40,50);
		s1.SomaValores();
		System.out.println("Soma é = " + s1.soma);
		}
	}

Lembrando que to começando mesmo, seguindo passo-a-passo nos livros e apostilas... :oops:

Obrigado!

7 Respostas

xandevieira

Isso eh um construtor que recebe dois parametros. no main vc estava usando um contrutor q nao existia

public NumQual(int a1, int b1){  
         x = a1;  
         y = b1;  
}
T

Olá Fjal!
Primeiramente, não consegui reproduzir o erro que você teve com o código acima, mas vou explicar um pouco do que poderia ter acontecido.
É o seguinte: o main é um método estático (palavra reservada static), então ele não pode utilizar atributos não estáticos, que são específicos de cada objeto criado. Então se você quer utilizar o x e o y da classe dentro do main, você deve setá-los como estáticos. Vale lembrar que fazendo isso, eles serão únicos para todo objeto criado. Se desejar que eles sejam diferentes em cada objeto, o que parece ser o caso, você deve inicializa-los fora do main, e chama-los através do objeto, e não diretamente.

Mas pegando o código acima, o jeito de corrigir ele foi só criando um construtor que não receba parâmetros, aí ele setaria os valores padrão de x e y, ou então no caso de seu primeiro código, apenas um construtor sem parâmetros vazio resolveria.

Espero ter ajudado :stuck_out_tongue:

//TheMadJava

B

você quase acertou…
se vc olhar bem…vc não precisaria colocar a1 e b1 no construtor…só com o método somaValores dá certo

package Exercício;


    public class NumQual {   
    int x = 40;   
    int y = 50;   
    int soma;   
    
    public  NumQual(){   
    }   

    
    public void SomaValores(){   
        soma = x + y;   
    }
    
    public static void main(String args[]){   
        NumQual s1 = new NumQual();   
        s1.SomaValores();   
        System.out.println("Soma é = " + s1.soma);   
        }   
    }
fujioka

Seu codigo estava quase certo… =) caminho certo…

variaveis e metodos estaticos são como pessoas apaixonadas so enxergam um ao outro… o mesmo vale para não estaticos…

uma variável estática so é vista de um método estático…
uma variável não estatica so é vista de um método nao estático

no caso você pode fazer como a sugestão abaixo… um método que recupera o valor da soma…

package Exercício;


    public class NumQual {   
    int x = 40;   
    int y = 50;   
    int soma;   
    
    public  NumQual(){   
    }   

    
    public void SomaValores(){   
        soma = x + y;   
    }

   public int getSoma(){
    return soma;
   }
    
    public static void main(String args[]){   
        NumQual s1 = new NumQual();   
        s1.SomaValores();   
        System.out.println("Soma é = " + s1.getSoma());   
        }   
    }
Ratao

Seguindo as boas praticas e que todos passaram e ninguém viu hein pessoal?! Métodos iniciam-se com letra minúscula.

public void somaValores(){  
         soma = x + y;     
     }
F

Valeu moçada, entendi o que todos passaram, fujioka, sobre criar um método getSoma() para retornar a soma, acho que isso só aumenta o código não?, pois o programa vai rodar sem o mesmo, igual o blst fez ali em cima.

programadora
fujioka:
uma variável estática so é vista de um método estático..

Pode até não ser correto, mas nesse caso, vale acrescentar que uma variável estática pode ser acessada também por um método não estático:

class A{
   static int num = 2;

   public void exibeValor(){
      System.out.println("num = "+num);
   }
}
O contrário também pode acontecer (um método estático acessar uma variável não estática), só que de forma indireta, através de uma instância:
class A{
   int num = 6;
      
   public static void main(String [] args){
      A a = new A();
      // através de uma instância de A, pode-se acessar sua variável não estática num
      System.out.println("O valor de num é: "+a.num);
   }
}
Criado 25 de março de 2008
Ultima resposta 26 de mar. de 2008
Respostas 7
Participantes 7