Leganos.tr.gg
Hoş Geldiniz

Yapıcı Methotlar

YAPICI METHOTLAR

 

->capsulation:Kapsülleme
->restric:Kısıtlama
->entity:Varlık
->default:varsayılan
 
class Box{
        int width;
        int height;
 
*Bir sınıf içerisinde kullanıcı tanımlı bir yapıcı methot yoksa ve örnekte görüldüğü gibi varsayılan yapıcı çağırılmışsa derleyici sınıf içerisinde parametresiz bir yapıcı methot ekler bu yapıcı methot varsayılan yapıcı olarak adlandırılır.
 
*Varsayılan yapıcı methotlar sınıf içerisinde değer atanmamış alanlara tanımlandıkları türün başlangıç değerini atarlar.
----
Box b1=new Box();
Box b2=new Box();
----
class Box{
int width;
int height=34;
}
 
örnek:
----
Box b1=new Box();
Box b2=b1;
----
class Box{
int width;
int height=34;
}
 
*Referans türünden bir atamada hedef değişken kaynak değişken ile aynı nesneyi gösterir primity türler ile referance türleri farklı davranır.
 
KURAL:Varsayılan yapıcı tekrar tanımlanabilir.
 
*Bir java dosyasında paket tanımlaması en yukarda olamalıdır.
 
ÖRNEK2:İKİ TANE DEĞİŞKENE BİRİNE ERİŞİME İZİN VERİRKEN DİĞERİNE İZİN VERMEYEN PROGRAM?
 
 
package javaapplication2;
 
    class Box{
     private   int width;
      private  int height;
void setW(int w){
    this.width=width;
    
}
int getW(){
   return this.width;
}
 public Box(){
         width=13;
         height=35;
        // return olmaz
             System.out.println("nesne yaratıldı");
       
        }
    }
public class JavaApplication2 {
 
 
    public static void main(String[] args) {
        // TODO code application logic here
     int a;
        Box b1=new Box ();
        b1.setW(12);
        System.out.println(b1.getW());
 
        
        
    }
}

ERİŞİM BELİRTEÇLERİ

 
*Sınıf içerisinde tanımlanan bir üye elemana proje içerisinde nerelerden erişilebileceğini ayarlamak için erişim belirteçleri kullanılır. java da 4 tane erişim belirteci bulunmaktadır.bunlar default,public,pirivate,protected dir.
 
*Erişim belirteçleri sınıf içerisindeki üye elemanların başına iliştirilir.
 
*Bir üye elemana erişim belirteci yazılmassa üye elemanın erişm belirteci varsayılan olarak ayarlanır varsayılan erişim belirteci iliştirilmiş üye elemana tanımlandığı proje içerisinde her yerden erişilebilir.
 
Public iliştirilmiş üye elemana tanımlandığı proje içerisinden yada inpot edilerek istenilen her yerden erişilebilir.
 
pirivate iliştirilmiş üye elemana sadece tanımlandığı sınıf içerisinden erisilebilir.
 
ÖRNEK3:
class Box{
 int w;
 int h;
 private Box(){
     this.w=12;
     this.h=34;
}
 Box createInstance (){
     Box tmp=new Box();
     tmp.w=w;
     tmp.h=h;
     return tmp;
 }
}
 
NOT: Bır yapıcı methot private olarak tanımlanmışsa sınıf dışından bu yapıcı kullanılarak bir nesne yaratılamaz.
 
 Box createInstance (){
     Box tmp=new Box();
     tmp.w=w;
     tmp.h=h;
     return tmp;
 }
}

AÇIKLAMA:

1.)Yukarıda görüldüğü üzere methot geriye Box türünden bir nesne adresi döndürmektedir.
2.)Methodun adı createInstance.
3.)Methot dışarıdan iki tane int türünden değer alacak şekilde tanımlanmıştır w,h methodun paremetreleridir.
4.)Box sınıfından yeni bir nesne yaratılmıştır.
5.)Oluşturulan nesnenin alanlarına ilk değer ataması yapılmıştır.
6.)Return anahtarı ile geriye Box sınıfı türünden bir nesne adresi döndürüldü
 
