Menü
Bedava
giriş
ana  /  Tavsiye / Erişim seviyesi değiştiricileri. Erişim Değiştiricileri

Erişim seviyesi değiştiricileri. Erişim Değiştiricileri

Burada, hemen hemen tüm tüm olguları erişim değiştiricileri uygulayarak düşünmeye çalışacağız. İstisna, iç içe geçmiş için sadece kullanımları olacaktır. İç içe geçmiş.) ve iç ( ) Sınıflar, ayrıca arayüzler için, henüz düşünmediklerimiz gibi.

Sınıflar ve paketler, erişim değiştiricileri ile birlikte kullanılır. Uygulama ayrıntılarını basit bir arayüzle gizlemek yoluyla kapsülleme görevi görür.

Erişim değiştiricileri hem sınıflara hem de üyelerine - alanlar ve yöntemlere uygulanabilir. Toplamda, dört erişim değiştiricisi var ve burada kısa bir açıklama getireceğiz, daha sonra her birini ayrıntılı olarak düşünün.

  • halka açık - Herhangi bir bileşen olarak bildirilen herhangi bir bileşen halka açık, Herhangi bir koddan temin edilebilir
  • korumalı. - Paket içindeki bileşene ve mirasçıların sınıfları için erişim sağlar
  • Özel - Sınıf içindeki bileşene erişim sağlar
  • varsayılan (anahtar kelime yok) - paket içindeki bileşenlere erişim sağlar

Mirasçılar sınıfları, herhangi bir sınıftan miras kalan sınıflardır. Kalıtım, henüz okumadık.

Sınıflara erişim

Varsayılan üst düzey sınıflar, tanımlandıkları pakette mevcuttur.. Ancak, üst düzey sınıf olarak bildirilirse halka açık, Her yerde (veya paketin mevcut olduğu her yerde) mevcuttur. Bu onayı üst düzey sınıflarla sınırladık, çünkü sınıflar diğer sınıfların üyeleri olarak ilan edilebilir. Bu iç sınıflar sınıfın üyesi olduğundan, sınıf üyelerine erişimin izlenmesi için kurallara tabidirler..

Sınıf üyelerine erişim

Sınıf üyeleri her zaman vücut gövdesinde bulunur. Varsayılan Sınıf üyeleri ayrıca sınıfın tanımlandığı bir pakette de mevcuttur..

Kamuoyu değiştirici

Gömülü olmayan bir sınıf için, olası iki erişim seviyesinden sadece biri belirtilebilir: belirtilen varsayılan ve halka açık . Sınıf olarak ilan edildiğinde halka açık, tek olmalı halka açık Dosyada bildirilen sınıf ve dosya adının sınıf adıyla eşleşmesi gerekir..

Nasıl halka açık Sınıflar, alanlar, yöntemler ve tasarımcılar ilan edilebilir.

Değiştirici korumalı.

Bu değiştiriciyi sınıfların mirası konusunda ayrıntılı olarak düşüneceğiz. Kalıtım kullanılmazsa, bu değiştirici, varsayılan değiştiricinin yanı sıra çalışır.

Kısaca olabilecek tek şey, bileşenlerin ilan ettiğini söyledi. korumalı.erişim olacak herhangi bir paketten herhangi bir çocuk sınıfı Veya aynı paketten gelen herhangi bir sınıf.

Nasıl korumalı. Alanlar, yöntemler, tasarımcılar, yatırım sınıfları ve iç içe geçmiş arayüzler açıklanabilir.

korumalı. .

Özel değiştirici

Erişim değiştiricisini sınırlamak en zordur. Elementler olarak açıklandı Özel Sadece aynı sınıfta ve sınıfın dışındaki herhangi biri içinde bulunur.

Nasıl Özel Alanlar, yöntemler, tasarımcılar, gömülü sınıflar ve iç içe dönüşler ilan edilebilir.

Sınıflar ve üst seviye arayüzleri olarak ilan edilemez Özel .

Temel olarak, erişim değiştiricileri basit bir konudur, ancak buna geri döneceğiz. Sadece tanıdık iken. Ve şimdi küçük bir uygulama ...

Pro.java.pkg002 paketine ait olan Pro.java.PKG002 paketine ait olan MOD02.java, Defmod.java, Promod.java ve Prvmod.java, Pro.java.PKG003 paketine ait sınıf pubmod.java'yı yarattım. Sonra, bu sınıfların ve programın sonucunu basitçe ekran görüntülerini getireceğim:

Hey! Bugünün dersinde, konseptiyle tanışacağız " erişim Değiştiricileri"Ve onlarla çalışma örneklerini düşünün. "Tanıdık" kelimesi oldukça doğru olmayacak olsa da: Çoğu ile önceki derslere zaten aşinasınız. Sadece durumunda, ana şeyi hafızada ferahlatır. Erişim Değiştiricileri - Bunlar çoğu zaman kodunuzun farklı bölümlerine erişim seviyesini düzenleyen anahtar kelimelerdir. Neden "en sık"? Çünkü bunlardan biri varsayılan olarak ayarlanır ve bir anahtar kelime ile gösterilmez :) Toplamda, Java'nın dört erişim değiştiricisi var. Onları katıdan en "yumuşak" için sırayla listeliyoruz:

  • Özel;
  • korumalı;
  • varsayılan (paket görünür);
  • halka açık.
Hadi her birine bakalım, ne zaman kullanışlı gelebileceklerini tanımlayacağız ve örnekler vereceğiz :)

Özel değiştirici


