You are on page 1of 5

5.4 Mtodos Um mtodo em Java uma sub-rotina semelhante as funes de C e Pascal. Os mtodos tm um retorno e podem conter parmetros.

. A Sintaxe de um mtodo a seguinte:


1. 3.

2.

[modif] <retorno> <nome> ([<tipo param>],[...]) { <corpo do mtodo> }

Ao declarar um mtodo possvel adicionar modificadores, vistos na seo anterior, antes de informar o tipo de retorno. O modificador esttico declara que o mtodo ter um determinado tipo de comportamento dentro do programa orientado a objetos. Na declarao de um mtodo os modificadores precedem o tipo de retorno, que precede o nome do mtodo e a lista de parmetros. O corpo do mtodo colocado entre chaves. Buscando o exemplo da classe pessoa:

1. //<modif> <ret> <nome> <parametro> 2. public void gastar(double valor) { // Corpo


3. 4. dinheiroNaCarteira -= valor; }

O corpo do mtodo pode conter declaraes de variveis e comandos. As variveis no ficam restritas a declarao somente antes dos comandos, como acontece em C ou em um local pr-determinado como em Pascal, ao contrrio, podem ser declaradas em qualquer lugar. O tipo de retorno de um mtodo pode ser primitivo ou de referncia, ou como no mtodo main, pode ser void, ou seja, no retorna nada. Em Java todos os argumentos so passados por valor. No existe passagem por referncia. Se for varivel primitiva o valor da varivel passada no parmetro e pode ser alterada a vontade dentro da funo que nada sofrer a varivel externa. Com objetos o que muda que o valor passado no parmetro da funo a referncia para o objeto, ou seja, se um objeto for alterado dentro da funo, o objeto externo tambm ser alterado, exceto nas instrues objeto = null;

O nome do mtodo acrescido de seus parmetros denominado assinatura do mtodo.

Construtores

Os contrutores so mtodos muito especiais, a comear pela sua sintaxe declarativa, e tambm por suas propriedades e finalidade nicas. Por exemplo, o construtor da classe Vrtice vista acima o seguinte:

Vrtice( double x, double y ) { this.x = x; this.y = y; } Sua nica finalidade inicializar o objeto com um par de coordenadas fornecidas no momento da instanciao. Alis, esta a principal finalidade dos construtores: atribuir a um objeto um estado inicial, apropriado ao processamento subseqente.

Os contrutores
So mtodos facilmente identificveis pois tm o mesmo nome da classe. Alm disso, os construtores no especificam nenhum valor de retorno, mesmo que este seja void, uma vez que no so chamados como os outros mtodos. Os construtores somente podem ser chamados no momento da instanciao. Por exemplo:

Vrtice v = new Vrtice(1.0, 2.0); Temos neste trecho de cdigo a instanciao da classe Vrtice, que ocorre no momento em que reservamos espao para conter um novo objeto dessa classe. Nesse momento o construtor Vrtice chamado com os argumentos 1.0 e 2.0. usual declarar os contrutores como pblicos. Isto porque, se eles tiverem um nvel de acesso inferior ao da classe propriamente dita, outra classe ser capaz de declarar uma instncia dessa classe, mas no ser capaz de realizar ela mesma a instanciao, isto , no poder usar o operador new para essa classe. H situaes, porm, em que essa caracterstica desejvel. Deixando seus construtores como privativos, permite a outras classes usar mtodos estticos, sem permitir que elas criem instncias dessa classe.

Uma classe pode mltiplos construtores declarados, desde que cada um tenha lista de argumentos distinta dos demais. Isto muito til, pois em determinados contextos do programa um objeto deve ser inicializado de uma maneira particular em relao a outros contextos possveis.

Quando nenhum construtor declarado explicitamente, um construtor vazio provido implicitamente. Por exemplo, se no tivssemos especificado um construtor na classe Vrtice, este sera o construtor default:

Vrtice() { } Os construtores no podem ser declarados com os modificadores: native, abstract, static, synchronized ou final.

Instancia
Uma instncia um objeto do tipo definido pela classe. Qualquer classe (desde que no seja abstract) pode ser instanciada como qualquer outro tipo de dado da linguagem Java. O trecho de cdigo abaixo exibe uma classe chamada Geometria criando um a instncia da classe Vrtice: public class Geometria { Vrtice v = new Vrtice(1.2, 3.5); ... } A diferena mais evidente entre a declarao de um objeto de uma classe e a declarao de um dado primitivo reside na necessidade de reservar memria para o objeto atravs do uso do operador new. Na verdade, esse operador realiza uma srie de tarefas: Reserva espao para a instncia da classe Vrtice, o qual deve ser suficiente para conter seu estado, isto , os valores dos seus campos. Realiza a chamada do mtodo construtor. Retorna uma referncia para o novo objeto (o qual atribudo varivel v). Outra importante diferena entre objetos e dados de tipo primitvo que estes so sempre referenciados por valor, enquanto aqueles so sempre referenciados por meio de sua referncia. Isto tem impacto significativo na maneira como os objetos so passados como parmetros na chamada de mtodos. Se o mtodo realizar internamente alguma modificao no objeto que foi passado, essa modificao refletir no objeto original. Isto no ocorre com a passagem de dados de tipo primitivo.

Compilando o cdigo fonte


Para criar o cdigo binrio, chamamos o compilador Java atravs da linha de comando, do seguinte modo:

javac AloPessoal.java Com isso, ser criado um arquivo binrio (desde que tudo corra bem) com mesmo nome do arquivo original, mas com sufixo .class no lugar de .java. No nosso caso, teramos um arquivo AloPessoal.class. Entre as (muitas) coisas que poderiam dar errado nesse momento, o cdigo fonte pode conter erros. Esse no dever ser o caso, se tiver digitado o programa exatamente como aparece acima. Se, porm, o compilador emitir mensagens de erro, ser preciso identificar as linhas que esto incorretas, corrig-las no editor, e chamar o compilador novamente. As linhas que contm algum tipo de incorreo so listadas pelo compilador juntamente com seu nmero, facilitando sua localizao no editor.

Tipo de Valor de Retorno:


O tipo de valor de retorno especificado por uma palavra chave ou nome de classe na declarao do mtodo, estabelecendo o valor que ele pode devolver.

// Classe de nmeros complexos class Complexo { double x, y; // parte real e complexo, respectivamnte

public double Re() { // retorna a parte real return x; } public double Im() { /retorna a parte imaginaria return y; } public Complexo Vezes(Complexo c) { Complexo resultado; resultado.x = x * c.x - y * c.y; resultado.y = x * c.y + y * c.x; return resultado; } public void print() {

System.out.println("(" + x + " + " + y + "i)"); } } public class Teste { public static void main(String args[]) { Complexo z, w; z.y = 2; z.x = 1;

System.out.print( "O valor de z "); z.print(); System.out.println( "A parte real de z = " + z.Re() ); System.out.println( "A parte imaginria de z = ", z.Im() ); System.out.print("O valor de z ao quadrado "); w = z.Vezes( z ); w.print(); } } Ao executar esse programa teramos a resposta:

O valor de z (1 + 2i) A parte real de z = 1 A parte imaginria de z = 2 O valor de z ao quardado (-3 + 4i) Um mtodo que retorna valor, isto , no declarado como void, deve conter a linha return ...; a qual especifica o valor a ser retornado. Por exemplo, return x; especifica que o valor da varivel x ser retornado.

You might also like