NOT:Sınıf içerisinde alanlara nesne referansları üzerinden erişilebilir.
-----------------------------------------------------------------

Not: Üst  seviye sınıflar  top level class  privite ve protected belirteçlerine sahip olmaz.

  public static void main(String[] args) {

        rect r1 = new rect();

        System.out.println(r1.x);

        System.out.println(r1.y);

    }

    }

class rect{

    int x;

    int y;

    static int type;

    static int deg;

    static{

        //static initializer block

        //Statik başlatıcı bloğu

        type=32;

        deg=48;

    }   

    {

     //instance initializer block

        //sınıftan bir nesne yaratıldığında...

           x=34;

        y=48;

    }

  rect(){

        x=1;

    

    }

}

 

 

Not: Hem örnek başlatma bloğu hemde varsayılan yapıcı ile bir değer ataması yapılmış ise ilk önce başlatma bloğu daha sonra varsayılan yapıcı çağrılır.

Not: bit top level class (üst seviye sınıf ) static olamz.

 

    static rect(){

       

    }

}

Kural:   Java’da yapıcılar statik olmaz.

    static void m(){

       

    }

    void m2(){

       

    }

}

Kural:   Arasındaki fark m de sadece static türdeki değişkenlere ulaşabilirken, m2  de bütün türlere ulaşılabilir.

Not: Birinci kapsamda sadece statik üye elemanlara erişilebilirken  ikinci kapsamda tüm üye elemanlara erişilebilir.

 

 

 

 

 

Functtion overloading(Fonksyona aşırı yükleme):

    public static void main(String[] args) {

         //rect r1 = new rect();

        //System.out.println(r1.x);

       // System.out.println(r1.y);

      

        rect.topla(34, 42);

      

        rect.topla(54, 56);

    }

    }

class rect{

    int x;

    int y;

    static int type;

    static int deg;

 

    static int topla(int a){

    return a+1;

}

    static int topla(int a,int b){

        return a+b;

    }

    static  double topla (double a,int b){

        return a+b;

    }

}

Not:Aynı işlevi görevi farklı sayıda paremetreyle yapan methotlar oluşturulurken her bir methoda farklı bir isim vermek isim karmaşasına ortaya çıkarır.Java aynı isme sahip birden fazla methot tanımlamasına izin verir.geri dönüş değeri methot imzasına dahil edilmez.

      Aynı kapsamda aynı imzaya sahip birden fazla methot olamaz methotların iamzaları birbirinden farklı olmak zorundadır.Methot imzaları methot adı parametre sayısı türleri ve sırasıyla oluşturulur.

      Methot imzası methodun protatifi olarak adlandırılır.Aynı isme sahip birden fazla methot olduğu için bir methot çağırım ifadesinin aynı isme sahip methot bildirimlerinden hangisini çalıştıracağı methot bildirimi ile methot çağrımı arasındaki tam uyuma bakarak aranır.örneğin iki int türünden parametreyle tanımlanmış bir methot  iki int türünden argüman ile çağırıldığından tam uyum sağlanır.

        Parametreler ile argüman arasında gizli tür dönüşümü derleyici tarafından desteklenir(implicitly type conversion) parametre sırası önemlidir bunun yanında parametre adları önemli değildir.

CONSTRUCTOR OVERLOADİNG:

Diğer methotlarda olduğu gibi yapıcı methotlarda aşırı yüklenebilir.Aynı zamanda varsayılan yapıcı overload edilebilir yani tekrar tanımlanabilir.

class rect{

    int x;

    int y;

    rect(int x,int y){

        this.x=x;

        this.y=y;

    }

    rect(int x){

        this.x=y=x;

    }

    //identity:kimlik

    //identify:tanımlamak

}

 

 

 

 

Java Örnekleri - Stack Uygulanması:

Aşağıdaki örnekte giren elemanları ve pop () yığından elemanları almak için yöntem için kullanıcı tanımlı push () yöntemini oluşturarak yığını nasıl uygulanacağını gösterir.

