Java teknolojisi nedir ve kullanım alanları nelerdir? Java - terimler sözlüğü. Java Virtual Machine ve JVM terimlerini duydum. Bu Java yazılımıdır

  • 04.04.2019

Program - bir programlama dilinde yazılmış bir dizi talimattır. Programlama dili, günlük iletişimde kullanılan yaygın insan dillerinden farklıdır. Programlama dili sıkı bir şekilde düzenlenmiştir, kurallarından sapılamaz. Bir dilin nasıl çalıştığını yöneten kurallar, dilin sözdizimini oluşturur. Sözdizimi kuralları, bir dilin kelime dağarcığını, bir programın döngüler, dallar, işlevler gibi yapılar kullanılarak nasıl oluşturulacağını tanımlar. Yalnızca sözdizimsel olarak doğru program derlenebilir. Hatalı programlar reddedilecektir. Programcı, herhangi bir içerik içermeyecek bir program oluşturmalıdır. sözdizimi hatası... Bunu yapmak için programcının sözdizimi kuralları hakkında ayrıntılı bilgiye ihtiyacı vardır. Sözdizimsel doğruluğa ek olarak, program anlamlı olmalı, yani mantıksal bir eylemler dizisi gerçekleştirmelidir. Programın anlamı, programın semantiğidir. Anlamsal olarak doğru bir program, programcının oluşturulduğunda tam olarak ne amaçladığını düşünür.

hadi oluşturalım en basit program... Oluşturma süreci üç ana bölümden oluşur:

Program metninin bilgisayara girilmesi;

Girilen kodun derlenmesi;

Derlenmiş kodun yürütülmesi.

En basit program kodu şöyle görünecektir:

