Jump to content

static doubt


Gurzi
 Share

Recommended Posts

class Letter { 
  char c; 
} 

public class PassObject { 
  static void f(Letter y) { 
    y.c = 'z'; 
  } 
  public static void main(String[] args) { 
    Letter x = new Letter(); 
    x.c = 'a'; 
    System.out.println("1: x.c: " + x.c); 
    f(x); 
    System.out.println("2: x.c: " + x.c); 
  } 

}

Tenho 2 dúvidas..

Primeiro, porque é que se incluiu o main dentro da class PassObject ??? não se devia fechar a class e depois é que sim se abria o main ??

Outra coisa, faz-me um bocado confusão isto do static.. quando é static um método não se deve chamar assim class.metodo()  e quando é uma instancia objecto.metodo() ?

se foi feito  static void f(Letter y)  não devia ser feito PassObject.metodo() ao invés de f(x) ?

Link to comment
Share on other sites

Primeiro que nada tudo em java pertence a uma classe, o método main inclusivé. (podes ter um método main por classe no limite)

Um propriedade/método static pertence à classe e não as instancias da classe e como tal é partilhada por todas as instancias.

Um método estático é normalmente chamado NomeDaClasse.metodo() enquanto um método normal é chamado sobre a instancia do objecto sobre o qual se quer invocar (instanciaDoNomeDaClasse.metodo())

se foi feito  static void f(Letter y)  não devia ser feito PassObject.metodo() ao invés de f(x) ?

Este método se for chamado de fora da classe PassObject deve ser chamado PassObject.f(x) mas se for de dentro (como é o caso no main) pode ser so chamado de por f(x)

Link to comment
Share on other sites

Obrigado pela explicação super perceptiva!  ;)

Um bem haja!

ps : comecei á um mês a aprender Java, como nunca trabalhei com objectos é claro que está a ser díficil, 1 mês é muito tempo para começar a fazer algo de jeito ??

deverei já começar a aprender patterns ?

Link to comment
Share on other sites

Obrigado pela explicação super perceptiva!  ;)

Um bem haja!

ps : comecei á um mês a aprender Java, como nunca trabalhei com objectos é claro que está a ser díficil, 1 mês é muito tempo para começar a fazer algo de jeito ??

deverei já começar a aprender patterns ?

Java é a linguagem das frameworks. Não é complicada de aprender mas se não tiveres um conhecimento profundo de outras linguagens POO ainda demora uma beka a dominar como deve de ser.

Depois de dominar a sintaxe e a parte POO e fixe brincar com frameworks (tipo Swing SWT, struts, JSF, hibernate etc.etc.etc.) para que percebas como utilizar a sintaxe, e vás interiorizando o uso de patterns dessas linguagens.

Patterns é um dos últimos passos pois apesar de serem fáceis de aprender como conceito individual (na realidade maior parte é agnóstica de linguagem) demora um pouco a perceber quando e para que são necessárias.

Para aprender patterns o melhor e apanhar um bom livro e depois explorar o código das frameworks já existentes emais utilizadas das quais as mais importantes são (no meio empresarial):

Spring (framework "cola" para integrar outras frameworks)

Struts (framework MVC para produzir páginas Web)

JSF (a melhor e mais recente framework web, torna-se imbatível com facelets)

Seam (uma framwork que integra EJB3 e JSF)

Nutch (um google open-source da apache com o que eu considero um dos melhores códigos fonte que já vi)

Link to comment
Share on other sites

Porreiro.. eu vou ter que começar a aprender swing porque tenho um projecto para fazer para final de curso e vou usar java e convem começar a desenhar umas coisas, mas tb n sei como aquilo funciona.. podes só me dar uma ideia ??

já criei um botaozito, queria que onclick abrise um hello world em texto , como faço ?

já agora posto aqui uma minha outra dúvida..

public class Leaf {

  int i = 0;

  Leaf increment() {

porque raio increment() é do tipo Leaf ???????

porque nao pode ser só int increment ou algo do género ?

Link to comment
Share on other sites

exactamente ! :X

como é que eu sei quando devo usar a palavra static ?

sendo em métodos ou variaveis ?

pelo que percebi.. se tiver um método static posso chamalo só com method() e se tiver um métod non static tenho que o chamar através de um objecto certo ???

mas e em relaçao a variaveis ??

Link to comment
Share on other sites

Bem vou dormir que por hoje já tenho o cérebro cansado..

vou só lançar uma dúvida que só amanha irei ver que hoje já não consigo mais pensar nela..

public class Flower { 
  int petalCount = 0; 
  String s = new String("null"); 
  Flower(int petals) { 
    petalCount = petals; 
    System.out.println( 
      "Constructor w/ int arg only, petalCount= " 
      + petalCount); 
  } 
  Flower(String ss) { 
    System.out.println( 
      "Constructor w/ String arg only, s=" + ss); 
    s = ss; 
  } 
  Flower(String s, int petals) { 
    this(petals); 
//!    this(s); // Can't call two! 

    this.s = s; // Another use of "this" 
    System.out.println("String & int args"); 
  } 
  Flower() { 
    this("hi", 47); 
    System.out.println( 
      "default constructor (no args)"); 
  } 
  void print() { 

    System.out.println( 
      "petalCount = " + petalCount + " s = "+ s); 
  } 
  public static void main(String[] args) { 
    Flower x = new Flower(); 
    x.print(); 
  } 
} 

Ora bem.... Tenho as seguntes dúvidas...

1º Quando tenho um constructor vazio(non-arguments) ele vai buscar esse ou vai buscar as configs default da classe ???

2º Eu percebo que

  Flower() { 
    this("hi", 47); 
    System.out.println( 
      "default constructor (no args)"); 
  } 

ele passa o hi e o 47 para o constructror que recebe 2 vars, até aqui tudo bem, de seguida imprime o texto, tudo percebido mas depois...

  Flower(String s, int petals) { 
    this(petals); 
//!    this(s); // Can't call two! 

    this.s = s; // Another use of "this" 
    System.out.println("String & int args"); 
  } 

quando chega a esta parte..

nao percebo o que realmente vai fazer o this(petals).. o que vai fazer ?

Link to comment
Share on other sites

this é uma palavra reservada em Java que significa o próprio objecto.

Por exemplo tu declaras-te em cima :

String s = new String("null"); 

E no métodos tens:

this.s = s; // Another use of "this" 

Quer dizer que a variável "s" do próprio objecto toma o valor do "s" que inseriste.

"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Link to comment
Share on other sites

não é por nada, mas essa cena de por println's nos construtores (ou em qualquer outra parte da camada computacional de um programa) não me parece muito boa ideia...

Só estou a seguir o que o "Thinking in Java diz!  :wallbash:

Link to comment
Share on other sites

Certo mas este

Flower(String s, int petals) {

    this(petals);

o petals não está a ser atribuido a nada...

Nesse caso chama o método constructor do próprio objecto.

Petals é do tipo inteiro e tens aoi declarado um constructor que recebe um inteiro:

Flower(int petals) { 

"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Link to comment
Share on other sites

Ah ok, agora sim tem logica! obrigado  ;)

Ouve só uma coisa que não percebi..

A real utilizacao de static nas variaveris e nos métodos..

Nos métodos percebi que se pode chamar tipo uma função , sem nenhum objecto agregado.. tem mais alguma função ?? e nas variáveis serve tipo "constante" right ?

Link to comment
Share on other sites

Nos métodos percebi que se pode chamar tipo uma função , sem nenhum objecto agregado.. tem mais alguma função ?? e nas variáveis serve tipo "constante" right ?

Encontrei isto na net:

http://www.guj.com.br/java.tutorial.artigo.121.1.guj

Espero que ajude. ;)

"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.