ÖRNEK:

   public static void main(String[] args) {

     MyStack theStack = new MyStack(10);

      theStack.push(10);

      theStack.push(20);

      theStack.push(30);

      theStack.push(40);

      theStack.push(50);

      while (!theStack.isEmpty()) {

         long value = theStack.pop();

         System.out.print(value);

         System.out.print(" ");

      }

      System.out.println("");

     }

    }

 class MyStack {

   private int maxSize;

   private long[] stackArray;

   private int top;

   public MyStack(int s) {

      maxSize = s;

      stackArray = new long[maxSize];

      top = -1;

   }

   public void push(long j) {

      stackArray[++top] = j;

   }

   public long pop() {

      return stackArray[top--];

   }

   public long peek() {

      return stackArray[top];

   }

   public boolean isEmpty() {

      return (top == -1);

   }

   public boolean isFull() {

      return (top == maxSize - 1);

   }

 }

 

Yukarıdaki kod örneği aşağıdaki sonucu üretecektir.

50 40 30 20 10

 -------------------------------------------------
 

 Nested Class (İç İçe Sınıf)

 

Java programlama dili, başka bir sınıf içinde bir sınıf tanımlamak için izin verir. Böyle bir sınıf iç içe geçmiş bir sınıf olarak adlandırılır ve burada gösterilmiştir:

class OuterClass {

    ...

    class NestedClass {

        ...

    }

}

 

public static void main(String[] args) {

        System.out.println("");

        outerClass c1=new outerClass();

        System.out.println(c1.b);

    }

   

}

class outerClass{

   //nested class

    //1.static nested class

    //2.non-static nested class

    private int a=43;

    static int b =35;

    class inner{

        void f(){

            //a,b are access

        }

    }

    static class s_class{

       

    }

   

}

//Statik olmayan iç içe sınıflar (iç sınıflar)

Kurallar:

[Modifiler1] class A{

[Modifiler2]class B{

}

}

1.)Bir sınıfın içerisinde başka bir sınıf tanımlandığında içteki  sınıf nested olarak adlandırılır.Üstedeki sınıf üç şekilde ifade edilir .

*enclosing type

*Parent

*Top level class

2.)Modifiler 1 static olamazken Modifiler2 static olabilir.

3.)Nested class lar static ve non-static olmak üzere ikiye ayrılırlar.

4.)Static anahtarı iliştirilmiş iç sınıflar static nested class olarak adlandırılırlar.Static ahahtarı iliştirilmemiş iç sınflar inner neted class olarak adlandırılır.

5.)İnner sınıflar içinde bulundukları sınıfı tüm üye elemanlarına erişebilirken static nested class lar üst sınıfın sadece static üyelerine erişebilirler.

6.)İnner sınıflar static methotlara sahip olamazlar. Bunun yanında static iç sınıflar hem static hemde non static üye elemanlarına sahip olabilirlrer.

7.)İç sınıf public,private,protected veye defoult olabilirken dış sınıf sadece public olabilir.

 ORNEK:

   public static void main(String[] args) {

     outerClass.StaticnestedClass s=new outerClass.StaticnestedClass();

        System.out.println(s.a);

        }

    }        

class outerClass{

    private int a;

    int b;

    static void m(){

           StaticnestedClass a=new StaticnestedClass();

    }

    static int c;

    static class StaticnestedClass{

        int a;

      void m(){

         

      }

      StaticnestedClass (){

        a=34;

    }

    }

     class İnnerClass{

        

     }

}

Shadowing:

 

 

NOT: Parametreler alanaları alanlar üst sınıfın alanlarını gizleyebilir.

ÖNEMLİ PROGRAM:

  public static void main(String[] args) {

             ShadowTest st = new ShadowTest();     

             ShadowTest.FirstLevel fl = st.new FirstLevel();    

             fl.methodInFirstLevel(23);

        

     }

}

 class ShadowTest { 

    public int x = 0; 

    class FirstLevel { 

        public int x = 1; 

        void methodInFirstLevel(int x) {           

        System.out.println("x = " + x);

        System.out.println("x = " + x);

        System.out.println("this.x = " + this.x);             

        System.out.println("ShadowTest.this.x = " + ShadowTest.this.x);       

    }    

}

}

 

 

 

v  The following is the output of this example:

 

 x = 23

  this.x = 1

  ShadowTest.this.x = 0

 

