Subprogram atau biasa disebut Function(fungsi) dan Method (dalam Java) adalah suatu blok bagian dari program yang digunakan untuk suatu pekerjaan tertentu dan letaknya dipisahkan dari bagian program yang menggunakannya. Tujuan deklarasi fungsi pada program adalah agar program menjadi lebih tersruktur, sehingga mudah untuk dipahami, mencari kesalahan code dan dikembangkan lebih lanjut dan juga keuntungan lainnya adalah dapat mengefisiensi penulisan code jika sekumpulan tugas tersebut akan dipakai berulang kali.
Fungsi memerlukan masukan yang dinamakan argumen atau parameter, yang akan diolah oleh fungsi. Hasil akhir dari sebuah fungsi adalah sebuah nilai balikan berupa nilai kelauaran fungsi. Suatu fungsi secara umum terdiri dari 2 buah bagian yaitu definis fungsi dan tubuh fungsi. Definisi fungsi berisi dengan tipe dari fungsi, nama fungsi dan argumen – argumennya jika ada. Tubuh fungsi berisi statement – statement yang akan melakukan tugas yang diberikan kepada fungsi yang bersangkutan yang ditulis di dalam tanda kurung kurawal.
Syntax secara umum dari function/method :
Dalam contoh tersebut menggunakan tipe void karena tidak mengembalikan nilai (return value) dan juga belum ada parameter karena tidak membutuhkan inputan pada function/method tersebut.
Jika method tersebut membutuhkan inputan, maka harus ada parameter yang dilemparkan ke formal parameter. Ada beberapa model parameter passing diantaranya pass by value dan pass by reference. Pass by value adalah metode melewatkan parameter berdasarkan nilainya. Disini nilai parameter aktual akan dilewatkan pada saat pemanggilan method akan disalin ke parameter formal sehingga perubahan nilai pada method, tidak akan berpengaruh terhadap argument yang digunakan untuk memanggil method tersebut. Dengan kata lain, perubahan nilai tersebut hana akan dikenali pada method yang bersangkutan saja. Sedangkan pass by reference melewatkan parameter berdasarkan referensinya (alamat dalam memory). Pada cara ini, referensi dari argumen (bukan nilai argumen) akan dilewatkan kedalam parameter formal, bukan disalin. Dengan demikian, nilai yang digunakan di dalam method akan sama dengan nilai yang dalam alamat tersebut. Melalui cara ini setiap perubahan nilai yang terjadi pada method juga akan berpengaruh terhadap argumen yang digunakan untuk memanggilnya.
Di dalam bahasa pemrograman Java tidak dapat secara eksplisit melewatkan parameter berdasarkan nilai (value) ataupun referensinya. Hal tersebut terjadi karena setiap internal Java akan melakukan hal tersebut secara implisit/otomatis. Pada dasarnya Java sama sekali tidak menggunakan pass by reference sehingga hanya memakai konsep pass by value. Namun teori dasar Java secara implisit untuk menghemat memori akan mereference alamat yang sama dari satu obyek (instance) yang sama meskipun ditunjuk oleh variabel yang berbeda. Sehingga bisa dikatakan apabila parameter bertipe sederhana (seperti int, char, bolean, dsb), maka java akan menggunakan metode pass by value dan apabila parameter berupa objek, maka bisa dikatakan java menggunakan metode pass by reference.
Berikut contoh pass by value :
Berikut contoh pass by reference :
Overloaded Subprograms
Overloaded subprogram adalah subprogram yang mempunyai nama sama dengan subprogram lain dalam ruang lingkup yang sama. Dalam Java memperbolehkan programmer untuk membuat multiple version dari subprogram dengan nama yang sama.