Özel en katı erişim değiştiricisidir. Bir sınıfın sınırlarının verilerinin görünürlüğünü ve yöntemlerini sınırlar. Bu değiştirici, size gelen ve ayar makineleri hakkındaki derslerden bilinmektedir. Bu örneği hatırlıyor musun? Kamu sınıfı kedi (halka açık string adı; kamu int yaşı; kamu intle ağırlığı; kamu kedi (string adı, int yaş, int ağırlık) (bu. İsim \u003d İsim; bu. Yaş \u003d yaş; bu. Ağırlık \u003d ağırlık;) kamu kedi () () Halka açık void saymeow () (sistem. Dışarı. Println ("miyav!");)) Public Sınıfı Ana (Dize Args) (Cat Cat \u003d New Cat (); Kedi. Adı \u003d ""; Kedi. Yaş \u003d - 1000; kedi. Ağırlık \u003d 0;)) Daha önce makalelerden birinde bunu düşündük. Burada ciddi bir hata yaptık: Verilerimizi keşfetti, sonuç, meslektaşlar programcılarının doğrudan sınıf alanlarına erişti ve değerlerini değiştirdikleri sonucu. Dahası, bu değerler kontrolsüz olarak atandı, sonuçta programımızda -1000 yılı olan bir kedi oluşturabilir, adı "" ve 0 ağırlığında bir kedi oluşturabilir, bu sorunu çözmek için kullandık. getter ve SettersAyrıca özel değiştirici kullanarak sınırlı veri erişimi. Kamu sınıfı kedi (özel string adı; özel int yaş; özel int ağırlık; kamu kedi (string adı, int yaş, int ağırlık) (bu. İsim \u003d İsim; bu. Yaş \u003d yaş; bu. Ağırlık \u003d ağırlık;) kamu kedi () () () () Halka açık void saymeow () (sistem. Dışarı. Println ("miyav!");) Genel dize getName () (iade adı;) Genel boşluk setname (string adı) (bu. İsim \u003d ismi;) kamu int Getage () (dönüş yaşı;) Genel boşluk kuruluşu (int yaş) (bu. yaş \u003d yaş;) Public Int Getweight () (iade ağırlığı;) Genel boşluk seti (int ağırlığı) (bu. Ağırlık \u003d ağırlık;)), Alanlara erişimi kısıtlamak ve düzenleyicilerin uygulanması, gerçek işlerde özel kullanımın en yaygın örneğidir. Yani programdaki kapsüllemenin uygulanması, bu değiştiricinin temel amacıdır. Bu, yalnızca tarlalara değil, bu arada geçerlidir. Programınızda, çok karmaşık bir işlevselliği uygulayan bir yöntem olduğunu hayal edin. Bir örnek için buna gelmek için ... diyelim ki, RAADDATAFROMCOLIDER () yöntemi, verilerle giriş adresini alır, bayt biçimindeki büyük bir hadron çarpıştırıcısından veri okur, bu verileri metne dönüştürür, dosyaya yazar ve yazdırır. Yöntemin açıklaması bile acil görünüyor, kod hakkında ne söyleyeceğiniz şey :) Kodun okunabilirliğini artırmak için, yöntemin karmaşık mantığını bir yerde bir yerde yazmak iyi olur, ancak aksine - Bireysel yöntemlere işlevsellik. Örneğin, Readytedata () yöntemi verileri okumaktan sorumludur, ConvertyTestOsymbols (), ConvertyTestOsymbols (), ÇALIŞTIRMADAN SAVAŞI, SAVETOFILE () elde edilen metni dosyaya kaydeder ve PrintColliderdata () - Dosyamızı verilerle yazdırır. ReadDataFromColider () yöntemi, çok daha basit olacaktır: kamu sınıfı collowerutil (Palk Void ReadDataFromColider (Path Pathtodata) (BYTE Colliderdata \u003d Readytedata (PathTodata); Dize TextData \u003d ConvertyTestosymbols (Colliderdata); Dosya FileWithData \u003d SaveToFile (TextData); PrintColiderData ( filewithdata);) kamu bayt readytedata (pathtodata) ( // bayt cinsinden verileri okur ) Public String ConvertyTestosymbols (Byte Colliderdatainbytes) () Genel Dosya SavetOfile (String Colliderdata) () Genel Void PrintColiderData (Dosya FileWithcolliderdata) ( // dosyadan veri yazdırır ) Ancak, arayüzlerdeki derslerden hatırlandıkça, kullanıcı yalnızca son arayüze erişir. Ve 4 yöntemimiz bunun bir parçası değil. Onlar yardımcı: Kodun okunabilirliğini arttırmak için onları yarattık ve bir yöntemle dört farklı görev yapmayın. Kullanıcıya bu yöntemlere erişmeniz gerekmez. Çarpışma ile çalışırken kullanıcı ConvertByTestorymbols () yöntemine erişim görürse, büyük olasılıkla ne tür bir yöntem gerekli olduğunu anlamıyor. Hangi baytlar dönüştürülür? Nereden geldiler? Neden onları metne dönüştürüyor? Bu yöntemde gerçekleştirilen mantık, kullanıcı arayüzünün bir parçası değildir. Sadece ReadDataFromColider () yöntemi, arayüzün bir parçasıdır. Bu dört "iç" yöntemle ne yapmalı? Sağ! Özel değiştiriciye erişimi sınırlayın. Böylece, her birinin mantığının ayrı ayrı ihtiyaç duyulduğunu, sınıfın içindeki işlerini sınıfın içinde sakin bir şekilde yerine getirebileceklerdir. kamu sınıfı collowerutil (genel void readdatafromcolider (Path Pathtodata) (Byte CollowerData \u003d Readytedata (PathTodata); Dize TextData \u003d ConvertyTestosymbols (Colliderdata); Dosya FileWithdata \u003d SavetOfile (TextData); Özel Bayt Readytedata (Path Pathtodata) (Path Pathtodata) // bayt cinsinden verileri okur ) Özel String ConvertyTestosymbols (Byte Colliderdatainbytes) ( // baytları karakterlere dönüştür ) Özel dosya savetofile (string colliderdata) ( // dosyaya veri okuma kaydetti ) Özel void printcoliderdata (dosya filewithcolliderdata) ( // dosyadan veri yazdırır } }

Değiştirici korumalı.

Erişim değiştiricisinin bir sonraki darlığı korunur.
Korunan erişim değiştiricisi tarafından belirtilen alanlar ve yöntemler görünür:
  • aynı pakette bulunan tüm sınıflarda;
  • sınıfımızın mirasçılarının tüm karakterlerinde.
Ne zaman gerekebileceğini hayal etmek zor. Sürpriz olmayın: Korunan uygulamalar özelden çok daha azdır ve spesifiklerdir. Bir tür özel hizmetlerin gizli ajanını ve bu sınıfın ve mirasçılarının yattığı Top_Secret paketinin gizli ajanını gösteren soyut bir Sınıf ÖzetSecretagent'e sahip olduğumuzu hayal edin. Belirli sınıflar bundan miras alınır - fbisecretagent, MI6Secretagent, Mossadsecretagent, vb. Soyut sınıfın içinde, ajan sayacını uygulamak istiyoruz. Yeni bir nesne aracısı programında bir yerde oluştururken, artacaktır. Paket Top_Secret; Kamu Özet Sınıf SoyutSecretantagent (Genel Statik İnt AgentCount \u003d 0;) Fakat ajanlar sırrı! Yani, sadece onları ve başka kimseyi bilmeleri gerekir. Korunan değiştiriciyi AgentCount alanına kolayca ekleyebiliriz ve daha sonra diğer gizli ajan sınıflarının nesneleri anlamını veya "Gizli" Top_Secret paketimizde bulunan sınıfları elde edebileceğiz. Kamu Özet Sınıf ÖzetSecretagent (korunan statik int agentcount \u003d 0;) Böyle özel görevler ve korunan değiştirici için burada :)

Paket Görünür Değiştirici

Ayrıca, listemiz varsayılan değiştiricidir veya dediği gibi, paket görünür. Tüm alanlar ve yöntemler için varsayılan Java'ya yüklendiğinden, anahtar bir kelime ile gösterilmez. Kodunuza yazarsanız - Int x \u003d 10 ... X değişkeni bu çoğu paket görünür erişim olacaktır. Ne yaptığını hatırlayın, kolay. Aslında, varsayılan \u003d korumalı -Nore :) Uygulamasının vakaları sınırlıdır ve değiştirici korumalıdır. En sık, bu paketteki diğer tüm sınıfların işlevselliğini uygulayan bir tür yardımcı sınıfın bulunduğu pakette çoğu zaman varsayılan araçlar kullanılır. Bir örnek verelim. Bir paketimiz olduğunu hayal edin " hizmetler." İçinde veritabanıyla çalışan çeşitli sınıflar var. Örneğin, bir KullanıcıRizmetçi sınıfı, veritabanından kullanıcı verilerini, Carservice sınıfından, her biri nesnelerin türüyle birlikte olan ve bunlar hakkında veri okuyan diğer sınıfları ve diğer sınıfları okuyan bir kullanıcı verisi var. Paket Servisleri; Kamu Sınıfı KullanıcıVice () Paket Servisleri; Kamu sınıfı Çarşaf () Ancak, veritabanındaki veriler bir formatta olduğunda durum kolayca gerçekleşebilir ve onlara bir başkasında ihtiyacımız var. Kullanıcının veritabanındaki tarihinin tarihinin zaman dilimi ile zaman damgasında depolandığını hayal edin ... 2014 - 04 - 04 20: 32: 59.390583 + 02 ... En kolay nesneye ihtiyacımız var - Java.util.date. Bu amaçla, hizmet paketinin içindeki özel eşleştirici sınıfının içinde yaratabiliriz. Her zamanki Java nesnelerimizdeki tabandan veri dönüştürmekten sorumlu olacaktır. Basit Yardımcı Sınıf. Genellikle kamu sınıfı sınıf adı gibi tüm sınıfları yaratırız, ancak gerekli değildir. Yardımcı sınıfımızı tıpkı sınıf eşleştiricisi gibi ilan edebiliriz. Bu durumda, hala işini yapıyor, ancak hizmet paketi dışındaki herkes için görünmüyor! Paket Servisleri; Sınıf mapper () paket hizmetleri; Kamu sınıfı Çarşaf (MAPPER MAPPER;) ve bu, aslında, doğru mantık: Paketin dışındaki biri neden sadece aynı paketin sınıflarıyla çalışan bir yardımcı sınıfı görüyorsunuz?

Kamuoyu değiştirici

Ve listede son, ancak önemli ölçüde değil - kamuoyu değiştirici! Onunla, Javarush'taki ilk çalışmanın ilk gününde tanıştınız, önce hayatımda halka açık statik void ana (string args).
Şimdi, arayüzlerdeki dersleri öğrendiğinizde, sizin için varış yeri açıktır :) Sonuçta, halk kullanıcılara bir şey vermek için tasarlanmıştır. Örneğin, program arayüzünüz. Bir program-tercüman yazdığınızı varsayalım ve Rus metninin İngilizceye nasıl çevireceğini biliyor. Gerekli mantığın uygulandığı tercüme (string textinrussian) yöntemini oluşturdunuz. Bu yöntem, halkı not aldığınız ve şimdi arayüzün bir parçası olacaktır: Public Sınıf Tercüme (String TextInrussian) ( // metni Rusça'dan İngilizceye çevirir )) Bu yönteme çağrıyı, program ekranındaki "tercüme" düğmesi ile bağlayabilirsiniz - bu kadar! Herkes kullanabilir. Kamu değiştirici tarafından işaretlenen kodun parçaları son kullanıcıya yöneliktir. Yaşamdan bir örnek verirseniz, özel, çalıştığında TV içinde meydana gelen tüm işlemlerdir ve halka açık, kullanıcının bunları yönetebileceği TV'deki düğmelerdir. Aynı zamanda, TV'nin nasıl düzenlendiğini ve hangi işe yaradığı için bilmesi gerekmez. Uzaktan kumanda bir kamu ayarları kümesidir: Açık (), kapalı (), NextChannel (), ÖnceliklerChannel (), ArttırımVolume (), azalmaVolume (), vb.

Java dili, aşağıdaki kategorilere bölünmüş birçok değiştirici sağlar:

  • erişim değiştirici
  • Erişim dışı değiştirici

Değiştirici, uygulamanın ön kenarında, bir kural olarak sınıf, yöntemi veya değişkeni belirlemek için kullanılır. Resimde aşağıdaki örnek sayede:

Kamu sınıfı sınıf adı (// ...) özel boolean myflag; Statik final çift hafta \u003d 9.5; Korumalı Statik Final INT BoxWidth \u003d 42; Kamu statik void ana (string argümanlar) (// 方法 方法)

Erişim kontrolü değiştirici

Java, sınıflara, değişkenlere, yöntemlere ve tasarımcılara erişimi korumak için erişim kontrol karakterlerini kullanabilirsiniz. Java dört farklı erişim haklarını destekler.

Varsayılan olarak, değer olarak da bilinir. varsayılan Aynı pakette görülebilir, herhangi bir değiştirici kullanmayın.

Göstermek için özel özel Aynı sınıfta görülebilen değiştirici.

Belirtmek için var yaygın Tüm sınıflar için değiştirilebilen değiştirici.

Korumalı, B. korumalı Değiştirici, aynı paket içindeki tüm sınıflar ve alt sınıflar için görünür olduğunu belirler.

Varsayılan erişim değiştirici - herhangi bir anahtar kelimeyi kullanmayın

Aynı paket içindeki bir sınıf için varsayılan erişim değiştiricisinde bildirilen değişkenleri ve yöntemleri kullanın. Değişkenlerin dolaylı olarak halka açık statik final olarak bildirildiği arayüz ve halkın için varsayılan erişim yönteminin olduğu bir arayüz.

Aşağıdaki örnekte uygulama, değişkenler ve yöntemler herhangi bir değiştirici kullanamaz.

String versiyonu \u003d "1.5.1"; Boolean işlemcisi () (doğru dönüş;)

Özel Erişim Değiştirici -Private

Özel erişim değiştiricisi en katı erişim seviyesidir, hem özel yöntemler, değişkenler ilan edildi ve yapıcının sınıfına ait olabilecek ve yalnızca sınıflar ve arayüzler kapalı olarak bildirilemez.

Özel bir erişim türü olarak bildirilen değişkenler, yalnızca halka açık heter yönteminin sınıfı boyunca sınıfın dışında bulunabilir.

Değiştirici Özel erişim, özellikle uygulama ve veri verilerinin ayrıntılarının korunması sınıfı için kullanılır.

Aşağıdaki sınıflar özel bir erişim değiştirici kullanır:

Public Score Logger (Özel String Formatı; Genel Dize GetFormat () (This.Format;) Genel Voint SetFormat (Dize Formatı) (This.Format \u003d Format;)))

Örnek, değişken logger sınıf formatı özel bir değişkendir, böylece diğer sınıflar değişkenin değerini doğrudan alamaz ve ayarlayamaz. Sınıfın başka bir değişkeninden çalışabilmek için, iki açık yöntem belirlenir: GetFormat () (Dönüş Değeri) ve SetFormat (String) (Biçim Ayarı)

Açık erişim değiştirici -Pobric

Kamu dersleri, yöntemler, tasarımcılar ve arayüzler başka bir erişim türü olarak ilan edilir.

Farklı paketlerde kamu derslerinin birkaç karşılıklı ziyareti varsa, kamu sınıfının ilgili paketini sürekli olarak bulundurmanız gerekir. Sınıfların miraslanmasından bu yana, halka açık olan tüm yöntemler ve değişkenlerin sınıfı, alt sınıfları tarafından miras alınabilir.

Aşağıdaki işlevler genel erişim kontrolünü kullanır:

Kamu statik void ana (string argümanlar) (// ...)

Ana Java Programı () halka açık yerlere kurulmalıdır, aksi halde Java tercümanı sınıfa başlayamaz.

Korumalı erişim değiştiricileri korumalı

Korumalı değişkenler olarak ilan edilir, aynı paketteki yöntemler ve yapıcılar başka bir erişim türü olabilir ve çeşitli alt sınıf paketlerinde bulunabilir.

Korumalı erişim değiştiricisi değiştirilemez Sınıflar ve arayüzler, yöntemler ve üye değişkenleri hem korumalı hem de arayüz üyesi yöntemleri korumalı olarak bildirilemez.

değiştirici Subclasses, güvenli yöntemlere ve değişkenlere erişebilir, böylece bu yöntemleri ve değişkenleri kullanarak sınırsız sınıfları koruyabiliriz.

Bir sonraki ana sınıf, güvenli bir erişim değiştirici kullanır, alt sınıflar ebeveyn sınıfının OpenSpeaker () yöntemini geçersiz kılar.

Sınıf AudioPlayer (Hoparlör SP) (// 实现)) Sınıf StreamingAudioPlayer (Boole OpenSpeaker (Hoparlör SP) (// 实现 细节))

OpenSpeaker () yöntemi özel olarak ilan edilirse, Sınıf ses seviyesine ek olarak, yönteme erişemez. OpenSpeaker () halka açıksa açıklanırsa, tüm sınıflar yönteme erişme yeteneğine sahiptir. Süreci sınıf alt sınıfları için görünür hale getirmek istiyorsak, yöntem korumalı olarak bildirilir.

Erişim Kontrolü ve Miras

Aşağıdaki yöntemlere dikkat edin Kuralları devraldı:

    Ana sınıf, alt sınıftaki kamu yöntemleri de halka açık olarak ilan edilir.

    Ana sınıf, bir alt sınıfta güvenli bir yöntem olarak bildirilir veya korumalı olarak bildirilir veya halka açık olarak ilan edilir. Kapalı olarak bildirilemezsiniz.

    Ana sınıf, özel bir yöntem miras alınamıyor olarak ilan edilir.

Erişim dışı değiştirici

Bir dizi başka fonksiyon elde etmek için, Java ayrıca erişimi olmayan bir dizi değiştirici sağlar.

statik değiştirici, sınıf yöntemleri ve sınıf değişkenlerini oluşturmak için kullanılır.

Sınıfları, yöntemleri ve değişkenleri süslemek için kullanılan son değiştirici, nihai değiştirilmiş sınıfın kalıtılamaması durumunda, modifiye edilmiş sınıf yöntemi kalıtsal olamaz, değiştirilmiş sabit değişken, değiştirilemez.

Soyut değiştirici, soyut sınıflar ve soyut yöntemler oluşturmak için kullanılır.

Senkron ve uçucu değiştiriciler, esas olarak iplikler için.

Statik değiştirici

    Statik değişkenler:

    Nesneye bağlı olmayan statik değişkenleri bildirmek için anahtar kelimeyi kullanarak statik, sınıf örneğinin kaç nesnesine bakılmaksızın, statik değişkenin yalnızca bir kopyasıdır. Statik değişkenler ayrıca sınıf değişkenleri olarak da bilinir. Yerel değişkenler statik değişkenler olarak bildirilemez.

    Statik yöntemler:

    Bir nesnenin statik yönteme bağlı olmadığını beyan etmek için statik bir anahtar kelime kullanılır. Statik yöntemler statik bir değişken sınıfı kullanamaz. Parametreler listesinden veri almak için statik yöntem ve ardından verileri hesaplar.

Sınıf değişkenlerine ve yöntemlerine erişim doğrudan ClassName.variablelename ve ClassName.MethodName erişimine doğrudan kullanılabilir.

Aşağıdaki örnekte, statik değiştirici sınıf yöntemleri ve sınıf değişkenleri oluşturmak için kullanılır.

Kamu sınıfı andırımcısı (özel statik int numinstances \u003d 0; korumalı statik int getCount () (geri dönüş numarası;) Özel statik void addinstance () (numinstances ++;) anında () () () () () () 'ya Dize argümanları) (System.Out.println ("" ile başlayarak "+ instancecounter.getcount () +" örnekleri "); için (int i \u003d 0; i< 500; ++i){ new InstanceCounter(); } System.out.println("Created " + InstanceCounter.getCount() + " instances"); } }

Yukarıdaki düzenleme işlemlerinin örnekleri aşağıdaki gibidir:

0 örnek ile başladı 500 örnek oluşturuldu

Son sınıflandırıcı

Sonlu değişkenler:

Son değişkenler açıkça başlatılabilir ve yalnızca bir kez başlatılabilir. Dizin, son nesnelerin başka bir nesneyi belirtemediği için ilan edilir. Ancak, verilerin değiştirilebileceği nihai hedef. Nesneye bu nihai referans değiştirilemez, ancak değeri değiştirilebilir.

Son değiştirici, genellikle statik bir değiştirici sınıfı sabiti oluşturmak için kullanılır.

Kamu sınıfı testi (final int değeri \u003d 10; // 下面 是 声声 常量 的 的 实例 kamu statik final int boxWidth \u003d 6; statik final string title \u003d "(! Lang: Manager"; public void changeValue(){ value = 12; //将输出一个错误 } } !}

Son yöntem

Yöntemler Son sınıf alt sınıflar tarafından miras alınır, ancak alt sınıfları değiştiremez.

Yöntemin temel amacı, bu yöntemin son ifadesinin değişmesini önlemektir.

Aşağıda gösterileceği gibi, sonlu bildirim değiştiricileri yöntemlerini kullanarak.

Kamu sınıfı testi (kamu nihai void changename () (// 方法 方法))

Son kategori

Son sınıflar miras alınamaz, hiçbir sınıf nihai sınıfın özelliklerinden herhangi birini miras alamaz.

Halkın Son Sınıf Testi (// 类类)

Soyut değiştirici

Soyut sınıf:

Soyut sınıf bir nesne örneği oluşturmak için kullanılamaz, uygulamanın tek amacı, bu sınıfın gelecekteki genişlemesi için soyut bir sınıftır.

Sınıf soyut ve final değiştirilemez. Sınıf soyut yöntemler içeriyorsa, sınıf soyut bir sınıf olarak bildirilmelidir, aksi takdirde derleyici hatası.

Soyut bir sınıf soyut yöntemler içerebilir ve soyut yöntemleri yoktur.

Soyut çift fiyat; özel string modeli; özel string yılı; kamu soyut void gofast (); // 抽象 Kamu Özet Void ChangeColor ();)

Soyut yöntem

Hiçbir yöntem, yöntemin soyut bir uygulamasıdır, verilen alt sınıf yönteminin spesifik uygulanması. Soyut yöntemler final ve katı olarak bildirilemez.

Herhangi bir alt sınıf, soyut bir sınıfın soyut bir sınıfın soyut bir sınıf değilse, tüm soyut ebeveyn sınıfı yöntemlerini uygulamalıdır.

Sınıf bir dizi özet yöntem içeriyorsa, sınıf soyut bir sınıf olarak bildirilmelidir. Soyut bir sınıf soyut yöntem içeremez.

Yöntemin soyut duyurusu bir noktalı virgülle biter, örneğin: halka açık bir örnek ();

Kamu Özet Sınıf SuperClass (Soyut Void M (); // 抽象 方法) Sınıf Alt Sınıfı SuperClass (// 实现 抽象 方法 Void M () (.........))

Senkron değiştirici

Metod Eşzamanlı anahtar kelime, aynı saati yalnızca bir iplik erişimini bildirmek için. Senkron değiştirici, dört erişim değiştiriciye uygulanabilir.

Genel Senkronize Void Showdetails () (.......)

Geçiş değiştirici

Serileştirilmiş nesne, bu özel değişkeni atlamak için Java Sanal Makinesi (JVM) geçiş değişken örneği ile değiştirilmiştir.

Değiştirici, ön işleme veri türleri ve değişkenleri için uygulama değişkenlerinin tanımında etkindir.

Halk geçici int limiti \u003d 55; // halka açılmayacak. // devam edecek.

Uçucu değiştiriciler

Akış akışlarına her döndüğünüzde uçucu modifiye üye değişkeni, bir üye değişkeninin değerini paylaşılan hafızadan yeniden okumak zorunda kalır. Ek olarak, değişken üyelerindeki değişiklikler olduğunda, akış, değeri genel hafızaya geri döndürülmeye zorlanır. Yani herhangi bir zamanda, iki farklı konu her zaman aynı üye değişken değerini görür.

Kamu sınıfı myrunnable, runnable (özel uçucu boolean aktif; kamu void run () (aktif \u003d true; iken (aktif) // 第一 (// 代码)) halk void stop () (aktif \u003d false; // 第二 行) ))

Normal şartlar altında, akış () () çalışma akımında) başka bir çağrı akışında stop () yönteminde () çalıştırmasının () çalışmasına neden olur. Aktif değer ise İlk satır Tampon kullanılır, ikinci sıra Aktif döngü yanlış olduğunda durmaz.

Bununla birlikte, yukarıdaki kod, değiştirilmiş bir uçucu aktif kullanıyoruz, böylece döngü duracak.

Son güncelleme: 04/20/2018

Java'daki tüm sınıf üyeleri - alanlar ve yöntemler - erişim değiştiricileri var. Önceki konularda, halka açık değiştiriciye zaten karşılaştık. Erişim modifiyatçıları, sınıf üyeleri için izin verilen bir kapsam belirlemenizi sağlar, yani bu değişkenin veya yöntemin kullanılabileceği bir bağlam.

Java aşağıdaki erişim değiştiricilerini kullanır:

    halka açık: kamu, halka açık sınıf veya sınıf üyesi. Kamu değiştiricisi ile ilan edilen alanlar ve yöntemler mevcut paketten ve dış paketlerden gelen diğer sınıflardan görülebilir.

    Özel: Kapalı bir sınıf veya sınıf üyesi, halkın değiştiricinin zıttı. Kapalı bir sınıf veya sınıf üyesi yalnızca aynı sınıftaki koddan kullanılabilir.

    korumalı: Böyle bir sınıf veya sınıf üyesi, diğer paketlerde olsa bile, mevcut sınıfın veya paketin veya türetilmiş sınıfların herhangi bir yerinden veya türetilmiş sınıflarda mevcuttur.

    Varsayılan değiştirici. Bir tarla veya sınıf yönteminde bir değiştiricinin eksikliği, varsayılan değiştiriciyi içerir. Bu alan veya yöntemler mevcut paketteki tüm sınıflardan görülebilir.

Aşağıdaki programın örneğini kullanarak erişim değiştiricilerini göz önünde bulundurun:

Public Sınıf Programı (Void Main (String Args) ("Kate", 32, "Baker Street", "+12334567"); kate.displayName (); // normlar, halka açık Kate yöntemi. Görüntüleme (); // Normlar, yöntem, varsayılan bir değiştirici kate.displayphone () () // normları, korumalı //kate.displayAddress () yöntemi; //! Hata, Özel System.Out.println yöntemi (kate.name); // norm , varsayılan değiştirici system.out.println (kate.address); // norm, kamu sistemi.Out.println değiştirici (kate.age); // norm, değiştirici korumalı //system.stem.println (kate.phone); //! HATA, ÖZEL)) SINIF KİŞİSEL (Dize Adı; Korumalı Int Yaş; Genel Dize Adresi; Özel Strip Telefon; Kamu Kişisi (Dize Adı, Int Yaş, Dize Adresi, String Phone) (Bu. İsim \u003d İsim; Bu. yaş \u003d yaş; this.address \u003d adres; bu.phone \u003d telefon;) halk void displayname () (system.out.printf ("Adı:% s \\ n", ad);) geçersiz görüntüleme () (System.out .Printf ("Yaş:% d \\ n", yaş);) özel void d isplayAddress () () (System.Out.printf ("Adres:% s \\ n", adres); ) Korumalı boşluk görüntüleme telefonu () (system.out.printf ("Telefon:% s \\ n", telefon);)))

Bu durumda, her iki sınıf da bir pakette yer almaktadır - varsayılan paket, bu nedenle program sınıfında, halk sınıfının tüm yöntem ve değişkenlerini, halka açık ve korumalı bir değiştirici olan tüm yöntem ve değişkenleri kullanabiliriz. Program sınıfındaki özel değiştiricili alanlar ve yöntemler mevcut olmayacaktır.

Program sınıfı başka bir pakette bulunursa, yalnızca halkın değiştirici ile ilgili alanlar ve yöntemler ona sunulur.

Erişim değiştiricisi, değişken tanımı veya yönteminin geri kalanından önce gelmelidir.

Kapsülleme

Bu nedenle, tüm değişkenleri ve yöntemleri kamuoyarlılarla ve paketi veya sınıfa bakılmaksızın, programın herhangi bir noktasında mevcut olmaları neden olmazdı? Örneğin, yaş alanını temsil eden yaş alanını alın. Bir başka sınıfın bu alana doğrudan erişimi varsa, programın sürecinde, örneğin, negatif bir sayı, yanlış değer iletilecektir. Bu veri değişimi arzu edilmez. Ya da bazı verilerin konsolda gösterilebilecekleri veya anlamlarını tanıdıkları için bazı verilerin doğrudan faydalanmasını istiyoruz. Bu bağlamda, onları istenmeyen erişimden dışarıdan (her ikisi de değeri ve değişiklikleri elde etmek için) korumak için veri erişiminin mümkün olduğu kadar kısıtlanması önerilir. Çeşitli değiştiricilerin kullanımı, verilerin bozulmamasını veya değiştirilmemesini sağlar. Belli bir görünürlük alanın içinde saklanan benzer veriler kapsülleme denir.

Bu nedenle, bir kural olarak, tarlaların doğrudan kullanımı yerine, kural olarak, erişim yöntemlerini kullanın. Örneğin:

Public Sınıf Programı (String Args) (Kişi Kate \u003d Yeni Kişi ("Kate", 30); System.Out.println (Kate.getage ()); // 30 Kate.Setage (33); sistem .out.println ( kate.getage ()); // 33 kate.setage (123450); system.out.println (kate.getage ()); // 33)) sınıf kişi (özel dize adı; özel int yaşı; kamu) İsim, Int yaş) (this.Name \u003d isim; this.age \u003d yaş;) Genel dize getName () (this.Name;) halk void setname (string adı) (dize adı) (this.Name \u003d ad;) Public int Getage ( ) (This.Age dön) (eğer yaş) (eğer yaş) (yaş\u003e 0 && yaş< 110) this.age = age; } }

Ve sonra, kişi sınıfındaki ad ve yaş alanlarıyla doğrudan çalışma yerine, bu alanların değerlerini belirleyen ve iade eden yöntemlerle çalışacağız. SetName, Kurulum yöntemleri de, alan değerlerini değiştirirken mutator olarak da adlandırılır. Ve GetName yöntemleri, Get ve Muhtemel Accessor denir, çünkü yardımlarıyla saha değerini alıyoruz.

Ve bu yöntemlerde ek mantık yatırım yapabiliriz. Örneğin, bu durumda, yaşı değiştirdiğinizde, yeni değer izin verilen aralığa karşılık geldiği için kontrol edilir.

Son güncelleme: 03.10.2019

Tüm sınıf üyeleri - alanlar, yöntemler, özellikler - hepsi var erişim Değiştiricileri. Erişim modifiyatçıları, sınıf üyeleri için izin verilen bir kapsam belirlemenizi sağlar. Yani, erişim modifiyatçıları bu değişkeni veya yöntemi kullanabileceğiniz bağlamı belirler. Önceki konularda, sınıfın alanları açıklandığında zaten karşılaştık (bu, kamuoyu değiştiricisi ile).

Aşağıdaki erişim değiştiricileri C # içinde uygulanır:

    halka açık: kamu, halka açık sınıf veya sınıf üyesi. Böyle bir sınıf üyesi, koddaki herhangi bir yerden ve diğer programlardan ve montajlardan elde edilebilir.

    Özel: Kapalı sınıf veya sınıf üyesi. Kamuoyunun değiştiricinin tam tersini temsil eder. Böyle bir kapalı sınıf veya sınıf üyesi yalnızca aynı sınıftaki veya bağlamdaki koddan kullanılabilir.

    korumalı: Böyle bir sınıf üyesi mevcut sınıftaki veya türetilmiş sınıflarda herhangi bir yerden temin edilebilir. Bu durumda, türetilmiş sınıflar diğer montajlarda bulunabilir.

    dahili: Benzer bir değiştiriciye sahip sınıf ve sınıf üyeleri, aynı montajdaki herhangi bir kaynak kodundan temin edilebilir, ancak diğer programlar ve montajlar için mevcut değildir (halka açık değiştirici durumunda olduğu gibi).

    korumalı Dahili: İki değiştiricinin işlevselliğini birleştirir. Böyle bir değiştirici olan sınıfların sınıfları ve üyeleri mevcut montajdan ve türetilmiş sınıflardan elde edilebilir.

    Özel Korumalı: Böyle bir sınıf üyesi, geçerli sınıftaki herhangi bir yerden veya aynı montajda tanımlanan türetilmiş sınıflarda mevcuttur.

Erişim değiştiricisini açıkça ayarlayabiliriz, örneğin:

Özel korumalı sınıf durumu (korumalı geçersiz baskı () (konsol.writeline ($ "a \u003d (a)");)))

Veya gösteremiyoruz:

Sınıf durumu (int a; void baskı () (konsol.writeline ($ "a \u003d (a)");)))

Erişim değiştirici alanlar ve yöntemler için tanımlanmamışsa, varsayılan özel değiştirici onlar için kullanılır.

Bir değiştirici olmadan bildirilen sınıflar ve yapılar, dahili varsayılan erişime sahiptir.

Doğrudan ad alanlarında tanımlanan ve diğer sınıflara gömülü olmayan tüm sınıflar ve yapılar, yalnızca halka açık veya iç değiştiriciler olabilir.

Örneğe bakalım ve aşağıdaki sınıf durumunu oluşturalım:

Kamu sınıfı durumu (// da defaultvar adresinde özeldir; int defaultvar; // alan sadece mevcut sınıf özel int privatevar; // mevcut sınıftan ve aynı proje ile tanımlanan türetilmiş sınıflardan temin edilebilen Korumalıprivatevar; // mevcut sınıftan ve türevlerden temin edilebilir int protredvar; // mevcut proje içi int internalvar'ın herhangi bir yerinde kullanılabilir; // mevcut projenin herhangi bir yerinde ve mirasçıların diğer projelerinden başka bir yerde mevcuttur. Programın herhangi bir yerinde, diğer programlar için ve diğer programlar için mevcuttur ve Public Int Publicvar; // Varsayılan olarak, Özel Void DefaultMethod () \u003d\u003e konsol.writeline değiştirici () \u003d\u003e konsol.writeline ($ "Defaultvar \u003d ( Defaultvar) "); // yöntemi yalnızca geçerli sınıf özel void privateMethod () \u003d\u003e konsol.writeline ($ privatevar \u003d (prenayet)); // aynı şekilde tanımlanan mevcut sınıftan ve türetilmiş sınıflardan temin edilebilir GÜÇLÜ KORUMA ÖZEL VODE KORUYUCUPRIVATEMATHOD () \u003d\u003e konsol.writeline ($ ProtectedPrivatevar \u003d (protectprivatevar) "); // mevcut sınıftan ve türevlerden temin edilebilen boşluk korumalıMethod () \u003d\u003e konsol.writeline ($ "protectedvar \u003d (protectedvar)"); // mevcut projenin herhangi bir yerinde mevcuttur İç VuralMethod () \u003d\u003e konsol.writeline ($ "dahilivar \u003d (dahilivar)"); // mevcut projenin herhangi bir yerinde ve diğer projelerdeki varis sınıflarından korunan iç boşluk protectelterMethod () \u003d\u003e konsol.writeline ($ protectedInternalvar \u003d (protectelternalvar) "); // Programın herhangi bir yerinde, yanı sıra diğer programlar için mevcuttur ve halka açık void PublicMethod () \u003d\u003e konsol.writeline ($ "Publicvar \u003d (Publicvar)"); )

Devlet sınıfı kamuoyu değiştirici ile ilan edildiğinden, programın herhangi bir yerinden, diğer programlardan ve montajlardan elde edilebilecek. Devlet sınıfının her erişim seviyesi için beş alanı vardır. Ayrıca, varsayılan olarak kapalı (özel) olan bir değiştirici olmayan bir değişken.

Ayrıca, ekrandaki sınıf alanlarının değerlerini gösterecek altı yöntem de vardır. Tüm değişiklikler, bu sınıf içindeki sınıf üyelerini kullanmanıza izin verdiğinden, daha sonra kapanış dahil tüm sınıf değişkenlerinin tüm yöntemleri için mevcut olduğundan, herkes sınıf sınıfının bağlamında.

Şimdi, programdaki sınıfımızın değişkenlerini (yani, program sınıfının ana sınıfında), devlet ve program sınıfları bir projede ise nasıl kullanabileceğimizi görelim:

Sınıf Programı (Statik Voide1 \u003d New State (); // Değişken DefaultVAR'ın değerini atayın, // özel bir değiştiriciye sahip olduğundan ve program sınıfı onu görmüyor ve bu dize ortamı vurgulayacağından Yanlış olarak State1.defaultvar \u003d 5; // hatası, erişim // ile aynı kişi, privative state1.privatevar \u003d 5; // hatası, erişim mevcut olamaz // protectedprivatevar'ın değişkeninin değerini atamayacağı için geçerli olamaz. // PROGRAM SINAVI SINIFI SINIFI SINIFI DEĞİLDİRDEN DEĞERLENDİRMEYE DEĞERLENDİRMEYE DEĞERLENDİRMEYEDİR. // Hata, Erişim Mevcut Olmaz Bir Sınıf Sınıfı Sınıfı Devlet State1.Protectectedvar \u003d 5; // Hata, Erişim Mevcut olamaz // Dahili değiştirici ile InternalVar değişkeni mevcut projenin herhangi bir yerinden mevcuttur // bu nedenle, Sessizce BT, State1'in değerini seslendiriyoruz1. dahilivar \u003d 5; // ProtectedInternalvar değişkeni, mevcut projenin herhangi bir yerinden de mevcuttur. Project1.ProtectedInternalvar \u003d 5; // Publicvar değişkeni halka açık devlet1.Publicvar \u003d 5; ))

Böylece, sadece InternalVar, ProtectedInternalvar ve Publicvar değişkenlerini yükleyebildik, çünkü değiştiricileri bu bağlamda kullanmanıza izin verir.

Durum benzerdir ve yöntemlerle:

Sınıf Programı (Statik Voide1 \u003d Yeni Durum (); State1.Defaultmethod (); // Hata, Erişim, State1.PrivateMethod () tarafından erişilemiyor; // hatası, erişim kabul edilemez. // Hata, Erişim erişilebilir olamazdı State1.ProtectedMethod (); // Hata, Erişim erişilebilir olamaz. ETKİNLİKLERE SATILIK1.InterMethod (); // Norms State1.ProtectedInterMethod ();

Burada sadece üç yönteme erişimimiz var: İç modifiyerlere göre, halka açık olan iç modifiyerlere göre, mevcut olan MuhtemelMethod, ProtectedInternalmethod, PublicMethod.

Böyle bir erişim değiştiricisi sistemi sayesinde, sınıfın bazı noktalarını programın diğer bölümlerinden gizleyebilirsiniz.

Kamu ve iç değiştiricilerin eylemlerinde benzer olması gerçeğine rağmen, ancak büyük bir farkı var. Kamu değiştiriciye sahip sınıf ve sınıf üyeleri de DLL dinamik kütüphanede veriler yapılırsa ve daha sonra bu programlarda kullanırsa diğer programlara da mevcut olacaktır.