NOT: İnner(iç) sınıftan nesne yaratmak için dış sınıf nesnesi kullanılır.

ÖRNEK 3:

   public static void main(String[] args) {

    array s1=new array(200);

    s1.set(100,0);

        System.out.println(s1.get(0));

    }

   

}

class array{

   

int str[];

 array(int size){

    str=new int [size];

}

void set (int val,int in){

    if(!(in>-1 && in<str.length))

        return;//alone:tek,kimsesiz,

        str[in]=val;

   

   }

    int get(int in){

    if (!(in>-1 && in<str.length))

        return -1;

        return str[in];

   

}

}

NOT: New Keyvord Üne Nesne Yaratmak İçin Kullanılan Yapıcı Methot Sürümü Etkinlestirilir.

NOT 2: S1 İsimli Değişken Array Sınıfından Yaratılan Nesnenin Adresini Saklayabilir.

NOT 3:Ornek Methotlar İçerisinde Kullanılan Örnek Değişken Ve Methotlar Gizli Olarak This Anahtarına Sahiptir.

ORNEK 4:

    public static void main(String[] args) {

     localClass c=new localClass();

     c.x=34;

     c.foo();

    }

   

}

class localClass{

    int x;

   static int y;

 

   void foo(){

       class inside{

           int inside_x;

           inside(int inside_x){

              this.inside_x=inside_x;

           }

           int ff(){

               return x+y;

           }

       }

       inside in1=new inside(10);

       System.out.println(in1.ff());

   }

         

}

ÇIKTI:

34

NOT: Local Sınıflar Birer İnner Sınıf Yani İç Sınıftır.

NOT 2: Local Sınıflar Methotlar İçerisinde Döngü Bloklarıdayada İlk Cümleciklerinde Tanımlanabilir.

NOT 3: Local sınıflar sadece tanımlandıkları blokda kullanılabilir.sınıf dışından erişilemez

NOT 4:Local sınıf içerisinden üst sınıfın değişkenlerine ulaşılabilir.

ÖDEV:LOCAL CLASS JAVA ARAŞTIR.

KELİMELER:

·         Ceas=sonlandırmak,bitirmek

·         Apparent,clear,expilicit bunların üçüde açık görür.

·         Ambigious,unclear,implicit belirsiz,üstü kapalı

·         Distinct=belirgin

Example1

Why do I need to declare a local variable as final if my Inner class defined within the method needs to use it ?

class MyOuter2 {

 

private String x = "Outer2";

 

void doStuff() {

    final String y = "Hello World";

 

    final class MyInner {

 

        String z = y;

 

        public void seeOuter() {

            System.out.println("Outer x is "+x);

            System.out.println("Local variable is "+y);

            MyInner mi = new MyInner();

            mi.seeOuter();

        }

    }

}

}

 

Why the String y needs to be a final constant ? How does it impact ?

The answer is the two are in different scopes. So that variable could change before the inner class accesses it. Making it final prevents that.

 FİNAL ANAHTARI VE DEĞİŞKENLER:

    public static void main(String[] args) {

     LocalClass l=new LocalClass();

     l.m();

    }

   

}

class LocalClass {

 final int num;

 final static int n2=45;

 LocalClass (){

 num=45;

  }

  void m(){

  final int c;

  c=34;

  System.out.println(c);

   }

 }

KURAL1;Final anahtarı hem insance hem de class değişkenleri için kullanılabilir.Staticdeğişkenlerde final anahtarı iliştirilirse bu değişkene ilk değer ataması zordur

KURAL2;Final anahtarı iliştirilmiş insance variable de ilk değer ataması ya tanımlandığı satırda yada yapıcı methot içerisinde yapılabilir.

KURAL3;Local değişkenler final anahtarı ile sabit yapabilirler bu tip değişkenlere ilk değer ataması dışında başka bir atama yapılamaz.

KURAL4;Final anahtarı sınıf ve arayüzlerde kullanılabilir.

CONSTANT:

class LocalClass {

   final int a;

   public  LocalClass(){

    a=56;

}

 class abc{

    }

}

->Bir üye değişken hem static hem fınal anahtarı aldığında sabit olarak tanımlanmış olur ilgili değişken sınıfın yaşam süresi boyunca sadece bir defa yaratılır her bir nesne örneği için tekrar yaratılmaz.

