Métodos & Parâmetros e Objeto

JavaJavaBeginner
Pratique Agora

💡 Este tutorial foi traduzido do inglês com assistência de IA. Para ver o original, você pode mudar para a versão em inglês

Introdução

Neste laboratório, avançamos para métodos e objetos. A tarefa é aprender a definir um método com parâmetros. Objeto é um conceito muito importante em linguagens de Programação Orientada a Objetos (POO - OOP), portanto, ter um bom conhecimento dele será benéfico para você.

Este é um Lab Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para completar cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível iniciante com uma taxa de conclusão de 85.85%. Recebeu uma taxa de avaliações positivas de 98.63% dos estudantes.

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ProgrammingTechniquesGroup(["Programming Techniques"]) java/DataStructuresGroup -.-> java/arrays("Arrays") java/ProgrammingTechniquesGroup -.-> java/method_overloading("Method Overloading") java/ProgrammingTechniquesGroup -.-> java/recursion("Recursion") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("Classes/Objects") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/class_methods("Class Methods") subgraph Lab Skills java/arrays -.-> lab-178547{{"Métodos & Parâmetros e Objeto"}} java/method_overloading -.-> lab-178547{{"Métodos & Parâmetros e Objeto"}} java/recursion -.-> lab-178547{{"Métodos & Parâmetros e Objeto"}} java/classes_objects -.-> lab-178547{{"Métodos & Parâmetros e Objeto"}} java/class_methods -.-> lab-178547{{"Métodos & Parâmetros e Objeto"}} end

Métodos e Parâmetros

Em alguns casos, você precisa de algum código que possa ser reutilizado para resolver problemas semelhantes, como imprimir a idade e o nome de alguém. Para pessoas diferentes, nome e idade são diferentes. Essas duas variáveis podem ser passadas para um bloco de código como parâmetros. Aqui introduzimos o conceito de método, que executará a tarefa.

Exemplo:

Escreva o seguinte código no arquivo /home/labex/project/methodTest.java:

public class methodTest
{
    public static void main(String[] args)
    {
        // call our self-defined method
        printInfo("Mike", 18);
        // call our self-defined method
        System.out.println(fibonacci(10));
        System.out.println(fibonacciNormal(10));
    }
    // we define a class method to print personal info
    public static void printInfo(String name, int age){
        System.out.println("Hello " + name + ", your age is " + age);
    }
    // define a class method to compute fibonacci by recursion
    public static int fibonacci(int n){
        if(n<=2){
            return 1;
        }else{
            return fibonacci(n-1)+fibonacci(n-2);
        }
    }
    // define a class method to compute fibonacci by iteration loop
    public static int fibonacciNormal(int n){
        if(n<=2){
            return 1;
        }
        int n1=1,n2=1,sum=0;
        for(int i=0;i<n-2;i++){
            sum=n1+n2;
            n1=n2;
            n2=sum;
        }
        return sum;
    }
}

Saída:

Execute o arquivo methodTest.java usando os seguintes comandos:

javac /home/labex/project/methodTest.java
java methodTest

Veja a saída:

Hello Mike, your age is 18
55
55

No exemplo acima, escrevemos uma função chamada printInfo. Você pode nomeá-la como quiser. Existem dois parâmetros e o tipo de retorno é void, o que significa que nada será retornado. Você pode determinar o tipo de retorno da sua função como qualquer tipo que precisar, e o número e os tipos dos parâmetros podem ser quaisquer. Você pode definir seu método da seguinte forma:

Exemplo:

public/private static/final/{not necessary} RETURN_TYPE METHOD_NAME( LIST OF PARAMETERS ) {
    // STATEMENTS
}
public String getName(){}
public void setName(){}
public static void newInstance(){}
public final String msg(){}

Java fornece muitas funções que executam as operações mais comuns como métodos de biblioteca embutidos, como funções matemáticas. Essas funções são chamadas de métodos. Os métodos são invocados usando uma sintaxe semelhante às instruções de impressão que já vimos:

Exemplo:

double root = Math.sqrt(16.0);   // root = 4.0
double height = Math.sin(1.5);   // height = 0.9974949866040544

Objeto

Existem dois tipos de tipos em Java: tipos primitivos e tipos de objeto. Primitivos, como int e boolean, começam com letras minúsculas; tipos de objeto começam com letras maiúsculas. Essa distinção é útil porque nos lembra de algumas das diferenças entre eles:

Quando você declara uma variável primitiva, você obtém espaço de armazenamento para um valor primitivo. Quando você declara uma variável de objeto, você obtém um espaço para uma referência a um objeto. Para obter espaço para o próprio objeto, você deve usar o operador new.

Se você não inicializar uma variável primitiva, ela receberá um valor padrão que depende do seu tipo. Por exemplo, 0 para ints e false para booleans. O valor padrão para tipos de objeto é null, que indica que nenhum objeto está sendo referenciado pelas variáveis de referência.

Variáveis primitivas são bem isoladas no sentido de que não há nada que você possa fazer em um método que afete uma variável em outro método. Variáveis de objeto podem ser complicadas de trabalhar porque não são tão bem isoladas. Se você passar uma referência a um objeto como argumento, o método que você invoca pode modificar o objeto, caso em que você verá o efeito. Claro, isso pode ser bom, mas você precisa estar ciente disso.

Se passarmos variáveis primitivas para um método (passagem de parâmetro por valor), na verdade, copiamos os valores dos primitivos e usamos as cópias dentro do método. Todas as operações dentro do método funcionam nas cópias; e, fora do método, os valores das variáveis primitivas permanecem inalterados. Mas, se passarmos objetos não primitivos para um método (passagem de parâmetro por referência), passamos as variáveis de referência para o método. Todas as operações realmente usarão e/ou afetarão os objetos originais.

Exemplo:

Escreva o seguinte código no arquivo /home/labex/project/objectTest.java:

public class objectTest {
    public static void main(String[] args){
        // use new to create an Array object with two items
        int[] numbers = new int[2];
        // assign values to the array object
        numbers[0] = 1;
        numbers[1] = 2;
        // create primitive variables in this way
        int a = 1 , b = 2;

        // create a test object
        objectTest test = new objectTest();

        test.changeInt(a, b);
        System.out.println("Now a is " + a + ", b is " + b);

        test.changeArray(numbers);
        System.out.println("Now numbers contain:");

        for(int i : numbers){
            System.out.print(i + "\t");
        }
    }
    // define an object method, change int value
    public void changeInt(int a,int b){
        a = 2;
        b = 3;
        System.out.println("In changeInt method, a is " + a + ", b is " + b);
    }
    // define an object method, change array value
    public void changeArray(int[] number){
        for(int i = 0;i < number.length;i++){
            number[i] = number[i]+1;    // change value of array item increasing by 1
        }
        System.out.println("In changeArray method, numbers contain:");
        for(int i : number){
            System.out.print(i + "\t");
        }
        System.out.println();
    }
}

Saída:

Execute o arquivo objectTest.java usando o seguinte comando no terminal:

javac /home/labex/project/objectTest.java
java objectTest

Veja a saída:

In changeInt method, a is 2, b is 3
Now a is 1, b is 2
In changeArray method, numbers contain:
2    3
Now numbers contain:
2    3

Há uma outra diferença entre primitivos e tipos de objeto. Você não pode adicionar novos primitivos ao Java (a menos que você se candidate ao comitê de padrões), mas você pode criar novos tipos de objeto! Veremos como no próximo capítulo.

Resumo

Métodos são comuns em classes. Um método é um bloco de código que executa algumas operações especiais. Java fornece muitas classes embutidas que podemos usar diretamente. Existem duas maneiras de passar parâmetros para métodos: por valor e por referência. Seus efeitos são diferentes. No próximo laboratório, vamos apresentá-los a você. Esperamos que isso seja útil.

OSZAR »