genel sınıf HelloWorld (

// Mesajı gösterecek bir program // "Merhaba, Dünya!" standart çıktıda

System.out.println ("Merhaba, Dünya!");

Bu program "Merhaba, Dünya!" mesajını yazdırır. Bu mesaj, komut kullanılarak görüntülenir.

System.out.println ("Merhaba, Dünya!");

Bu bir işlev çağrısı örneğidir. System.out .println işlevi burada çağrılır. İşlev - bir araya getirilen ve tek bir bütün oluşturan birkaç talimattan oluşan bir settir. isim... Bu durumda, yerleşik bir işlev kullanıyoruz. Yerleşik bir işlev önceden Özel fonksiyon, dilin ayrılmaz bir parçasıdır. Program yorumlar içerir. Program çalışırken yapılan yorumlar tamamen yok sayılır. Bu durumda yorum satırları // ile başlar ve satırın sonunda biter. Çok satırlı yorumlar / * ve * / arasına alınır. Yorumlar hariç her şey dilin sözdizim kurallarına tabidir. Programımızın ilk satırında HeiioWorid adında bir sınıf tanımlıyoruz. Her sınıfın bir program olmadığını unutmayın. Sınıfın olması için bağımsız program, şu şekilde tanımlanan ana işlevi içermelidir:

public static void main (String args) (

ifadeler

Bir programı başlatırken Java yorumlayıcısına erişirken, yorumlayıcı ana işlevi çağırır. Public kelimesi, bu fonksiyonun dışarıdan çağrılabileceği anlamına gelir, yani programın kendisinden değil. Bu önemlidir çünkü işlev yorumlayıcı tarafından çağrılır. Geri kalan kelimelerin anlamları daha sonra netleşecektir. Kıvrımlı parantezler arasında, işlev çağrıldığında çağrılacak ve yürütülecek bir dizi talimat bulunur.

Uygulamalar farklı şekilde oluşturulur:

public class InterestIConsole, ConsoleApplet'i genişletir (

korumalı Dize getTitleO (

"Örnek program V'lterestlV" döndür;

korumalı geçersiz program () (

çift ​​anapara; // yatırılan miktar

çifte faiz; // yıl için yüzde

faiz = anapara * oran; // yüzde anapara = anapara + faiz; / * sonucu yazdır * / console.put ("Kazanılan faiz $'dır"); konsol.putln (ilgi);

konsol.put ("Bir yıl sonraki yatırımın değeri $'dır"); konsol.putln (asıl);

Bu durumda aşağıdakiler kullanılır. yardımcı program ConsoleApplet.java dosyasında bulunur:

içe aktar j ava.awt.*;

içe aktar java.awt.event *;

public class ConsoleApplet, Java.applet.Applet'i genişletir

Runnable, ActionListener (korumalı Dize başlığı = "(! LANG: Java Konsolu G / Ç) uygular"; protected String getTitleO { return title;!}

korumalı ConsolePanel konsolları- korumalı void programı () (

konsol.putln ("Merhaba, Dünya!");

özel Düğme runButton;

özel Konu programıThread = null;

// thread run () private boolean programRunning = falser- private boolean firstTime = true; // false - program ilk kez sayarsa

public void run () (// programRunning'i başlat = true;

programRunning = yanlış; stopProgram();

synchronized private void startProgram () (runButton.setLabel ("Programı Durdur"); if (! firstTime) (console.clear (); deneyin (Thread.sleep (300);) // programı yeniden başlatmadan önce geciktirin

yakalamak (InterruptedException e) ()

ilkZaman = yanlış; programThread = new Thread (bu); programThread.start();

senkronize özel void stopProgram () (if (programRunning) (programThread.stop (); deneyin (programThread.join (1000);) yakalama (InterruptedException e) ()

konsol.clearBuffers(); programThread = boş; programRunning = yanlış; runButton.setLabel ("Yeniden Çalıştır"); runButton.requestFocus();

public void init () (

setBackground (Color.black);

setLayout (yeni BorderLayout (2,2)); konsol = yeni ConsolePanel (); ekle ("Merkez", konsol);

Panel sıcaklığı = yeni Panel ();

temp.setBackground (Color.white); Etiket laboratuvarı = yeni Etiket (getTitle ()); temp.add (laboratuar);

lab.setForeground (yeni Renk (180,0,0)); ekle ("Kuzey", sıcaklık);

runButton = new Düğme ("Programı Çalıştırın");

temp = yeni Panel ();

temp.setBackground (Color.white);

temp.add (runButton);

runButton.addActionListener (bu);

ekle ("Güney", sıcaklık); )

public Insets getlnsets () (yeni Insets (2,2,2,2) döndürür;

genel boşluk durağı () (

if (programRunning) (stopProgram()); console.putln();

konsol.putln ("*** PROGRAM DURDURULDU");

senkronize public void actionPerformed (ActionEvent evt) (if (programThread! = null) (stopProgram (); console.putln ();

konsol.putln ("*** PROGRAM KULLANICI TARAFINDAN İPTAL EDİLDİ");

Değişkenler ve ilkel türler

İsimler programlamada temel bir rol oynar. Farklı şeyler isimleriyle adlandırılır. İsimleri kullanırken sözdizimi ve anlambilimi bilmek önemlidir. İsim - bu bir veya daha fazla dizidir

karakterler. Ad bir harfle başlamalı ve harf, sayı, alt çizgiden (_) oluşmalıdır. Örneğin:

oldukça_a_long_name

Büyük harfler ve küçük harfler farklı kabul edilir. İsimler

HelloWorld, heioworid, helloworld, hEiioWorLD farklı isimlerdir. Bazı isimler saklıdır ve özel randevu ve bir programcı tarafından başka amaçlarla kullanılamaz, örneğin:

ve birkaç düzine başka isim.

Değer, şu şekilde bir atama operatörü kullanılarak bir değişkene atanır:

değişken = ifade;

Örneğin:

faiz = oran * anapara;

Yalnızca bir tür veriyi depolamak için bir değişken kullanılır. Java'da yerleşik türler vardır, bunlar ilkel türlerdir:

Kısa tip iki bayta karşılık gelir, değer aralığı -32 768 ila 32 767 arasındadır. İnt tipi 32 bite karşılık gelir, değer aralığı -2 147 483 648 ila 2 147 483 647 arasındadır. Uzun tip 64 bite karşılık gelir, değer aralığı -9 223 372 036 854 775 808 ila 9 223 372 036 854 775 807 arasındadır. Float tipi 4 bayt bellek kaplar, maksimum değer yaklaşık 10 38'dir. char türü iki bayt bellek kaplar. Bir sabitin adı değişmez olarak adlandırılır. Bir boole değişmez değeri için true ve false olmak üzere iki değer vardır.

Değişkenleri ve atama operatörlerini kullanan örnek bir program:

genel sınıf Faiz (

public static void main (String args) (/ * değişken bildirimi * / çift anapara; // iç içe toplam

çift ​​oran; // yıllık yüzde

çifte faiz; // yıl için tahakkuk

/ * hesaplamalar * / asıl = 17000; oran = 0.07;

faiz = anapara * oran; anapara = anapara + faiz;

/ * sonucu yazdır * / System.out.print ("Kazanılan faiz $"); System.out.println (faiz);

System.out.print ("Bir yıl sonraki yatırımın değeri $'dır");

System.out.println (asıl); )

Dizeler, nesneler, işlevler

Önceki bölümde, sekiz ilkel türe ve dize türüne baktık. var temel fark ilkel türler ve dize türü arasında. Mesele şu ki, string bir nesnedir. Örneklerimiz Textio sınıfını kullanacak. Java program kodu (TextlO.java) bu ekin sonunda verilmiştir.

Java'daki sınıflar iki tane yapar önemli işlevler... Birincisi, sınıfların o sınıfın içerdiği değişkenleri ve işlevleri birleştirmesidir. Değişkenler ve işlevler, sınıfın statik üyeleri haline gelir; örneğin, ana işlev o, sınıfın statik bir işlevidir. Bu tür işlevlerin tanımında statik kelimesi kullanılır. Sınıfların ikinci amacı, nesneleri tanımlamalarıdır. Bir sınıf bir türdür ve bir nesne o türün bir değeridir, string ise Java dilinin parçası olan bir sınıfın adıdır. Ve "Merhaba, Dünya" gibi bir dize, bir dize değeridir.

Herkes biliyor matematik fonksiyonları, örneğin karekök gibi. Java dilinin Math.sqrt gibi benzer bir işlevi vardır. Bu işlev, Math adlı bir sınıfın statik bir üyesidir. x herhangi bir sayısal değerse, Math.sqrt (x) de şuna eşit bir değerdir: kare kök x'ten. Bu değeri yazdırmak için aşağıdaki komutu kullanıyoruz: System.out.print (Math.sqrt (x));

Bir değişkeni başlatmak için atama operatörünü kullanabilirsiniz:

uzunlukOfSide = Math.sqrt (x);

İşlev, double türünde bir değişkeni temsil eder ve double türündeki değişkenlerin kullanıldığı yerlerde kullanılabilir.

Bir matematik fonksiyonuna başka bir örnek:

Bu fonksiyon modülü (mutlak değer) hesaplar. Matematiksel fonksiyonlar arasında diğerleri vardır, örneğin, Math, sin (x), Math.cos (x), Math.tan (x), Math.asin (x), Math.acos (x), Math.atan ( x), Math.exp (x), Math, log (x), Math.pow (x, y), Math, floor (x), Math, rastgele ().

İşte bu işlevleri kullanan bir program örneği:

ortak sınıf Zamanlı Hesaplama (

public static void main (String args) (

uzun başlangıçZamanı; // milisaniye cinsinden başlangıç ​​zamanı

uzun endTime; // hesaplamaların sonundaki süre, milisaniye cinsinden double time; // Saniye cinsinden zaman farkı. startTime = System.currentTimeMillis ();

çift ​​genişlik, yükseklik, hipotenüs; // üçgen genişliğinin kenarları = 42.0; yükseklik = 17.0;

hipotenüs = Math.sqrt (genişlik * genişlik + yükseklik * yükseklik);

System.out.print ("42 ve 17 kenarları olan bir üçgenin hipotenüsü vardır");

System.out.printIn (hipotenüs);

System.out.printIn ("\ nMatematiksel olarak, sin (x) * sin (x) +" + "cos (x) * cos (x) - 1, 0 olmalıdır."); System.out.println ("Bunu x = 1: için kontrol edelim");

System.out.print ("günah (l) * günah (l) + cos (1) * cos (1) - 1 "); System.out.printIn (Matematikler (1)'de * Matematikler (1)'de

Math.cos (1) * Math.cos (1) - 1); System.out.println ("(Gerçek sayılarla hesaplama yaparken" + "yuvarlama hataları olabilir!)");

System.out.print ("\ nİşte rastgele bir sayı:");

System.out.printIn (Math.random());

endTime = System.currentTimeMillis ();

zaman = (endTime - startTime) / 1000.0;

System.out.print ("\ nÇalışma süresi saniye olarak:");

System.out.printIn (zaman);

Bir dize bir nesnedir. Bu nesne, verileri, yani dizeyi oluşturan karakter dizisini içerir. Ayrıca işlevleri vardır. Örneğin, uzunluk işlevi bir dizenin uzunluğunu hesaplar. Dize, aşağıdaki bildirim kullanılarak oluşturulabilir:

str = "Günü yakala!"; Bir örnek daha:

System.out.print ("İçindeki karakter sayısı"); System.out.println ("V dizisi" Selam Dünya V, "); System.out.println ("Merhaba Dünya".length ());

string nesnesi birçok fonksiyon içerir. İşte onlardan bazıları.

Si.equals (s2) - si dizesi s2 dizesiyle tam olarak aynıysa true olan bir boole değeri döndürür.

Si.equalslgnoreCase (s2) - sl.equalsO ile aynı, ancak büyük harf ve küçük harf aynı kabul edilir.

Si. uzunluk (), dizedeki karakter sayısına eşit bir tamsayı değeridir.

Si.charAt (N) - bir karakter değeri, numaralı konumda bulunan bir karakter n dizede, sıfır konumundan başlayarak.

Si. alt dize (n, m) - dize türü, konumlarda karakterler içeren bir dize N,

N+1, ..., m- 1.

Si.indexof (s2) - tamsayı, s2 si'nin bir parçasıysa, si'de s2'nin başladığı konum numarası döndürülür.

Si. karşılaştırma To (s2) - tamsayı, dizeler eşitse 0.

Si. büyük harf (), büyük harflerle yazılmış bir dizedir.

Si. o - silinen dizeyi kırp yazdırılamayan karakterler boşluklar, sekmeler vb.

Şu satırlar eklenebilir:

System.out.println ("Merhaba," + ad + ". Tanıştığımıza memnun oldum!");

İlkel türler bir dizeye eklenebilir, ardından bir dize türüne dönüştürülür:

System.out.print ("Sonra"); System.out.print (yıl);

System.out.print ("yıl, değer"); System.out.print (asıl); Bu şu şekilde yazılabilir:

System.out.print ("" + yıllar + "yıllardan sonra, değer" + anaparadır);

İfade

Değişmezler, değişkenler, fonksiyonlar basit ifadelere örnektir. Daha karmaşık ifadeler, A + B * C, B * C gibi basit ifadelerden ve operatörlerden oluşur.

Aritmetik operatörler

Aritmetik operatörler +, -, *, / işaretleri ile gösterilir.

Artırma ve eksiltme operatörleri

Bu operatörler yalnızca bir işlenen gerektirir ve ++ ve - ile gösterilir.

sayaç = sayaç + 1; Gol Atılan = Gol Atılan + 1;

Bu ifadeler artırma ve eksiltme operatörleri kullanılarak aşağıdaki gibi yazılabilir:

sayaç ++; kırmızı ++ ile goa1s S;

y = x ++; y = ++ x;

Text10.putIn (-x); z = (++ x) * (y-);

Eğer x 6 ise, y = x ++ y komutu yürütüldükten sonra 6 olur ve y = ++ x y komutu yürütüldükten sonra 7 olur. Her iki durumda da, x için yeni değer 7 olacaktır.

Karşılaştırma Operatörleri

Boole değerleriyle çalışırken karşılaştırma operatörleri kullanılır, değerleri Boolean'dır, yani doğru veya yanlış:

A == b - A "eşittir" B;

А! = В - А "eşit değil" В;

A< в - А "меньше чем" В;

A> c - A, B'den "büyüktür";

A<= в - А "меньше или равно" В;

A> = b - A "büyük veya eşit" B.

Bu operatörler, sayısal değerlerle çalışırken işlenen olarak kullanılabilir.

boolean sameSign;

sameSign = ((x> 0) == (y> 0));

Mantıksal operatörler

Boole operatörleri, boole değerleriyle çalışır. Bunlar ve (VE) (&&) veya (VEYA) (ve) işleçleridir, (DEĞİL) (!) değildir. Örneğin:

(x! = 0) && (y / x> 1) test =! Ölçek;

Koşullu Operatörler

Basit bir koşullu operatörün genel görünümü:

boole ifadesi? ifade-1: ifade-2

Boole ifadesi true olarak değerlendirilirse, ifade-i yürütülür; aksi takdirde ifade-2 yürütülür. Örneğin:

sonraki = (n ile e 2 == 0)? (N / 2): (3 * N + 1);

Atama ve Döküm Operatörleri

Örnekler

int A; Çift x; kısa B; A = 17;

X = A; // A çift tipe dönüştürülür

B = A; // izin verilmez, tür otomatik olarak yayınlanmaz

Düzeltme:

B = (kısa) A; // type açıkça yayınlanıyor

Bazı tipler döküm yapılırken değerlerde anlamsal değişiklikler meydana gelebilir, yani (kısa) 100 OOO eşittir 34 464. Kısa tip orijinal değerden 4 bit alınarak oluşturulur, bazı bilgiler kaybolur.

Cast operatörlerini kullanmaya bir örnek

(int) (6 * Matematik rastgele o) - tamsayı rastgele sayı 0, 1,2, 3, 4, 5 kümesinden

Unicode kodlamasına göre karşılık gelen karakterin değerini alarak tamsayılardan char'a çevirebilirsiniz. Örneğin, (char) 97 'a' ve (int) '+' 43'tür.

Örnekler

x - = y; // x = x - y;

x * = y; // x = x * y;

x / = y; // x = x / y;

x c e = y; // x = %x y; (x ve y tam sayıları için)

q && = p; // q = q && p; (boolean q ve p için)

Birleşik atama operatörleri dizilerle de kullanılabilir:

str + = X str = str + X

Operatör hiyerarşisi

Operatörler arasında kıdem belirlenir. Bir dizi ifadede, yazıldığı gibi birbiri ardına değil, kurallara uygun olarak yürütülürler.

operatör hiyerarşisi kuralları ile. Operatör hiyerarşisindeki konumlarına göre operatörlerin listesi aşağıdadır. Bir operatör bu listede ne kadar yüksekse, o kadar fazla önceliğe sahiptir. Önceliği farklı olan iki operatörden önceliği yüksek olanı önce çalıştırılır.

Birli operatörler, bir işlenenin yürütülmesini gerektiren operatörlerdir. İkili operatörler iki işlenen gerektirir. Üçlü operatörler üç işlenen üzerinde çalışır.

Hiyerarşiye göre operatörlerin listesi:

1. Tekli operatörler: ++, -,!, Tekli - ve +, döküm operatörü.

2. Çarpma ve bölme: *, /,%.

3. Toplama ve çıkarma: +, -.

4. İlişki operatörleri:<, >, <=, >=.

5. Eşitlik ve eşitsizlik operatörleri: ==,! =.

6. Mantıksal ekleme "VE": &&.

7. Mantıksal "VEYA": ||.

8. Koşullu operatör:?:

9. Atama operatörleri: =, + =, - =, * =, / =,% =.

Yukarıdaki listede aynı satırda bulunan operatörler aynı önceliğe sahiptir. Aynı önceliğe sahip operatörler, program metninde göründükleri sırayla yürütülür. Unary ve atama operatörleri için bu sıranın, operatörlerin sağdan sola sırayla yürütüleceği akılda tutulmalıdır. Operatörlerin geri kalanı soldan sağa sırayla yürütülür. İfadelerin yürütme sırası değiştirilebilir. Bunun için parantez kullanılır. Önce parantez içindeki operatörler çalıştırılacaktır.

Java, değişkenleri işlemek için zengin bir operatör seti sağlar. Her şey Java operatörleri aşağıdaki gruplara ayrılabilir:

  • aritmetik operatörler;
  • karşılaştırma operatörleri;
  • bitsel operatörler;
  • mantıksal operatörler;
  • atama operatörleri;
  • diğer operatörler.

Aritmetik operatörler

Aritmetik operatörler- kullanılan matematiksel ifadeler aynı şekilde cebirde kullanılırlar. A tamsayı değişkeninin 10 ve B değişkeninin 20 olduğunu varsayalım. Aşağıdaki tablo Java'daki aritmetik operatörleri listeler:

Örnek

Aşağıdaki basit örnek, programlı aritmetik operatörleri gösterir. Aşağıdaki java kodunu kopyalayıp test.java dosyasına yapıştırın, bu programı derleyin ve çalıştırın:

Genel sınıf Testi (genel static void main (String args) (int a = 10; int b = 20; int c = 25; int d = 25; System.out.println ("a + b =" + (a + b) )); System.out.println ("a - b =" + (a - b)); System.out.println ("a * b =" + (a * b)); System.out.println (" b / a = "+ (b / a)); System.out.println ("b% a = "+ (b% a)); System.out.println (" c% a = "+ (c% a) )); System.out.println ("a ++ =" + (a ++)); System.out.println ("b-- =" + (a--)); // d'deki farkı kontrol edin ++ ve ++ d System .out.println ("d ++ =" + (d ++)); System.out.println ("++ d =" + (++ d));))

A + b = 30 a - b = -10 a * b = 200 b / a = 2 b% a = 0 c% a = 5 a ++ = 10 b-- = 11 d ++ = 25 ++ d = 27

Karşılaştırma Operatörleri

Aşağıdaki karşılaştırma operatörleri Java dilinde desteklenmektedir. A değişkeninin 10 ve B değişkeninin 20 olduğunu varsayalım. Aşağıdaki tablo, Java'daki ilişkisel veya karşılaştırma operatörlerini listeler:

ŞebekeAçıklamaÖrnek
== İki işlenenin değerlerinin eşit olup olmadığını kontrol eder, evet ise koşul doğru olur(A == B) - doğru değil
!= İki işlenenin değerlerinin eşit olup olmadığını kontrol eder, değerler eşit değilse koşul gerçekleşir.(A! = B) - değer doğru
> Sol işlenenin değerinin sağ işlenenin değerinden büyük olup olmadığını kontrol eder, evet ise koşul doğru olur(A> B) - doğru değil
Sol işlenenin değerinin sağ işlenenin değerinden küçük olup olmadığını kontrol eder, evet ise koşul doğru olur(A
>= Sol işlenenin değerinin sağ işlenenin değerinden büyük veya eşit olup olmadığını kontrol eder, evet ise koşul doğru olur(A> = B) - değerler doğru değil
Sol işlenenin değerinin sağ işlenenin değerinden küçük veya eşit olup olmadığını kontrol eder, evet ise koşul doğru olur(A

Örnek

Aşağıdaki basit örnek, Java'daki karşılaştırma operatörlerini programlı olarak gösterir. Aşağıdaki java kodunu kopyalayıp test.java dosyasına yapıştırın, bu programı derleyin ve çalıştırın:

Genel sınıf Testi (genel static void main (String args) (int a = 10; int b = 20; System.out.println ("a == b =" + (a == b)); System.out.println ("a! = b =" + (a! = b)); System.out.println ("a> b =" + (a> b)); System.out.println ("a = a =" + (b> = a)); System.out.println ("b"

A == b = yanlış a! = B = doğru a> b = yanlış a = a = doğru b

bitsel operatörler

Java, tamsayı türlerine uygulanabilecek birkaç bit düzeyinde operatör tanımlar: int, long, short, char ve byte. Java'da bitsel operatör, bitler üzerinde çalışır ve işlemi parça parça gerçekleştirir. a = 60 ise; ve b = 13; daha sonra ikili olarak aşağıdaki gibi olacaktır:

bir = 0011 1100
b = 0000 1101
-----------------
a & b = 0000 1100
a | b = 0011 1101
bir ^ b = 0011 0001
~ bir = 1100 0011

A tamsayı değişkeninin 60 ve B değişkeninin 13 olduğunu varsayalım. Aşağıdaki tablo Java'daki bitsel operatörleri listeler:

ŞebekeAçıklamaÖrnek
& (bit düzeyinde ve)İkili AND operatörü, her iki işlenende de varsa, sonuca biraz kopyalar.(A & B) 0000 1100 olan 12'yi verecektir.
| (bitsel veya)İkili VEYA operatörü, işlenenlerden herhangi birinde varsa, biraz kopyalar.(A | B) 0011 1101 olan 61'i verecektir.
^ (bit düzeyinde boole veya)İkili XOR operatörü, bir işlenende ayarlanmışsa, ancak her ikisinde de değilse biraz kopyalar.(A ^ B) 0011 0001 olan 49'u verecektir.
~ (bit düzeyinde tamamlayıcı)Binary'nin tamamlayıcı operatörüdür ve bitleri "çevirme" etkisine sahiptir.(~ A) ikili gösterimde 1100 0011'in tümleyen formu olan -61'i verecektir.
İkili sola kaydırma operatörü. Sol işlenenlerin değeri, sağ işlenen tarafından belirtilen bit sayısı kadar sola taşınır.A
>> (sağa kaydır)İkili sağa kaydırma operatörü. Sağ işlenenlerin değeri, sol işlenen tarafından belirtilen bit sayısı kadar sağa taşınır.A >> 2, 1111 olan 15'i verecektir.
>>> (sağa sıfır kaydırma)Sıfır sağa kaydırma operatörü. Sol işlenenlerin değeri, sağ işlenen tarafından belirtilen bit sayısı kadar sağa taşınır ve kaydırılan değerler sıfırlarla doldurulur.A >>> 2, 0000 1111 olan 15'i verecektir.

Örnek

Aşağıdaki basit örnek, Java'da programlı olarak bitsel operatörleri gösterir. Aşağıdaki java kodunu kopyalayıp test.java dosyasına yapıştırın, bu programı derleyin ve çalıştırın:

Genel sınıf Testi (genel static void main (String args) (int a = 60; / * 60 = 0011 1100 * / int b = 13; / * 13 = 0000 1101 * / int c = 0; c = a & b; / * 12 = 0000 1100 * / System.out.println ("a & b =" + c); c = a | b; / * 61 = 0011 1101 * / System.out.println ("a | b =" + c); c = a ^ b; / * 49 = 0011 0001 * / System.out.println ("a ^ b =" + c); c = ~ a; / * - 61 = 1100 0011 * / Sistem. out.println ("~ a =" + c); c = a> 2; / * 215 = 1111 * / System.out.println ("a >> 2 =" + c); c = bir >>> 2 ; / * 215 = 0000 1111 * / System.out.println ("a >>> 2 =" + c);))

Aşağıdaki çıktıyı alacaksınız:

A & b = 12 a | b = 61 a ^ b = 49 ~ a = -61 a> 15 a >>> 15

Mantıksal operatörler

Boole değişkeni A'nın doğru olduğunu ve B değişkeninin yanlış olduğunu varsayalım. Aşağıdaki tablo, Java'daki mantıksal işleçleri listeler:

Örnek

Genel sınıf Testi (public static void main (String args) (boolean a = true; boolean b = false; System.out.println ("a && b =" + (a && b)); System.out.println (" a | | b = "+ (a || b)); System.out.println ("! (a && b) = "+! (a && b));))

Bu, aşağıdaki çıktıyı üretecektir:

A && b = yanlış a || b = doğru! (a && b) = doğru

atama operatörleri

Aşağıdaki atama operatörleri Java dili tarafından desteklenir:

Şebeke Açıklama Örnek
= Basit atama operatörü, işlenenlerin sağ tarafından sol tarafına değerler atar C = A + B, A + B'nin değerini C'ye atayacaktır
+= "Ekle" atama operatörü, sol işlenene sağdaki değerleri atar. C + = A, C = C + A'ya eşdeğer
-= Atama operatörü "Çıkarma", sol işleneni sağ işlenenden çıkarır C - = A, C = C - A'ya eşdeğer
*= Atama operatörü "Çarpma", sağdaki işleneni soldaki işlenenle çarpar. C * = A, C = C * A'ya eşittir
/= Atama operatörü "Bölüm", sol işleneni sağ işlenene böler C / = A, C = C / A'ya eşittir
%= "Modül" atama operatörü, iki işlenen kullanan bir modül alır ve sonucunu sol işlenene atar. %C = A, C = %C A'ya eşdeğer
Sola kaydırma atama operatörü C
>>= Sağa kaydırma atama operatörü C >> = 2, C = C >> 2 gibi
&= Bit düzeyinde "VE" atama operatörü C & = 2, C = C & 2 gibi
^= Bit düzeyinde özel "VEYA" atama operatörü ("XOR") C ^ = 2, C = C ^ 2 gibi
|= Bit düzeyinde VEYA (VEYA) atama operatörü C | = 2, C = C | 2

Örnek

Aşağıdaki basit örnek, Java'daki programlı mantıksal operatörleri gösterir. Aşağıdaki java kodunu kopyalayıp test.java dosyasına yapıştırın, bu programı derleyin ve çalıştırın:

Genel sınıf Testi (genel static void main (String args) (int a = 10; int b = 20; int c = 0; c = a + b; System.out.println ("c = a + b =" + c) ); c + = a; System.out.println ("c + = a =" + c); c - = a; System.out.println ("c - = a =" + c); c * = a ; System.out.println ("c * = a =" + c); a = 10; c = 15; c / = a; System.out.println ("c / = a =" + c); a = 10; c = 15; c% = a; System.out.println ("c% = a =" + c); c> = 2; System.out.println ("c >> = 2 =" + c) ; c >> = 2; System.out.println ("c >> = a =" + c); c & = a; System.out.println ("c & = 2 =" + c); c ^ = a; System.out.println ("c ^ = a =" + c); c | = a; System.out.println ("c | = a =" + c);))

Aşağıdaki çıktıyı alacaksınız:

C = a + b = 30 c + = a = 40 c - = a = 30 c * = a = 300 c / = a = 1 c% = a = 5 c> = 2 = 5 c >> = 2 = 1 c & = a = 0 c ^ = a = 10 c | = a = 10

Diğer operatörler

Java dili tarafından desteklenen birkaç operatör daha vardır.

Üçlü operatör veya koşullu operatör (? :)

Üçlü operatör- üç işlenenden oluşan ve boole türündeki ifadeleri değerlendirmek için kullanılan bir operatör. Java'daki üçlü operatör, koşullu operatör olarak da bilinir. Bu. Hedef üçlü operatör veya koşullu operatör, bir değişkene hangi değerin atanacağına karar vermektir. Operatör şu şekilde yazılır:

Değişken x = (ifade)? doğruysa: yanlışsa

Örnek

Aşağıda bir örnek verilmiştir:

Genel sınıf Testi (genel static void main (String args) (int a, b; a = 10; b = (a == 1)? 20:30; System.out.println ("Değer b:" + b); b = (a == 10)? 20:30; System.out.println ("Değer b:" + b);))

Aşağıdaki çıktıyı alacaksınız:

B değeri: 30 b değeri: 20

Operatör örneği

Operatör örneği- nesnenin belirli bir türde (sınıf türü veya arabirim türü) olup olmadığını kontrol eder ve yalnızca başvurulan nesnenin değişkenleri için kullanılır. instanceof operatörü şu şekilde yazılır:

(Referans nesne değişkeni) instanceof (arayüz sınıfı / tipi)

Örnekleri

İfadenin sol tarafındaki başvurulan nesnenin değişkeni, sağ taraftaki arabirimin sınıf/tipi için testi geçerse, sonuç doğrudur. Aşağıda instanceof operatörünün bir örneği ve açıklaması verilmiştir:

Genel sınıf Testi (genel statik geçersiz ana (Dize args) (Dize adı = "Oleg"; // Tür, Dize olduğundan aşağıdakiler true değerini döndürür boolean sonuç = Dize örneğinin adı; System.out.println (sonuç);))

Aşağıdaki çıktıyı alacaksınız:

Karşılaştırılan nesne, atama hakkı için tür uyumluysa, bu operatör yine de true değerini döndürür. Başka bir örnek aşağıdaki gibidir:

Sınıf Araç () genel sınıf Araba, Aracı genişletir (genel static void main (String args) (Araç a = yeni Araba (); boolean sonucu = Arabanın bir örneği; System.out.println (sonuç);))

Aşağıdaki çıktıyı alacaksınız:

Java'da operatör önceliği

Operatör önceliği, bir ifadedeki terimlerin gruplandırılmasını belirler. Bu, ifadenin nasıl değerlendirildiğini etkiler. Bazı operatörler diğerlerinden daha yüksek önceliğe sahiptir; örneğin çarpma operatörü, toplama operatöründen daha yüksek önceliğe sahiptir:

Örneğin, x = 7 + 3 * 2. Burada x'e 20 değil 13 değeri atanır, çünkü "*" operatörü "+"dan daha yüksek önceliğe sahiptir, bu nedenle önce "3 * 2" çarpılır ve ardından "7" "eklenir".

Tabloda en yüksek önceliğe sahip operatörler en üste yerleştirilir ve öncelik seviyesi tablonun altına doğru düşürülür. Bir ifadede, Java'daki yüksek öncelikli operatörler soldan sağa doğru değerlendirilecektir.

Kategori Şebeke çağrışım
son düzeltme (). (puan) Soldan sağa
tekli ++ - - ! ~ Sağdan sola doğru
Çarpımsal * / % Soldan sağa
Katkı + - Soldan sağa
Vardiya >> >>> Soldan sağa
ilişkisel > >= Soldan sağa
eşitlik == != Soldan sağa
Bit düzeyinde "VE" & Soldan sağa
Bit düzeyinde özel "VEYA" ("XOR") ^ Soldan sağa
Bit düzeyinde "VEYA" ("VEYA") | Soldan sağa
Mantıksal "VE" && Soldan sağa
Mantıksal "VEYA" ("VEYA") || Soldan sağa
koşullu ?: Sağdan sola doğru
Atama = += -= *= /= %= >>= Sağdan sola doğru
Virgül , Soldan sağa

Bir sonraki derste Java programlamada döngü kontrolü hakkında konuşacağız. Bu eğitimde anlatılacak çeşitli türleri döngüler, yazılım geliştirmede döngülerin nasıl kullanılabileceği ve hangi amaçlarla kullanıldığı.

Java, ilk olarak 1995 yılında Sun Microsystems tarafından piyasaya sürülen bir programlama dili ve bilgi işlem platformudur. Java yüklü olmadan çalışmayan birçok uygulama ve web sitesi vardır ve bu tür web sitelerinin ve uygulamaların sayısı her geçen gün artmaktadır. Java hızlıdır, yüksek seviye koruma ve güvenilirlik. İtibaren dizüstü bilgisayarlar veri merkezlerine, oyun konsolları bilimsel gelişme için kullanılan süper bilgisayarlara cep telefonlarıİnternete - Java her yerde!

Java'yı indirmek ücretsiz mi?

Evet, Java'yı indirmek ücretsizdir. Web sitesinden en son sürümü indirin.

Satır içi geliştiriyorsanız veya ev Aletleri ve içinde Java teknolojilerini kullanmak istiyorsanız, Oracle uzmanlarıyla iletişime geçin ve detaylı bilgi Java'yı çeşitli cihaz türlerine entegre etme hakkında.

Neden en son Java sürümüne yükseltin?

Java'nın en son sürümü, bilgisayarınızda çalışan Java uygulamalarının performansını, kararlılığını ve güvenliğini artırmak için önemli geliştirmeler içerir. Bunu ayarlamak ücretsiz paket güncellemeler, bilgisayarınızda kurulu Java uygulamalarının güvenli ve verimli çalışmasını sağlayacaktır.

TEKNİK DETAYLAR
Şartları duydum" sanal makine Java "ve JVM. Bu yazılım Java?

Java Sanal Makinesi, İnternet üzerinden iletişim kurarken dahil olan Java yazılımının yalnızca bir yönüdür. Java Sanal Makinesi, doğrudan Java yazılımının indirilmesinde yerleşiktir ve Java uygulamalarının başlatılmasını desteklemek için kullanılır.

7 yanıt

Kavramsal fark basittir:

    Beyan: Bir sınıf, fonksiyon veya değişken gibi bir şeyin var olduğunu beyan ediyorsunuz. Bu sınıfın veya işlevin neye benzediği hakkında hiçbir şey söylemiyorsunuz, sadece var olduğunu söylüyorsunuz.

    Tanım. Bir sınıf, işlev veya değişken gibi bir şeyin nasıl uygulanacağını tanımlarsınız, yani gerçekte ne olduğunu söylersiniz.

Java'da aralarındaki fark küçüktür ve resmi olarak, beyan sadece tanımlayıcıyı değil aynı zamanda tanımını da içerir. Bu terimleri kişisel olarak ayrıntılı olarak şu şekilde yorumluyorum:

    sınıflar... Java, C / C ++ gibi bildirimleri ve tanımları gerçekten ayırmaz (başlık ve cpp dosyalarında). Onları ilan ettiğiniz yerde tanımlarsınız.

    Fonksiyonlar... Bir interface (veya soyut sınıf) yazarken, onu tanımlamadan bir fonksiyon bildirdiğinizi söyleyebilirsiniz. Bununla birlikte, düzenli işlevler, her zaman bildirildikleri yerde tanımlanır. İsterseniz, işlev gövdesini tanımınız olarak görün.

    Değişkenler... Bir değişken bildirimi şöyle görünebilir:

    (x değişkeninin var olduğunu ve int türünde olduğunu belirtiyorsunuz) yerel bir değişken veya üye ise. Java'nın, amacına göre belirlenen içermesi gereken olası değerler dışında x hakkında tanımlayacağı hiçbir bilgisi yoktur.

İşte terimleri nasıl kullandığıma dair hızlı bir genel bakış:

Soyut sınıf SomeClass (// class decl. // \ int x; // değişken decl. | // | public abstract void bazıMethod (); // fonksiyon decl. | // | public int bazıOtherMethod () (// fonksiyon decl. . | // | sınıf if (Math.random ()> .5) // \ | tanımlı dönüş x; // | işlev tanımı | başka // | | dönüş -x; // / | // |) / / |) // /

Java Dil Belirtimi, "bildirim" terimini geniş olarak tanımlar ve kullanır, ancak normal bir İngilizce sözcük dışında "tanım" kullanmaz.

Kanıtım, "beyan" teriminin JLS içindekiler ve dizin tablosunda birden çok kez görünmesi, ancak "tanım" kelimesinin de görünmemesidir.

Dolayısıyla, Java bağlamında "tanım" kelimesini kullanan birini gördüğünüzde, ya onu teknik olmayan bir anlamda kullanıyorlar ya da terminolojilerine dikkat etmiyorlar.

İkinci durumda, "beyan" teknik terimiyle aynı anlama gelebilirler veya başka bir anlama gelebilirler. Ve eğer başka bir şey ifade ediyorlarsa, onlara ne anlama geldiklerini sormalısınız. Eğer tanımladıysalar... yeterince adil, ama bu standart terminoloji değil.

"Tanım" diyen cevaplar, bir değişkenin başlatıldığı noktayı ifade eder, Java bağlamında özel olarak desteklenmez .... V Java başlatma değişken, bildirim noktasında veya sonraki bir atamada gerçekleşir. İkinci durumda, atama ve / veya başlatma dışında özel terim kullanılmaz ... veya gerekli değildir .... Değişken için depolamanın tahsis edildiği belirli bir nokta yoktur. Gerçekten de, değişkenin kendisi için alan tahsis edilmiş olma olasılığı vardır. önce, duyuruya ulaşılacaktır.

JLS belirtiminde Java'da "bildirim" teriminin kullanılmamasının nedeni, gerekli olmamasıdır.

  • Java, üyelerin herhangi bir sırayla bildirilmesine izin verdiği için "ileri bildirimlere" gerek yoktur.
  • Java'da, bir değişken için gereken yığın alanı bir derleme zamanı sabitidir, bu nedenle yığın ofset hesaplamaları derleme zamanında gerçekleşir. (Java'da bir dizinin bir yığın nesnesine referans olduğunu ... ve yığın çerçevesinde yalnızca referansın saklandığını unutmayın.)
  • Java'nın bir alan veya değişkenin "başlatmadan tanımlamasını" işleme şekli, ayrı bir "bildirim" gerektirmez. Değişken başlatma gerekiyorsa, bu kaynak kodunda birden çok noktada olabilir.

(Java'da tanımlamaya karşı tanımlamayı kullanabilecekleri tek yer soyut yöntemlerdir. Bunun dışında, tutarlılık için tanım olarak normal yöntem bildirimine başvurmak zorunda kalacaktı. Ve bu kafa karıştırıcı olurdu, bu yüzden onlar sadece "soyut" alt başlığı soyut bir yöntem bildirimi olarak adlandırın.)

C ve C ++ bunları farklı şekilde ele alır ve bu nedenle veri sayfalarında farklı "bildirim" ve "tanım" terimleri gerektirir. Güneş Sözlüğü tanımlarını kabul ediyorum: C/C++ merkezlidirler.

beyan: Bir tanımlayıcı belirleyen ve depolamasını (veriler için) ayırmaya veya bir uygulama sağlamaya (yöntemler için) gerek kalmadan öznitelikleri onunla ilişkilendiren bir ifade.

tanım: Depolama (veriler için) veya bir uygulama (yöntemler için) sağlayan bir bildirim.

Güneş sözlüğünü okuma şeklim şu şekilde olurdu:

Liste i; // bildirim - yığındaki değişken i = new ArrayList(); // tanım - değişkene bir referans verir

1. Beyanname yaratma demektir ilkel veya Nesne referans değişkeni, ancak sırasıyla bir değer veya nesne atamadan.

, Örneğin:

Int x; // x tipinin bildirimi int Cat myCat; // myCat'in Cat türünde bir Nesne bildirimi

2. Tanım, onlara değerler veya bir nesne atadığımız zamandır.

Int x = 5; Kedi myCat = yeni Kedi ();

3. Böyle bir yöntem olması durumunda ...

Genel soyut geçersiz git (); // Yöntem Bildirimi (Özet yöntem) public void go () (// Yöntem Tanımlama // Kodunuz)

Örneğin bu soruyu daha iyi açıklayabileceğimi düşünüyorum.

, Scala, Python, BeanShell, Kotlin, Gentee

Lisans GNU Genel Kamu Lisansı / Java Topluluğu Süreci Alan java.com

Bu programları yürütme yönteminin avantajı, bayt kodunun işletim sistemi ve donanımdan tamamen bağımsız olmasıdır; bu, Java uygulamalarını karşılık gelen bir sanal makinenin bulunduğu herhangi bir cihazda çalıştırmanıza izin verir. Java teknolojisinin bir diğer önemli özelliği, bir programın yürütülmesinin tamamen sanal bir makine tarafından kontrol edildiği esnek bir güvenlik sistemidir. Programın belirtilen yetkisini aşan herhangi bir işlem (örneğin, verilere yetkisiz erişim veya başka bir bilgisayara bağlanma girişimi) anında kesintiye neden olacaktır.

Sanal makine konseptinin dezavantajları genellikle performans düşüşünü içerir. Bir dizi iyileştirme, Java programlarının yürütme hızını biraz artırdı:

  • bayt kodunu çevirmek için teknolojinin kullanımı makine kodu doğrudan program çalışırken (JIT teknolojisi) sınıf versiyonlarını makine koduna kaydetme yeteneği ile,
  • standart kitaplıklarda platform odaklı kodun (yerel kod) geniş kullanımı,
  • hızlandırılmış bayt kodu işleme sağlayan donanım (örneğin, bazı ARM işlemcileri tarafından desteklenen Jazelle teknolojisi).

shootout.alioth.debian.org'a göre, yedi için farklı görevler Java'daki yürütme süresi, bazı durumlarda C / C ++'dan ortalama bir buçuk ila iki kat daha uzundur Java daha hızlı, ve bazı durumlarda 7 kat daha yavaş. Öte yandan, çoğu için Java makinesinin bellek tüketimi, C/C++ programından 10-30 kat daha fazlaydı. Ayrıca, Java test senaryolarında C ++ 'daki benzer programlara kıyasla önemli ölçüde daha düşük performans ve daha yüksek bellek tüketiminin olduğu Google tarafından yapılan bir çalışma da dikkate değerdir.

Java sanal makine ortamının konsepti ve çeşitli uygulamalarının arkasındaki fikirler, birçok meraklıya sanal bir makinede çalışan programlar oluşturmak için kullanılabilecek dillerin listesini genişletme konusunda ilham verdi. Bu fikirler, Microsoft'un .NET platformunun temeli olan Ortak Dil Altyapısı CLI belirtiminde de ifadesini buldu.

Sürüm geçmişi

JDK 1.0

Java geliştirme 1990'da başladı, ilk resmi sürüm Java 1.0, yalnızca 21 Ocak 1996'da piyasaya sürüldü. Kod adı Meşe.

JDK 1.1

  • Erişilebilirlik kitaplığı.
  • Java 2D.
  • Sürükle ve bırak teknolojisi desteği.
  • Japonca, Çince ve Korece giriş desteği dahil olmak üzere tam Unicode desteği.
  • Çeşitli popüler formatlarda ses dosyalarını oynatma desteği.
  • Tam CORBA teknolojisi desteği.
  • JIT derleyicisi, geliştirilmiş performans.
  • Java programlarının profilini çıkarma desteği de dahil olmak üzere JDK takım geliştirmeleri.

J2SE 1.2

Çıkış tarihi 8 Aralık 1998. Oyun alanı kod adı. Bu durumda bir karışıklık var. Kitaplar, örneğin Beginning Java 2, Ivor Horton tarafından (Mar 1999), aslında J2SE 1.2'de yayınlanmıştır ( eski isim- Java 2). Bununla birlikte, bugüne kadar, bu tür kitaplar yayınlanmaktadır, örneğin: H. M. Deytel, P. J. Deytel, S. I. Santry. Java programlama teknolojileri 2. Dağıtık uygulamalar (2011).

Bildiğiniz gibi, Java 2'nin tarihsel olarak sonraki sürümlerle değiştirildiği bir zamanda, bu tür kitap başlıkları, gerçekte hangi Java sürümü hakkında yazıldığını anlama konusunda kafa karıştırıcıdır. J2SE 1.2, Java 2 olarak kabul edilirse ve kitap yazarları Java 2 için JDK 7 alırsa, bu tam bir kafa karışıklığına yol açar.

J2SE 1.3

J2SE 1.4

J2SE 5.0

Java 5.0 özelliği, kod adı Tiger olan 30 Eylül 2004'te yayınlandı. Bu sürümden itibaren resmi indeksleme değiştirildi, Java 1.5 yerine Java 5.0 olarak adlandırmak daha doğru. Sun'ın dahili indekslemesi aynı kalır - 1.x. Küçük değişiklikler artık indekslemeyi değiştirmeden "Güncelleme" kelimesi veya "u" harfi kullanılarak dahil edilmektedir, örneğin Java Development Kit 5.0 Güncelleme 22. Güncellemelerin hem hata düzeltmelerini hem de API, JVM'ye küçük eklemeleri içerebileceği varsayılmaktadır. .

Bu sürümde, geliştiriciler dile eklediler bütün çizgi temel eklemeler:

  • Numaralandırılmış türler. Java'da daha önce bulunmayan türler, C++'a benzer şekilde biçimlendirilmiştir, ancak aynı zamanda bir dizi ek özelliklere de sahiptirler.
    • Numaralandırılmış bir tür, tam teşekküllü bir Java sınıfıdır, yani bir yapıcıya, alanlara, gizli ve soyut olanlar da dahil olmak üzere yöntemlere sahip olabilir.
    • Bir numaralandırma arabirimleri uygulayabilir.
    • Numaralandırmalar için, bir türün değerlerini ada göre, isimlere karşılık gelen sembolik değerleri, bir sayı ile bir değer arasındaki dönüşümleri elde etmeyi ve numaralandırılmak üzere türü kontrol etmeyi mümkün kılan yerleşik yöntemler vardır.
  • Ek açıklamalar - kodun yürütülmesini etkilemeyen, ancak kod ve yürütülmesi hakkında çeşitli bilgiler elde etmek için kullanılabilen program metnine meta veriler ekleme yeteneği. Açıklamalı kodu kullanmak için bir araç seti aynı zamanda yayınlandı. Ek açıklamaların bir kullanımı, Java kodu için test birimlerinin oluşturulmasını basitleştirmektir.
  • Genel programlama araçları (İngilizce jenerikler) - Eyfel'e benzer bir mekanizma (daha sonra C #'da da göründü, temelde C ++ şablonlarından farklıydı), bu, rastgele bir nesne türünün alanları ve parametreleriyle sınıflar ve yöntemler oluşturmayı mümkün kılar. Bu mekanizmayı kullanarak, Java standart kitaplık koleksiyonlarının yeni sürümleri uygulanır.
  • Tanımsız sayıda parametreye sahip yöntemler.
  • Otomatik Kutulama / Kutu Açma - otomatik dönüştürme skaler Java türleri ile karşılık gelen sarmalayıcı türleri arasında (örneğin, int - Tamsayı arasında). Bu yeteneğe sahip olmak, bariz durumlarda açık tür dönüşümleri gerçekleştirme ihtiyacını ortadan kaldırarak kod tasarrufu sağlar.
  • Statik alanların ve yöntemlerin içe aktarılmasına izin verilir.
  • Dil, bir nesne koleksiyonu (yineleyici, İngilizce foreach) üzerinde bir döngü başlattı.
  • Yorumları kaynak kodda otomatik olarak belgelemek için kullanılan Javadoc yorumlarının kullanımı tanıtıldı.

Java SE6

Sürüm, 11 Aralık 2006'da Mustang kod adıyla yayınlandı. Resmi indeksleme değiştirildi - beklenen 6.0 yerine sürüm 6 olarak listeleniyor. Java 5.0'daki gibi küçük değişiklikler, örneğin Java Standard Edition Development Kit 6 Güncelleme 27 gibi düzenli sürüm güncellemelerinde yapılır. Aşağıdaki değişiklikler yapıldı:

Java fx

Java ME Gömülü

Java SE7

Sürüm, 28 Temmuz 2011'de Dolphin kod adıyla yayınlandı. V son sürüm Java Standard Edition 7, önceden planlanmış tüm değişiklikleri içermiyordu. Geliştirme planına göre ("B" planı), yeniliklerin dahil edilmesi iki bölüme ayrılacaktır: Java Standard Edition 7 (lambda hesabı olmadan, Jigsaw projesi ve Coin geliştirmelerinin bir parçası) ve Java Standard Edition 8 (her şey) başka), yılın 2012'nin sonu için planlandı.

Java Standard Edition 7 (Java Platform, Standard Edition 7) olarak adlandırılan yeni sürümde, çok sayıda hatayı düzeltmenin yanı sıra çeşitli yenilikler de tanıtıldı. Bu nedenle, örneğin, Java Standard Edition 7'nin bir referans uygulaması olarak, tescilli JDK paketi değil, onun açık uygulaması OpenJDK kullanıldı ve platformun yeni sürümünün piyasaya sürülmesi, Oracle mühendislerinin üyelerle yakın işbirliği içinde hazırlandı. küresel Java ekosistemi, JCP (Java Topluluğu Süreci) komitesi ve OpenJDK topluluğu tarafından. Hepsi Oracle tarafından sağlanır ikili dosyalar Java Standard Edition 7 referans uygulamaları OpenJDK kod tabanından oluşturulmuştur, referans uygulamasının kendisi, tescilli ürünlerle dinamik bağlantıya izin veren GNU ClassPath istisnaları ile GPLv2 lisansı altında tamamen açık kaynaktır. Diğer yenilikler arasında Coin projesi tarafından geliştirilen bir dizi küçük Java dili geliştirmesinin entegrasyonu, Ruby, Python ve JavaScript gibi dinamik olarak yazılan programlama dilleri için ek destek, sınıfların URL yüklemesi için destek, JAXP 1.4 dahil güncellenmiş XML yığını, JAXB 2.2a ve JAX-WS 2.2 ve diğerleri.

Java Standard Edition 7'nin yayınlanmasından 5 gün önce, varsayılan olarak etkinleştirilen ve Java sanal makinesinin çökmesine neden olan etkin döngü optimizasyonunda birkaç ciddi hata keşfedildi. Oracle uzmanları bunun gibi hatalar buldu kısa dönem düzeltilemedi, ancak ikinci güncellemede (Java 7 Güncelleme 2) ve kısmen birinci güncellemede düzeltileceklerine söz verdiler.

yenilikler listesi

Java SE 8

yenilikler listesi

  • Lambda ifadeleri için tam destek.
  • Varsayılan işlevselliği desteklemek için arabirimlerdeki varsayılan anahtar sözcük.
  • Yöntem referansları.
  • İşlevsel arayüzler (tahminler, sağlayıcılar, vb.)
  • Koleksiyonlarla çalışmak için akışlar
  • Tarihlerle çalışmak için yeni API
  • … (bitmedi)

Java SE 9

yenilikler listesi

  • Yapboz entegrasyonu.
  • Java dışı işletim sistemi süreçleriyle daha iyi etkileşim kurmak için İşlem API'sı güncellendi.
  • HTTP 2.0, websockets desteği ve kullanımdan kaldırılan HttpURLConnection'ın yerine yeni HTTP istemcisi.
  • Yeni derleyici "Graal"
  • sıkıştırılmış dizeler
  • Java Microbenchmark Donanımı (JMH)
  • ...(bitmedi)

Java platformu sınıflandırması

Java içinde birkaç ana teknoloji ailesi vardır:

  • Java SE - Java'nın ana sürümü olan Java Standard Edition, derleyiciler, API'ler, Java Runtime Environment; oluşturmak için uygun özel uygulamalaröncelikle masaüstü sistemler için.
  • Java EE - Java Enterprise Edition, kurumsal düzeyde yazılım oluşturmaya yönelik bir dizi belirtimdir.
  • Java ME - Java Micro Edition, sınırlı yazılıma sahip cihazlarda kullanılmak üzere tasarlanmıştır işlem gücüörneğin cep telefonlarında, PDA'larda, gömülü sistemlerde;
  • JavaFX, Zengin İstemci Platformu olarak Java'nın evriminde bir sonraki adım olan bir teknolojidir; kurumsal uygulamalar ve iş için grafik arayüzler oluşturmak üzere tasarlanmıştır.
  • Java Kartı - teknoloji sağlar güvenli çevre Akıllı kartlarda ve çok sınırlı bellek ve işleme yeteneklerine sahip diğer cihazlarda çalışan uygulamalar için.

Java ve Microsoft

2005 yılında Microsoft tarafından.NET platformu için, resmi Java dili belirtimine uymayan ve ardından Visual Studio 2008'den başlayarak standart Microsoft Visual Studio geliştirici araçlarından hariç tutulan Java benzeri bir dil tanıtıldı.

Java ve Android

Java dili, mobil uygulamalar oluşturmak için aktif olarak kullanılmaktadır. işletim sistemi Android. Bu durumda, programlar Dalvik sanal makinesi tarafından kullanılmak üzere standart olmayan bir bayt kodunda derlenir (Android 5.0 Lollipop'tan başlayarak, sanal makinenin yerini ART alır). Böyle bir derleme için şunu kullanın: ek araç, yani Google tarafından geliştirilen Android SDK'sı (Yazılım Geliştirme Kiti).

Uygulama geliştirme, Android Studio, NetBeans, Eclipse kullanılarak yapılabilir. eklenti android Geliştirme Araçları (ADT) veya IntelliJ IDEA. JDK sürümü 5.0 veya üzeri olmalıdır.

Aşağıdaki şirketler ağırlıklı olarak Java (J2EE) teknolojilerine odaklanmaktadır: SAP, IBM, Oracle. Özellikle, Oracle Veritabanı, JVM'yi kendi bileşen parçası, örneğin saklı yordamlar dahil olmak üzere DBMS'yi Java dilinde doğrudan programlama yeteneği sağlar.

Verim

Java programları daha yavaş ve daha pahalı olmakla ün yapmıştır rasgele erişim belleği C dilinde yazılanlardan daha fazla. Bununla birlikte, Java dilinde yazılmış programların yürütme hızı, daha iyi kod analizini destekleyen diğer dil özelliklerine ek olarak (iç sınıflar gibi) diğer dil özelliklerine ek olarak, 1997-1998'de JIT derleyicisi olarak adlandırılan sürüm 1.1'in piyasaya sürülmesiyle önemli ölçüde iyileştirildi. , StringBuffer sınıfı, basitleştirilmiş boole hesaplaması vb.). Ayrıca Java sanal makinesi optimize edilmiştir - 2000'den beri bunun için HotSpot sanal makinesi kullanılmaktadır. Şubat 2012 itibariyle, Java 7 kodu, C kodundan yaklaşık 1,8 kat daha yavaştır.

Birkaç platform, Java [ ]. Örneğin, Java kodunu bir yazılım JVM'si yerine donanım üzerinde yürüten mikrodenetleyiciler ve ayrıca ARM işlemciler Jazelle seçeneği aracılığıyla Java bayt kodunun yürütülmesini destekler.

Ana Özellikler

Paket içinde iki bağımsız ad alanı vardır: değişkenler ve yöntemler.

Örnek program

Jenerik Kullanım Örneği

java.util'i içe aktar *; public class Sample (public static void main (String args) ( // Bir şablondan bir nesne oluşturun. Liste< String >dizeler = yeni LinkedList< String >(); Teller. ekle ("Merhaba"); Teller. ekle ("dünya"); Teller. Ekle ("!"); for (String s: string) (System.out.print (s + "");)))

yansıma örneği

java.lang.reflect.Field'i içe aktarın; java.lang.reflect.Method'u içe aktarın; class TestClass (özel int değeri; public int getValue () (dönüş değeri;) public void setValue (int valueIn) (bu. değer = valueIn;)) genel sınıf Ana (genel statik geçersiz ana (String argümanları) (TestClass testClass = yeni TestClass (); for (Field field: testClass. GetClass (). GetDeclaredFields()) (System. Out. Printf ("name:% s, type:% s \ n", alan. GetName (), alan. GetType ( ). getCanonicalName ());) for (Yöntem yöntemi: testClass. getClass (). getDeclaredMethods ()) (System. out. printf ("ad:% s, dönüş türü:% s \ n", yöntem. getName () , yöntem. getReturnType (). getCanonicalName ());)))

Ek Açıklamaları kullanmaya bir örnek

içe aktarmak java.lang.annotation.ElementType; içe aktarmak java.lang.annotation.Tutma; içe aktarmak java.lang.annotation.RetentionPolicy; java.lang.annotation.Target'ı içe aktarın; @Retention (RetentionPolicy. RUNTIME) @Target (ElementType. TYPE) public @interface Annotation (public boolean value () default false;) @Annotation (değer = true) public class TestClass () public class Main (public static void main (String) args) (TestClass testClass = new TestClass (); Açıklama notu = testClass. getClass (). getAnnotation (Annotation. class); if (annotation! = null) (System. out.printf ("değer:% s \ n", açıklama. değer ());)))

Anahtar fikirler

ilkel türler

Java'nın yalnızca 8 ilkel (skaler, basit) türü vardır: boolean, byte, char, short, int, long, float, double. Ayrıca yardımcı bir dokuzuncu ilkel tür vardır - void, ancak, bu türden değişkenler ve alanlar kodda bildirilemez ve türün kendisi, yansımada kullanılmak üzere yalnızca karşılık gelen sınıfı tanımlamak için kullanılır: örneğin, Void kullanılarak sınıfında, void türünde belirli bir yöntemin olup olmadığını öğrenebilirsiniz: Hello.class.getMethod ("main", String.class) .getReturnType () == Void.TYPE.

İlkel türlerin değerlerinin uzunlukları ve aralıkları, uygulama tarafından değil standart tarafından tanımlanır ve tabloda gösterilir. Karakter türü, yerelleştirme kolaylığı için iki bayt yapıldı (Java'nın ideolojik ilkelerinden biri): standart oluşturulduğunda, Unicode -16 zaten vardı, ancak Unicode-32 yoktu. Sonuç olarak tek baytlık tür kalmamış, yeni bir bayt türü eklenmiş ve Java'da diğer dillerden farklı olarak imzasız değildir. Float ve double türleri özel değerlere sahip olabilir + ∞ (\ displaystyle + \ infty), ve bir sayı değil (NaN). Double tipi için, Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NaN; kayan nokta türü için - aynı, ancak Çift yerine Kayan nokta öneki ile. Asgari ve maksimum değerler kabul edilen float ve double türleri de standartlaştırılmıştır.

Bir çeşit Uzunluk (bayt) Aralık veya değer kümesi
boole Dizilerde 1, değişkenlerde 4 doğru yanlış
bayt 1 −128..127
karakter 2 0..2 16 -1 veya 0..65535
kısa boylu 2 -2 15 ..2 15 -1 veya -32768..32767
int 4 -2 31 ..2 31 -1 veya -2147483648..2147483647
uzun 8 −2 63 ..2 63 -1 veya yaklaşık −9.2 · 10 18 ..9.2 · 10 18
batmadan yüzmek 4 - (2-2 −23) · 2 127 .. (2-2 −23) · 2 127 veya yaklaşık −3.4 · 10 38 ..3.4 · 10 38 ve - ∞ (\ displaystyle - \ infty), ∞ (\ displaystyle \ elli), NaN
çift 8 - (2-2 −52) · 2 1023 .. (2-2 −52) · 2 1023 veya yaklaşık −1.8 · 10 308 ..1.8 · 10 308 ve - ∞ (\ displaystyle - \ infty), ∞ (\ displaystyle \ elli), NaN

Bu katı standardizasyon, Java için ideolojik gereksinimlerden biri olan dil platformunu bağımsız hale getirmek için gerekliydi. Ancak, platform bağımsızlığıyla ilgili küçük bir sorun hala devam ediyor. Bazı işlemciler, sonuçların ara depolanması için 10 baytlık kayıtlar kullanır veya başka yollarla hesaplamaların doğruluğunu artırır. Java'yı farklı sistemler arasında olabildiğince uyumlu hale getirmek için önceki sürümlerde, hesaplamaların doğruluğunu artırmaya yönelik herhangi bir yöntem yasaklanmıştı. Ancak, bu performansta bir düşüşe neden oldu. Özellikle programları yavaşlatarak bunun için ödeme yapmanız gerekiyorsa, platform bağımsızlığı uğruna çok az kişinin doğruluğun bozulmasına ihtiyaç duyduğu ortaya çıktı. Birçok protestodan sonra bu yasak kaldırıldı, ancak hassasiyet geliştirmelerine izin vermemek için strictfp anahtar kelimesi eklendi.

Matematiksel işlemlerde dönüşümler

Java dilinde aşağıdaki kurallar geçerlidir:

  1. Bir işlenen double türündeyse, diğeri de double türüne dönüştürülür.
  2. Aksi takdirde, bir işlenen varsa yüzer tip, diğeri de şamandıraya dönüştürülür.
  3. Aksi takdirde, bir işlenen uzunsa, diğeri de uzun'a dönüştürülür.
  4. Aksi takdirde, her iki işlenen de int'ye dönüştürülür.

Yerleşik türlerin bu örtük dönüştürme yöntemi, C++'daki tür dönüştürme ile tamamen aynıdır.

Nesne değişkenleri, nesneler, referanslar ve işaretçiler

Java dilinde yalnızca dinamik olarak oluşturulan nesneler... Ayrıca, bir nesne türünün değişkenleri ve Java'daki nesneler tamamen farklı varlıklardır. Nesne değişkenleri referanslardır, yani dinamik olarak oluşturulmuş nesnelere yönelik örtük işaretçilerdir. Bu, değişkenleri bildirmek için sözdizimi tarafından vurgulanır. Yani, Java'da şunu yazamazsınız:

çift ​​a [10] [20]; Foo b (30);

double a = yeni double [10] [20]; Foo b = yeni Foo (30);

Atamalar, alt programlar ve karşılaştırmalar sırasında nesne değişkenleri işaretçiler gibi davranır, yani nesne adresleri atanır, kopyalanır ve karşılaştırılır. Ve bir nesne değişkeni kullanan bir nesnenin veri alanlarına veya yöntemlerine erişirken, özel referans kaldırma işlemleri gerekmez - bu erişim, nesne değişkeni nesnenin kendisiymiş gibi gerçekleştirilir.

İlkel dışındaki herhangi bir türdeki değişkenler, nesne değişkenleridir. Java'da açık işaretçiler yoktur. C, C ++ ve diğer programlama dillerindeki işaretçilerin aksine, Java'daki referanslar, kullanımlarındaki katı kısıtlamalar nedeniyle son derece güvenlidir, özellikle:

Özel olarak getirilen bu kısıtlamalar nedeniyle, Java'da belleği doğrudan fiziksel adresler düzeyinde değiştirmek mümkün değildir (her ne kadar hiçbir şeye işaret etmeyen bir referansın değeri tanımlanmış olsa da: null).

İlkel bir tür için bir işaretçiye ihtiyacınız varsa, ilkel türlerin sarmalayıcı sınıfları kullanılır: Boolean, Byte, Character, Short, Integer, Long, Float, Double.

Bağlantı çoğaltma ve klonlama

Nesne değişkenlerine referans verildiğinden, atama sırasında nesnenin kopyalanması yoktur. Yani yazarsan

Foo foo, bar; … Çubuk = foo;

daha sonra adres, foo değişkeninden bar değişkenine kopyalanacaktır. Yani foo ve bar aynı hafıza alanına yani aynı nesneye işaret edecek; foo tarafından başvurulan bir nesnenin alanlarını değiştirmeye çalışmak, çubuğun ilişkili olduğu nesneyi değiştirir ve bunun tersi de geçerlidir. Tam olarak bir tane daha almanız gerekiyorsa kopya orijinal nesne için, nesnenin bir kopyasını oluşturan klon () yöntemini (C++ terminolojisinde üye işlevi) veya (daha az sıklıkla) kopyalama yapıcısını (Java'daki yapıcılar sanal olamaz, bu nedenle bir örnek) kullanın. soyundan gelen sınıfın, ata sınıfın yapıcısı tarafından hatalı bir şekilde kopyalanacaktır; klon yöntemi, istenen oluşturucuyu çağırır ve böylece bu sınırlamayı atlamanıza izin verir).

klon () yöntemi, sınıfın Klonlanabilir arabirimi uygulamasını gerektirir (arayüzler için aşağıya bakın). Sınıf, Klonlanabilir arabirimi uygularsa, varsayılan olarak klon () tüm alanları kopyalar ( sığ kopya). Kopyalamanız değil, alanları klonlamanız gerekiyorsa (ve bunların alanlarını vb.), klonlama () yöntemini geçersiz kılmanız gerekir. klon () yöntemini tanımlamak ve kullanmak genellikle basit bir iş değildir.

Değişkenleri Başlatma

Tüm değişkenler ya açık tanım gerektirir ya da otomatik olarak sıfırlarla doldurulur (0, boş, bir dizi sıfır). Bu nedenle, başlatılmamış belleğin yanlışlıkla kullanılmasıyla ilişkili Heisenbug'lar, tipik olan düşük seviyeli diller C gibi

Çöp toplama

Java dili bir nesneyi bellekten açıkça kaldıramaz - bunun yerine Çöp Toplama uygulanır. Geleneksel [ ] çöp toplayıcıya belleği boşaltmak için bir ipucu vermenin bir püf noktası, değişkene boş bir boş değer atamaktır. Ancak bu, nesnenin değiştirildiği anlamına gelmez. boş, kesinlikle ve hemen silinecektir, ancak bu nesnenin gelecekte silineceğinin garantisi vardır. Bu teknik yalnızca nesneye yapılan başvuruyu kaldırır, yani işaretçiyi bellekteki nesneden ayırır. Kullanımdaki değişkenlerden veya nesnelerden en az bir referans onu gösterdiği sürece, nesnenin çöp toplayıcı tarafından geri alınmayacağı akılda tutulmalıdır. Zorunlu çöp toplamayı başlatmak için de yöntemler vardır, ancak çalışma zamanı tarafından çağrılmaları garanti edilmez ve normal çalışma için önerilmez.

Sınıflar ve fonksiyonlar

Java yordamsal bir dil değildir: herhangi bir işlev yalnızca bir sınıf içinde var olabilir. Bu, "işlev" veya "üye işlev" kavramının olmadığı, yalnızca Java dilinin terminolojisini vurgular. yöntem... Standart işlevler de yöntem haline geldi. Örneğin, Java'da sin() işlevi yoktur, ancak Math sınıfının bir Math.sin() yöntemi vardır (sin()'e ek olarak, cos(), exp(), sqrt() içerir. , abs () yöntemleri ve diğerleri). Java'daki yapıcılar yöntem olarak kabul edilmez. Java'da yıkıcı yoktur ve finalize () yöntemi hiçbir şekilde bir yıkıcıya benzemez.

yapıcılar

Yapıcı, yeni bir nesne oluşturulduğunda zorunlu olarak çağrılan özel bir yöntemdir, yani sınıf yapıcısı çağrılmadan bir nesne (sınıf örneği) oluşturulamaz. Bir sınıfın örneğini oluştururken tüm değişkenleri başlatmak her zaman uygun değildir, bu nedenle örnek değişkenler genellikle bir yapıcının gövdesi içinde bildirilir ve sınıf başlatıldığında yapıcı argümanları olarak başlatılır. Nesne oluşturulduğunda bazı değerlerin varsayılan olarak oluşturulması bazen daha kolaydır. Bu durumda, değişkenler yapıcının gövdesi içinde bildirilir ve başlatılır.

Yapıcı, nesneyi doğrudan oluşturma zamanında başlatır. Oluşturucunun adı, büyük/küçük harf dahil, sınıfın adıyla aynıdır ve yapıcının sözdizimi, dönüş değeri olmayan bir yönteme benzer.

özel int Kedi(); // Cat adlı bir yöntem böyle görünür Kedi (); // Cat sınıfının yapıcısı böyle görünür

Bir yöntemden farklı olarak, bir yapıcı hiçbir zaman hiçbir şey döndürmez.

Yapıcı, sınıfın bir nesnesini oluştururken gerçekleştirilecek eylemleri tanımlar ve önemli kısım sınıf. Tipik olarak, programcılar açıkça bir kurucu belirtmeye çalışırlar. Açık bir kurucu yoksa, Java varsayılan olarak kullanım için onu otomatik olarak (boş) oluşturur.

bir sınıf oluşturalım Kutu sadece kutunun ilk değerlerini ayarlayacak bir kurucu ile.

sınıf Kutu (int genişlik; // kutu genişliği int yükseklik; // kutu yüksekliği int derinlik; // kutu derinliği// Yapıcı Kutusu (int a, int b) (genişlik = a; yükseklik = b; derinlik = 10;) // kutunun hacmini hesapla int getVolume () (dönüş genişliği * yükseklik * derinlik;))

Statik yöntemler ve alanlar

Java (ve C++) kullanır statik alanlar ve statik yöntemler(İngilizce statik yöntem - programlama teorisinde bunlara sınıf yöntemleri de denir), anahtar kullanılarak ayarlanır kelimeler statik... Statik alanlar (sınıf değişkenleri) C++ ile aynı anlama sahiptir: bu tür alanların her biri sınıfın bir özelliğidir, bu nedenle statik alanlara erişmek için ilgili sınıfı başlatmanız gerekmez.

Örneğin, Math sınıfında uygulanan matematiksel fonksiyonlar bu sınıfın sadece statik metotlarıdır. Bu nedenle, biri yazabilir

çift ​​x = Matematik. günah (1);

Matematik m = yeni Matematik (); çift ​​x = m. günah (1);

Statik yöntemler nesnelerden (sınıf örnekleri) bağımsız olarak var olduklarından, bu sınıfın sıradan (statik olmayan) alanlarına ve yöntemlerine erişimleri yoktur. Özellikle, statik bir yöntemi uygularken bu tanımlayıcıyı kullanmak yasa dışıdır.

Statik içe aktarma özelliği sayesinde sınıf belirtmeden de statik fonksiyonları ve sabitleri çağırmak mümkündür, böylece kod yerine

çift ​​x = Matematik. sin (Matematik tan (Matematik sqrt (y)) + Matematik kat (24.5)) + Matematik. cos (42 * Matematik PI);

kod yaz

statik Java.lang.Math'i içe aktar *; ... çift x = günah (tan (sqrt (y)) + kat (24.5)) + cos (42 * PI);

eksiksizlik

Bir alanı, yöntemi veya sınıfı tanımlarken final anahtar sözcüğünün farklı anlamları vardır.

  1. Son alan Açıklamada veya sınıfın yapıcısında bir sınıf başlatılır (ve statik alan statik başlatma bloğundadır). Daha sonra, değeri değiştirilemez. Bir sınıfın veya değişkenin statik alanı sabit bir ifadeyle başlatılırsa, derleyici tarafından adlandırılmış bir sabit olarak ele alınır; bu durumda, değerleri switch ifadelerinde (int tipi sabitler için) ve bir if ifadesiyle kullanıldığında koşullu derleme (boole tipi sabitler için) için kullanılabilir.
  2. Değerler yerel değişkenler, ve yöntem parametreleri final anahtar kelimesiyle işaretlenenler, atamadan sonra değiştirilemez. Ayrıca değerleri anonim sınıflar içinde kullanılabilir.
  3. Yöntem final kelimesiyle işaretlenmiş bir sınıf, kalıtım tarafından geçersiz kılınamaz.
  4. son Sınıf mirasçıları olamaz.

Soyutluk

V Java yöntemleri Açıkça statik, nihai veya özel olarak bildirilmeyenler, C++ terminolojisinde sanaldır: tabanda farklı tanımlanmış bir yöntemi çağırırken ve sınıfları devralırken, her zaman bir çalışma zamanı denetimi gerçekleştirilir.

Java'da soyut bir yöntem (soyut değiştirici), parametreleri ve dönüş türü olan ancak gövdesi olmayan bir yöntemdir. Türetilmiş sınıflarda soyut bir yöntem tanımlanır. Soyut bir yöntemin C++'daki analoğu saf sanal bir işlevdir. Bir sınıftaki soyut yöntemleri tanımlamak için sınıfın kendisi de soyut olarak tanımlanmalıdır. Soyut bir sınıfın nesneleri oluşturulamaz.

Arayüzler

Java'daki en yüksek soyutluk derecesi arayüzdür (arayüz değiştiricisi). Tüm arayüz yöntemleri soyuttur: soyut bir tanımlayıcı bile gerekli değildir. Bir arabirim Java'da bir sınıf olarak kabul edilmez, ancak aslında tamamen soyut bir sınıftır. Sınıf devralabilir / genişletmek(uzatır) başka bir sınıfı veya fark etmek(uygular) arayüzü. Ayrıca, bir arabirim başka bir arabirimi devralabilir / genişletebilir.

Java'da bir sınıf birden fazla sınıfı miras alamaz, ancak birden çok arabirim uygulayabilir. Arayüzlerin çoklu kalıtımı yasak değildir, yani bir arayüz birkaç taneden miras alabilir.

Arayüzler, yöntemler için parametre türleri olarak kullanılabilir. Arayüzler somutlaştırılamaz.

işaretleyici arayüzleri

Java, uygulama yöntemleri içermeyen, ancak JVM tarafından özel bir şekilde işlenen arabirimlere sahiptir:

  • java.lang.Klonlanabilir
  • java.io.Seri hale getirilebilir
  • java.util.RandomErişim
  • java.rmi.Uzaktan kumanda

Java şablonları (jenerikler)

Java 5'ten başlayarak, dilin genel bir programlama mekanizması vardır - dışa doğru C ++ şablonlarına yakın şablonlar. Sınıfların ve yöntemlerin açıklamasında özel bir sözdizimi kullanarak, açıklama içinde kullanılabilecek tür parametrelerini alanların türleri, parametreleri ve yöntemlerin dönüş değerleri olarak belirtebilirsiniz.

// Genel bir sınıf tanımla sınıf GenelSınıf< E >(E getFirst () (...) void add (E nesne) (...)) // Kodda jenerik sınıfı kullanma GenelSınıf< String >var = new GenericClass< String >(); var. ekle ("qwerty"); Dize p = var. getFirst();

Sınıfların, arabirimlerin ve yöntemlerin genel bildirimlerine izin verilir. Ek olarak, sözdizimi, tür parametrelerinin sınırlı bildirimlerini destekler: formun bir yapısının bildiriminde bir gösterge A, B, C vb. arabirimleri uygulamak için T parametre türünü ve yapıyı gerektirir parametre tipinin C tipi veya onun atalarından biri olmasını gerektirir.

C # şablonlarından farklı olarak, Java şablonları çalışma zamanı tarafından desteklenmez - derleyici yalnızca artık herhangi bir şablon içermeyen bayt kodu oluşturur. Java'daki şablonların uygulanması, C++'daki benzer mekanizmaların uygulanmasından temel olarak farklıdır: derleyici, şablonun her kullanım durumu için sınıf veya şablon yönteminin ayrı bir sürümünü oluşturmaz, ancak yalnızca aşağıdakileri içeren bir bayt kodu uygulaması oluşturur. gerekli tip kontrolleri ve dönüşümler. Bu, Java programlarında şablonların kullanımında bir takım kısıtlamalara yol açar.

Sınıf üyeliği kontrol ediliyor

Java'da bir nesnenin hangi sınıfa ait olduğunu açıkça kontrol edebilirsiniz. Foo instanceof Foo, foo'nun Foo'ya ait olup olmadığını veya Foo'dan miras aldığını veya Foo arabirimini uyguladığını (veya daha genel olarak, Foo'dan miras alan bir arabirimi uygulayan bir sınıftan miras aldığını) doğru olarak değerlendirir.

Ardından, tüm nesneler için tanımlanan getClass () işlevi, Class türünde bir nesne döndürür. Her sınıf için, onu tanımlayan Class türünden en fazla bir nesne oluşturulur, böylece bu nesneler karşılaştırılabilir. Örneğin, foo ve bar nesneleri aynı sınıfa aitse, foo.getClass () == bar.getClass () doğru olacaktır.

Ek olarak, herhangi bir türden Class türünden bir nesne şu şekilde elde edilebilir: Tamsayı.class, Object.class.

Sınıfları doğrudan karşılaştırmak, sınıf üyeliğini kontrol etmenin her zaman en iyi yolu değildir. Bunun yerine genellikle isAssignableFrom () işlevi kullanılır. Bu işlev Class türünde bir nesne üzerinde tanımlanır ve parametre olarak Class türünde bir nesne alır. Bu nedenle, Foo, Bar sınıfının bir atasıysa, Foo.class.isAssignableFrom (Bar.class) öğesinin çağrılması true değerini döndürür. Tüm nesneler Object türünün alt öğeleri olduğundan, Object.class.isAssignableFrom() öğesinin çağrılması her zaman true değerini döndürür.

Class türünden bir nesnenin yukarıda belirtilen işlevleriyle birlikte, isInstance() (instanceof'a eşdeğer) ve cast() (parametreyi seçilen sınıfın bir nesnesine dönüştürür) işlevleri de kullanılır.

Yazılım geliştirme araçları

  • JDK - Java SE ve Java EE platformları için bir dizi kitaplığa ek olarak, javac komut satırı derleyicisini ve komut satırı modunda da çalışan bir dizi yardımcı programı içerir.
  • NetBeans IDE - Herkes İçin Ücretsiz Entegre Geliştirme Ortamı Java platformları- Java ME, Java SE ve Java EE. Java teknolojisinin sahibi Oracle tarafından, Java ve diğer dillerde (, C ++, PHP, Fortran, vb.) yazılım geliştirme için temel bir araç olarak tanıtılmaktadır.
  • Eclipse IDE, aşağıdakiler için ücretsiz bir entegre geliştirme ortamıdır.