INNER CLASS DA NESNE YARATMA ÖRNEĞİ:

   public static void main(String[] args) {

 LocalClass outer =new LocalClass();

 LocalClass.inner_Box ınner=outer.new inner_Box(2,3);

 LocalClass.static_Box a=new LocalClass.static_Box();

 }

 

}

class LocalClass {

   int x1;

   static int x2;

  public  LocalClass(){

    }

    class inner_Box{

        int x;

        int y =x1;

        inner_Box (int x,int y){

            this.x=x;

            this.y=y;

            }

        int fied (){

            return x*y;

        }

              

    }

       static class static_Box{

         int x;

         static int y;

         public static_Box(){

           //  x1=43;

             x2=23;

         }

        }

        }

CAPTRUE VARİABLE

Local bir değişkene local bir sınıfta ulaşıldığında ilgili değişken captrue yani yakalanmış olur.

DEĞİŞKEN SAYIDA ARGUMAN ALAN PARAMETRE:

-> Statik bir methot içerisinden sadece sınıfın static üyelerine erişebilir.

KELİMELER:

Accumulate,gather,addition

Arbitrary:rastgeleàrandom

Optinal:isteğe bağlı

    public static void main(String[] args) {

     //addition()

     //addition(2,3)

     //addition(2,3,1254)

     //addition(2)... OK

     //addition(1,2,3,4,5)

    

     //taype ... name --> type name []

     //equal,corresponding:denk

    

    }

    static int addition(int b,int a,int...c){

       

     //unclear,ambigious,implict      

    }

}

ÖRNEK 2:DEĞİŞKEN SAYIDA ARGÜMAN ALAN PRAMETRELERDE TOPLAMA

    public static void main(String[] args) {

     //int b []={1,2,3,4,5};

     addition(2,3,4,5);

       

    }

   

    static int addition(int...a){

        int tpm = 0;

        for(int c:a){

   tpm+=c;

    }

        System.out.println(tpm);

    } 

}

 

 

NOT:  Derleyiciler variable parametre metotlarının imzalarını oluştururken  ikinci önceliğe alır.Methot imzaları oluşturulurken değişken sayıda prametreler ikinci olarak dikkate alınır İnt türünden tek argümanlı bir  çağırım ifadesi yine int türünden tek parametreyle bildirilmiş Bir methot bildirimini işletir.

KOMUT SATIRI ARGÜMANLARI:

->Class uzantılı dosyalar kaynak dosyanın byte kode halini içerir.

 àWindows komut satırından bir java dosyasının belirlenmesi ve çalışması

Not: boxing and autoboxing sınavda çıkar.

İNTERFACE(ARAYÜZ)

àİmplement=Uygulamak

àAbstract=Soyud

àİnstantiated=Somut

Referance türü oluşturmak için kurulan kurallar kümesidir. İnterface denklarasyonları yeni bir referance türü oluşturur.Bir interface bir yada daha fazla sınıfa uygulanabilir yada bir interfaceden referance türünden bir değişken tanımlanabilir.  İnterface dediğimiz yapı sınıflara uygulanmak için yada referance oluşturmak için yapılan bir türdür.İnteface İçerisinde Tanımlanan Methotların Gövdesi Olmaz Yani Body Olmaz.

 

NOT:  İnterface tanımlamaları dosya kapsamında yada bir sınıf kapsamında olabilir. Sınıfın üyesi olan interfacelere sınıf adıyla ulaşılır.

 

interface mt {

    void start();

    void stop(int a,int b);

   

}

class taxi imlements mt{

    public void start(){

        anahtar();

    }

}

 

class xx implements mt{

    public void start(){

        parmakizi();

    }

}

 

 

Daha önce söylendiği gibi interface tanımlaması soyut bir kural kümesi oluşturur.Bir interface nin bir sınıfa uygulanması interface içerisindeki kuralların sınıf tarafından uygulanacağanı bildirir.Bir interfacenin bir sınıfta uygulanması için implements anahtarı kullanılır.Bir sınıfa birden fazla arayüz uygulanabilir.bir sınıfa birden fazla interface uygulandığında interface adları birbirinden virgül ile ayrılmalıdır.Bir interface bir sınıfın üyesi yada direk dosya kapsamında tanımlanabilir.    Eyer bir kaynak dosya içerisinde sadece bir interface tanımlaması varsa bu interface public olarak işaretlenebilir bir kaynak dosya içerisinde sadece tek bir interface public olarak işaretlanebilir.

 


 

