pungkasan lan tembung kunci Jawa liyane - 1

"Halo, Amigo!"

"Hai, Bilaabo!"

"Dina iki aku arep nyritakake sawetara tembung kunci ing Jawa. Nanging aku bakal miwiti karo sing paling menarik: tembung kunci final. "

"Sampeyan bisa nggunakake final tembung kunci nalika ngumumake variabel, metode, utawa kelas."

"Lan kenapa kita kudu final?"

"Iku cukup prasaja. Yen kita menehi tandha variabel minangka final, banjur dadi ora bisa diganti:"

final int i = 5;
i++; //Compilation error: the value of i cannot be changed.

"Aku weruh."

"Yen kita menehi tandha cara minangka final, banjur overriding metode ing kelas asale dilarang:"

class Cat
{
 public final String getName()
 {
  return "cat";
 }
}

class Tiger extends Cat
{
 public String getName() //Compilation error: overriding the getName()
 {
  return "tiger";
 }
}

"Aku ngerti. Nanging kenapa sampeyan kudu nglarang overriding cara?"

"Inggih, minangka conto, umpamane programmer wis nulis akeh kode penting ing sawijining metode lan pengin njamin yen kabeh kelas sing marisi kelas dheweke bakal duwe prilaku sing ditemtokake."

"Lan pungkasane, panggunaan kaping telu."

"Yen kita menehi tandha kelas kanthi tembung kunci final, mula ora bisa diwarisake."

public final class Cat
{
 public String getName()
 {
  return "cat";
 }
}

class Tiger extends Cat //Compilation error: the Cat class cannot be
{
 public String getName()
 {
  return "tiger";
 }
}

"Lan kenapa kita bakal nyegah kelas supaya ora diwarisake?"

"Sampeyan kudu ngerti manawa kita ora nyegah warisan dadi ngganggu, nanging kanggo keamanan lan integritas kode. Yen warisan kelas ora dilarang, mula implikasi kasebut diidini. Lan kode sing ditulis dening kelas kasebut. desainer bakal bisa digunakake kanthi bener kanggo obyek saka kelas iki uga obyek saka sembarang kelas asale."

"Nanging yen pangembang nyadari yen owah-owahan cilik ing kelase bakal nyebabake kabeh bisa mandheg kaya sing dikarepake, mula luwih becik nglarang warisan."

"Contone, kelas String diumumake minangka final, kaya kabeh jinis primitif: Integer, Boolean, Double, Character ..."

"Ah, entuk. Kelas String digawe minangka kelas sing ora bisa diganti lan yen dumadakan bisa diganti, mula akeh sing bakal mandheg."

"Inggih, meh. Ayo dadi kaya mangkene: kabeh bakal bisa kaya sadurunge, nanging kadhangkala ana kesalahan sing bakal angel ditemokake lan dimengerteni. Dadi, ing sawetara kasus, warisan kelas utawa metode dudu dosa. nanging nglarang tegese luwih sithik kesalahan sing bakal ditindakake mengko."

"Endi maneh sampeyan bisa nggunakake final?"

"Sampeyan bisa nggunakake final sadurunge parameter fungsi, lan sadurunge variabel ing cara. Punika conto:"

public void setName(final String name)
{
 final String displayName = "Mr."+ name;
  …
 this.name = displayName;
}

"Lan apa gunane?"

"Inggih, ana loro. Kaping pisanan, kita ngumumake variabel minangka final yen kita pengin ngandhani pangembang liyane yen nilai iki minangka konstanta tartamtu, lan ora mung variabel."

Contone, kita pengin ngetung pajak dodolan adhedhasar rega:

public int getPriceNDS()
{
 final int NDS = 20;
 return this.price * NDS / 200;
}

"Lan kapindho, kita butuh jinis variabel iki nalika nulis kelas batin lokal utawa anonim. Aku bakal ngandhani sampeyan babagan jinis kelas kasebut. Nanging ora saiki."

"Oke, nganti saiki ora ana sing rumit banget."

"Elinga yen mung variabel sing ora bisa diganti, dudu obyek sing bisa dirujuk. Obyek isih bisa diganti."

"Aku pancene mung arep takon bab iku. Lan ora ana cara kanggo nggawe obyek unchangeable?"

"Ora, kajaba sampeyan nulis kelas sing ora bisa diganti."

"Elinga yen amarga nilai variabel pungkasan ora bisa diganti, sampeyan kudu langsung nemtokake nilai awal."

Kode iki bakal kompilasi Kode iki ora bakal dikompilasi
class Home
{
 private final int width = 200;
 private final int height = 100;

 public Home()
 {
 }
}
class Home
{
 private final int width;
 private final int height;

 public Home()
 {
 }
}

"Nanging, sing ngandika, Jawa ngijini sampeyan tundha initialization saka variabel final kelas nganti konstruktor."

Kode iki bakal kompilasi Kode iki ora bakal dikompilasi
class Home
{
 private final int width = 200;
 private final int height;

 public Home()
 {
  height = 100;
 }
}
class Home
{
 private final int width;
 private final int height;

 public Home()
 {
  height = 100;
 }
}

"Kajaba iku, konstruktor beda bisa initialize variabel final karo nilai beda. Iki cukup trep: "

Kode iki bakal kompilasi
class Home
{
 private final int width;
 private final int height;

 public Home()
 {
  height = 100;
  width = 200;
 }

 public Home(int width)
 {
  this.height = 300;
  this.width = width;
 }

 public Home(int width, int height)
 {
  this.height = height;
  this.width = width;
 }
}

"Iki topik sing menarik banget, lan pancen kabeh ana gunane. Matur nuwun, Bilaabo!"