Gurzi Posted November 7, 2006 at 10:26 PM Report #62804 Posted November 7, 2006 at 10:26 PM 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) ?
Dabubble Posted November 7, 2006 at 10:50 PM Report #62810 Posted November 7, 2006 at 10:50 PM 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)
Gurzi Posted November 7, 2006 at 10:55 PM Author Report #62812 Posted November 7, 2006 at 10:55 PM 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 ?
Dabubble Posted November 8, 2006 at 12:41 AM Report #62849 Posted November 8, 2006 at 12:41 AM 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)
Gurzi Posted November 8, 2006 at 01:18 AM Author Report #62852 Posted November 8, 2006 at 01:18 AM 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 ?
TheDark Posted November 8, 2006 at 02:15 AM Report #62856 Posted November 8, 2006 at 02:15 AM Assim às cegas... provavelmente vai ser retornado o próprio objecto (this) depois de incrementado. Desaparecido.
Gurzi Posted November 8, 2006 at 02:25 AM Author Report #62857 Posted November 8, 2006 at 02:25 AM 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 ??
NetWarrior Posted November 8, 2006 at 02:35 AM Report #62860 Posted November 8, 2006 at 02:35 AM página muito boa... http://www.leepoint.net/notes-java/flow/methods/50static-methods.html e http://www.developer.com/java/other/article.php/2238491 Não quero estar a enganar ... mas é tipo criar uma classe com metodos por exemplo que só vão ser utilizados na criação do objecto, logo são "estaticos".
Gurzi Posted November 8, 2006 at 02:50 AM Author Report #62864 Posted November 8, 2006 at 02:50 AM 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 ?
Hipnoted Posted November 8, 2006 at 09:18 AM Report #62877 Posted November 8, 2006 at 09:18 AM 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"
Rui Carlos Posted November 8, 2006 at 09:53 AM Report #62881 Posted November 8, 2006 at 09:53 AM 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... Rui Carlos Gonçalves
Gurzi Posted November 8, 2006 at 09:57 AM Author Report #62882 Posted November 8, 2006 at 09:57 AM Certo mas este Flower(String s, int petals) { this(petals); o petals não está a ser atribuido a nada...
Gurzi Posted November 8, 2006 at 09:58 AM Author Report #62883 Posted November 8, 2006 at 09:58 AM 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!
Hipnoted Posted November 8, 2006 at 10:01 AM Report #62884 Posted November 8, 2006 at 10:01 AM 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"
Gurzi Posted November 8, 2006 at 10:07 AM Author Report #62885 Posted November 8, 2006 at 10:07 AM 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 ?
Hipnoted Posted November 8, 2006 at 10:30 AM Report #62886 Posted November 8, 2006 at 10:30 AM 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"
Gurzi Posted November 8, 2006 at 10:57 AM Author Report #62889 Posted November 8, 2006 at 10:57 AM Porreiro, já domino LOL ! 😉 Obrigado
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now