İnterface nin Üye Elemanları

1.abstract metotlar(gövdesiz&soyut)

2.constant’lar (sabitler)àstatic methotlar

àİntefaceler birer constant dır.İnterface ler somutlaştırılamazlar yani interfacelerden nesne yaratılamaz ama değişken tanımlanabilir.

  interface abc {

 }

 abc a =new abc();

Örnek: a değişkenine atanabilecek değer ?

Kural: İnterface içerisindeki üye elemanları ()abstracter,default,static methotlar varsayılan olarak publicdir pirivate veya protected olarak işaretlenemezler.

Örnek:

    public static void main(String[] args) {

        System.out.println(args.length);

       }

    }

 interface box {

    int f1();

    int f2(int a,float b);

    void pirint();

           }

abstract class goo  implements box {

   public void pirint(){

       System.out.println("sddd");

       }

   public int f1(){

       return 5;

   }

   public int f2 (int a,float b){

       System.out.println("sddd");

       return 5;

   }

   },

 

Not:Abstracter methot bildiriminin önüne static anahtarı iliştirilemez.Abstracter methotlar gizli olarak abstracter keyword üne sahiptir.

Not: İnterface içerisindeki sabitler üstü kapalı olarak static final public anahtarlarına sahiptirler dolayısıyla bunları tekrar tanımlamak gereksiz olur.

ÖRNEĞİN DEVAMI

  public static void main(String[] args) {

        goo g1=new goo();

        box f;

        f=g1;

        System.out.println(goo.cs);

       

    }

   

}

 interface box {

     int cs =33;

   public abstract int f1();

    int f2(int a,float b);

    void pirint();

          

}

class goo  implements box {

   public void pirint(){

       System.out.println("sddd");

       return;

   }

   public int f1(){

       System.out.println("sddd");

       return 5;

   }

   public int f2 (int a,float b){

       System.out.println("sddd");

       return 5;

   }

  

}

Not:Bir interface ve bu interface nin uygulandığı bir sınıf hayal edelim interface nin uygulandığı bir değişkende sınıfın yaratıldığı nesne referansı atanabilir.

interface mt{

    int a=b;

    int b=a;

    int c=c+1;

}                                                                                                                                           

Not: Derleme zamanında değeri hesaplanabilen deyimler complier time expeleisıon olarak adlandırılır.

 

 

Örnek

    public static void main(String[] args) {

      MammalInt m = new MammalInt();

      m.eat();

      m.travel();

    }

   

}

 class MammalInt implements Animal{

 

   public void eat(){

      System.out.println("Mammal eats");

   }

 public void travel(){

      System.out.println("Mammal travels");

   }

 

   public int noOfLegs(){

      return 0;

   }

 }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      public interface Animal {

     public void eat();

   public void travel();

}

Not: İnterface anahtarının önüne sadece public ve abstract anahtarları iliştirilebilir.     

UML CLASS                                                                                                                            

Nesne yönelimli tasarım ve analizde kullanılan sınıfları görsel olarak anlaşılır bil hale getiren grafikler uml diyagramları olarak adlandırılır  

   

ÖRNEK :

  public static void main(String[] args) {

      mix m1;                               

      m1=new x1();//referans numarasını saklar

      m1=new x2();//referans numarasınısaklar

      //x1 ve x2 nin ortak özelliği yukarıda verilmiştir.

       

       

    }

   

}

interface mix{

 

    void stop();

   

}

 class x1 implements mix{

 public void stop(){

   

 }

}

class x2 implements mix{

    public void stop(){

       

    }

}

 

X1 ve x2 sınıfları mix arayüzünü  uyguladıklrında m1 değişkenine x1 ve x2 sınıflarından yaratılan nesne referansları atanabilir.                                                                                                                         
 

Haftanın Müziği

Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol