• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Gurzi

static doubt

17 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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 ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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 ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Assim às cegas... provavelmente vai ser retornado o próprio objecto (this) depois de incrementado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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 ??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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 ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Certo mas este

Flower(String s, int petals) {

    this(petals);

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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) { 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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 ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora