Java – Phương thức

Java là ngôn ngữ hướng đối tượng. Các phương thức Java được định nghĩa trong class và là xương sống trong lập trình Java

Các phương thức Java là tập hợp các câu lệnh dùng để xử lý một vài tác vụ cụ thể và trả về phản hồi cho phía gọi. Các phương thức cho phép chúng ta viết code có thể tái sử dụng và chia chương trình thành các đơn vị công việc nhỏ hơn. Java giúp code trở nên sạch sẽ và dễ đọc hơn

Các thành phần

Hãy cùng xem các thành phần khác nhau của phương thức Java

  1. Truy cập Modifiers (Access Modifier): Phương thức Java truy cập các Modifier định nghĩa ai có thể gọi phương thức. Nó được sử dụng để hạn chế phạm vi của phương thức. Có 4 truy cập Modifier trong Java:  private, protected, public và default. Ngoài việc sử dụng truy cập Modifier, chúng ta cũng có thể chỉ định phương thức là static, trong trường hợp này, chúng ta không cần tạo một object để gọi phương thức. Chúng ta có thể gọi trực tiếp phương thức thông qua class. Các phương thức static là rất hữu dụng khi tạo các phương thức dùng chung.
  2. Kiểu trả về (Return Type): Các phương thức Java phải chỉ định kiểu trả về. Nó có thể là bất kỳ kiểu cơ bản nào (primitive type) hoặc một object. Nếu phương thức không trả về thì phải sử dụng void như kiểu trả về.
  3. Tên phương thức: Tất cả các phương thức trong Java phải có tên, nó được sử dụng để xác định phương thức. Chúng ta nên cung cấp mô tả cho tên phương thức để giúp người đọc có thể hình dung về phương thức dùng để làm gì thông qua tên
  4. Các tham số phương thức: Chúng ta có thể truyền các tham số cho phương thức, chúng được định nghĩa trong dấu ngoặc đơn sau tên phương thức. Thông thường, các câu lệnh phương thức hoạt động dựa vào các tham số này để đạt được nhiệm vụ của chúng
  5. Danh sách Exception: Thỉnh thoảng phương thức cần throw Exception. Chúng ta có thể định nghĩa sử dụng từ khoá throws. Nếu có nhiều Exception cần throws chúng ta có thể tách chúng sử dụng dấu phẩy.
  6. Body phương thức (Method body): Đây là nơi tất cả các hoạt động phương thức diễn ra. Body của phương thức chứa các câu lệnh để được thực hiện bởi phương thức và chúng nằm bên trong dấu ngoặc {}

Hãy cùng xem ví dụ bên dưới đây

Signature

Signature của phương thức Java bao gồm tên và các kiểu tham số trong thứ tự khai báo. Trong class có thể có nhiều phương thức, mỗi phương thức nên có signature khác nhau nếu không nó không biên dịch. Signature của phương thức được JRE sử dụng để xác định chính xác phương thức được gọi khi được gọi trong chương trình.

public void print(String s) {}
private static int print(String s) {}

Nếu chúng ta có cả 2 phương thức trên trong cùng một class thì nó sẽ không biên dịch bởi vì cả 2 phương thức có signature giống nhau.

public void print(String s, int i) {}
private static void print(int i, String s) {}

2 phương thức bên trên là khác nhau bởi vì thứ tự tham số không giống nhau

Gọi Java phương thức

Hãy cùng xem ví dụ tạo một phương thức main và gọi các phương thức khác

package com.javatest.util;

public class MathUtils {
  public int add (int x, int y) {
    return x + y;
  }
  public static void main(String args[]) throws Exception {
    MathUtils mu = new MathUtils();
    System.out.println(mu.add(5, 2));
    MathUtils.print("Static Method");
  }
  public static void print(String s) {}
}

Khi chúng ta chạy chương trình bên trên, phương thức main sẽ chạy và sẽ gọi các phương thức của MathUtils. Chú ý rằng nếu phương thức không phải là static, chúng ta cần tạo một object để gọi nó. Tuy nhiên nếu nó là static chúng ta chỉ việc đơn giản gọi nó sử dụng tên của phương thức.

Cũng chú ý rằng, phương thức println() được định nghĩa trong object System.out. Nó là phương thức của chuẩn thư viện Java trong đó các phương thức add()print() trong class MathUtils được gọi là phương thức do người dùng định nghĩa.

Ví dụ

Phương thức overloaded

Nếu một class có nhiều phương thức có tên giống nhau thì được gọi là các phương thức overloaded

public void print(String s) {
  System.out.println(s);
}

public void print(String s, int times) {
  for (int i=0; i< times; i++) {
    System.out.println(s);
  }
}

Phương thức Throwing Exception

Xem ví dụ sau, chúng ta sẽ thử Throwing Exception

public int divide(int x, int y) throws IllegalArgumentException {
  if(y==0) throw new IllegalArgumentException("Can't divide by 0");
    return x/y;
}

Phương thức đệ quy

Khi một phương thức gọi chính nó thì được gọi là phương thức đệ quy. Chúng ta nên cẩn thận khi định nghĩa một phương thức đệ quy bởi vì nó có thể bị lặp vô hạn nêu không có điều kiện sau cùng. Hãy cùng xem phương thức số nguyên tố dùng đệ quy bên dưới đây

public static long factorial(long n) {
  if (n == 1)
    return 1;
  else
    return (n * factorial(n - 1));
}

Phương thức gọi phương thức khác

Chúng ta có thể gọi phương thức khác từ một phương thức, hãy cùng định nghĩa lại các phương thức overloaded ở trên bằng cách sử dụng phương thức print(String s)

public void print(String s) {
  System.out.println(s);
}
public void print(String s, int times) {
  for (int i=0; i< times; i++) {
    print(s);
  }
}

Phương thức static của Java Interface

Java interface có thể có phương thức static từ Java 8 trở đi. Sau đây là một ví dụ nhỏ

public interface MyData {

  static boolean isNull(String str) {
    System.out.println("Interface Null Check");

    return str == null ? true : "".equals(str) ? true : false;
  }
}

Phương thức default của Java Interface

Từ Java 8 trở đi, Interface có phương thức default đầy đủ

public interface MyData {
  default void print(String str) {
    if (!isNull(str))
      System.out.println("MyData Print::" + str);
    }
}

Các phương thức getter setter

Các phương thức getter setter là các phương thức thông thường để truy cập và các nhập các thuộc tính của object. Các phương thức này tạo ra sự trừu tượng và chúng ta có thể hạn chế truy cập các thuộc tính khác nhau. Hầu hết các IDE đều hỗ trợ dễ dàng tạo các phương thức getter setter cho một thuộc tính.

private String name;

public String getName() {
  return name;
}

public void setName(String name) {
  this.name = name;
}

Các phương thức Abstract

Các class abstract và interface có thể khai báo các phương thức mà không cần body. Các class mà extend hoặc thực hiện implement sẽ có trách nhiệm cung cấp định nghĩa phương thức. Những  phương thức này được khai báo sử dụng từ khoá abstract trong class abstract. Các phương thức của Interface là abstract ẩn

public abstract class Person {
  public abstract void work();
}

public interface Shape {
  //interface methods are implicitly abstract and public
  void draw();
	
  double getArea();
}

 

You May Also Like

About the Author: Nguyen Dinh Thuc

Leave a Reply

Your email address will not be published.