Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

Gurzi

static doubt

Mensagens Recomendadas

Gurzi    2
Gurzi

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Dabubble    0
Dabubble

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)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Gurzi    2
Gurzi

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 ?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Dabubble    0
Dabubble

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)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Gurzi    2
Gurzi

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 ?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Gurzi    2
Gurzi

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Gurzi    2
Gurzi

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 ?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Hipnoted    6
Hipnoted

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    309
Rui Carlos

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...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Gurzi    2
Gurzi

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:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Hipnoted    6
Hipnoted

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Gurzi    2
Gurzi

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 ?

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


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade