Rumah / Keamanan / Bahasa pemrograman java telah dibuat. Pengenalan Jawa. Kelebihan Java sebagai bahasa pemrograman

Bahasa pemrograman java telah dibuat. Pengenalan Jawa. Kelebihan Java sebagai bahasa pemrograman

bahasa Jawa. Pengantar.

Untuk waktu yang lama sulit membayangkan sebuah majalah komputer tanpa artikel bahasa Jawa. Bahkan surat kabar dan majalah populer seperti The New York Times, The Washington Post, dan Business Week menulis tentang dia.

Mustahil untuk mengingat bahwa Radio Publik Nasional pernah mendedikasikan program sepuluh menit untuk bahasa pemrograman. Apakah ini baik atau buruk tergantung pada sudut pandangnya. Investasi $ 100 juta dalam produksi perangkat lunak dibuat menggunakan bahasa pemrograman tertentu?! CNN, CNBC, dan media lainnya telah, dan masih, berbicara tentang bagaimana Java dapat dan akan melakukannya.

Namun, buku ini ditujukan untuk programmer yang serius, dan karena Java adalah bahasa pemrograman yang serius, banyak yang harus kita bahas. Jadi, kami tidak akan menyelami analisis janji iklan dan mencoba mencari tahu apa yang benar dan apa yang fiksi di dalamnya. Sebagai gantinya, kami akan menjelaskan bahasa Java secara cukup rinci sebagai bahasa pemrograman (termasuk, tentu saja, fitur yang memungkinkan penggunaannya untuk bekerja di Internet, yang, pada kenyataannya, menyebabkan begitu banyak promosi iklan). Setelah itu, kita akan mencoba memisahkan realitas dari fantasi dengan menjelaskan apa yang bisa dan tidak bisa dilakukan oleh bahasa Jawa.

Pada awalnya, ada jurang pemisah antara janji iklan dan kemungkinan nyata dari bahasa Jawa. Saat matang, teknologi menjadi lebih stabil dan andal, dan ekspektasi turun ke tingkat yang wajar. Java sekarang semakin banyak digunakan untuk membuat "middleware" yang berkomunikasi antara klien dan sumber daya server (seperti database).

Meskipun aplikasi penting ini tidak mengherankan, di area inilah bahasa Java terbukti paling berguna karena kemandirian mesin, multithreading, dan kemampuan pemrograman jaringannya. Selain itu, bahasa Java telah memimpin dalam sistem tertanam, menjadi standar de facto untuk perangkat portabel, kios virtual, komputer mobil on-board, dan sejenisnya. Namun, upaya pertama untuk menulis ulang program Java yang banyak digunakan untuk komputer pribadi tidak berhasil - aplikasi yang dihasilkan ternyata berdaya rendah dan lambat. Dengan munculnya versi baru, beberapa dari masalah ini telah diselesaikan, namun harus diakui bahwa pengguna, pada umumnya, tidak peduli sama sekali dalam bahasa apa program yang mereka beli ditulis. Kami percaya bahwa keunggulan utama bahasa Java akan muncul dalam pembuatan perangkat dan aplikasi jenis baru, dan bukan pada penulisan ulang program yang sudah ada.

Bahasa Java sebagai alat pemrograman

Bagaimana bahasa pemrograman Java telah melampaui janji iklannya. Tidak diragukan lagi, ini adalah salah satu bahasa terbaik yang tersedia untuk programmer yang serius. Java memiliki potensi untuk menjadi bahasa pemrograman yang hebat, tetapi mungkin sudah terlambat sekarang. Ketika bahasa pemrograman baru muncul, masalah yang menjengkelkan tentang kompatibilitasnya dengan perangkat lunak yang dibuat sebelumnya segera muncul. Apalagi, jika program-program ini dapat diubah tanpa merusak teksnya, sulit bagi pencipta bahasa yang disambut hangat oleh publik, seperti bahasa Jawa, untuk langsung mengatakan: "Ya, kami mungkin telah membuat kesalahan saat mengembangkan versi X, tetapi versi Y akan lebih baik." Akibatnya, sambil menunggu perbaikan lebih lanjut muncul, kami harus menyatakan bahwa struktur bahasa Jawa tidak akan berubah secara signifikan dalam waktu dekat.

Pertanyaan yang jelas adalah: Bagaimana bahasa Jawa ditingkatkan?". Ternyata ini tidak dilakukan dengan meningkatkan bahasa pemrograman itu sendiri, tetapi dengan mengubah secara mendasar perpustakaan program yang ditulis dalam bahasa Java. Sun Microsystems telah mengubah segalanya: dari nama fungsi perpustakaan individu (membuatnya lebih bermakna) dan metode pengoperasian modul grafis (dengan mengubah cara penanganan peristiwa dan sebagian menulis ulang program pekerja), dan diakhiri dengan pembuatan fitur baru bahasa, seperti fasilitas pencetakan, yang tidak tersedia di Java 1.0. Hasilnya adalah platform pemrograman yang jauh lebih berguna daripada semuanya versi sebelumnya bahasa Jawa.

Microsoft telah merilis produknya sendiri yang disebut J++, yang terkait dengan bahasa Java. Bahasa J++ diinterpretasikan oleh mesin virtual yang kompatibel dengan Mesin Virtual Java saat mengeksekusi bytecode, tetapi antarmuka ke kode eksternal berbeda secara signifikan antara bahasa-bahasa ini. Bahasa J++ dan Java memiliki sintaks yang hampir sama. Namun, Microsoft telah membuat konstruksi bahasa tambahan. Semuanya memiliki nilai yang agak meragukan, kecuali Antarmuka Windows API. Selain fakta bahwa bahasa-bahasa ini memiliki sintaks yang sama, perpustakaan intinya (string, utilitas, alat pemrograman jaringan, alat multithreading, perpustakaan matematika, dll.) pada dasarnya sama.

Namun, pustaka grafis, antarmuka pengguna, dan akses ke objek jarak jauh sama sekali berbeda untuk bahasa ini. Saat ini, Microsoft tidak lagi mendukung bahasa J++, setelah mengembangkan bahasa C# baru yang memiliki banyak kesamaan dengan Java, tetapi menggunakan mesin virtual yang berbeda. Buku ini tidak mencakup J++ atau C#.

Manfaat bahasa jawa

1) Salah satu keunggulan utama bahasa Java adalah kemerdekaan dari platform di mana program dijalankan: Kode yang sama dapat dijalankan di bawah sistem operasi Windows, Solaris, Linux, Machintosh, dll.
Ini benar-benar diperlukan ketika program diunduh melalui Internet untuk eksekusi selanjutnya di bawah sistem operasi yang berbeda.

2) Keuntungan lain adalah bahwa sintaks bahasa Java mirip dengan sintaks bahasa C++, dan bagi programmer yang mengetahui bahasa C dan C++ tidak sulit untuk mempelajarinya. Benar, untuk programmer yang tahu bahasa Visual Basic, sintaks ini mungkin tidak biasa.

Jika Anda belum pernah memprogram dalam C++, beberapa istilah yang digunakan di bagian ini mungkin tidak jelas bagi Anda. Dalam hal ini, Anda dapat melewatkannya. Pada saat Anda mencapai akhir Bab 6, istilah-istilah ini akan menjadi akrab bagi Anda.

3) Juga, Jawa - bahasa yang sepenuhnya berorientasi objek, bahkan lebih dari C++. Semua entitas dalam bahasa Java adalah objek, dengan pengecualian beberapa tipe primitif, seperti angka. (Karena mudah untuk mengembangkan proyek kompleks menggunakan pemrograman berorientasi objek, ini telah menggantikan pemrograman terstruktur yang lebih lama. Jika Anda tidak terbiasa dengan pemrograman berorientasi objek, bab 3-6 akan memberi Anda semua informasi yang Anda butuhkan tentangnya.)

Namun, itu tidak cukup untuk mengembangkan dialek bahasa C++ lain yang sedikit lebih baik. Sangat penting bahwa lebih mudah untuk mengembangkan program bebas bug di Java daripada di C++. Mengapa? Perancang bahasa Java telah berpikir panjang dan keras tentang mengapa program yang ditulis dalam C++ sangat rawan kesalahan. Mereka menyediakan bahasa Java dengan alat untuk menghilangkan kemungkinan membuat program yang akan menyembunyikan kesalahan paling umum. Untuk melakukan ini, berikut ini dilakukan dalam bahasa Java.

4) Kemungkinan alokasi eksplisit dan pelepasan memori dikecualikan.
Memori dalam bahasa Java dibebaskan secara otomatis oleh mekanisme pengumpulan sampah. Programmer dijamin terhadap kesalahan yang terkait dengan penggunaan memori yang salah.

5) Array yang benar diperkenalkan dan aritmatika pointer dilarang.
Sekarang programmer, pada prinsipnya, tidak dapat menghapus data dari memori karena penyalahgunaan petunjuk.

6) Kemungkinan membingungkan operator penugasan dengan operator perbandingan kesetaraan dikecualikan.
Sekarang Anda bahkan tidak dapat mengkompilasi if(ntries = 3) . . . (Pemrogram Visual Basic mungkin tidak melihat masalah sama sekali di sini, karena kesalahan ini adalah sumber paling membingungkan dalam C dan C++).

7) Warisan berganda dikecualikan. Itu telah digantikan oleh konsep baru - antarmuka, dipinjam dari bahasa Objective C.
Sebuah antarmuka memberi programmer hampir semua hal yang dapat diperoleh programmer dari pewarisan berganda, sambil menghindari kerumitan pengelolaan hierarki kelas.

Ciri ciri bahasa jawa

Sederhana
Ditafsirkan
Didistribusikan
Dapat diandalkan
Aman
mesin independen
Berorientasi pada objek
kinerja tinggi
multithreaded
dinamis
Arsitektur komputer independen

Kami telah menyentuh beberapa poin ini di bagian terakhir. Di bagian ini, kami akan: memberikan kutipan dari manual bahasa Java, mengungkapkan fitur bahasa; Mari berbagi dengan pembaca beberapa pemikiran tentang properti tertentu dari bahasa tersebut, berdasarkan pengalaman kami sendiri dengan versi terbarunya.

Sederhana

Kami ingin membuat sistem yang mudah diprogram, tidak memerlukan pelatihan tambahan dan mempertimbangkan praktik dan standar pemrograman yang berlaku. Oleh karena itu, meskipun kami menganggap bahasa C++ tidak cocok untuk tujuan ini, bahasa Java dirancang semirip mungkin untuk membuat sistem lebih mudah diakses. Bahasa Java tidak mengandung banyak fitur C++ yang kurang dimanfaatkan, tidak jelas, dan tidak jelas yang kami yakini lebih banyak merugikan daripada menguntungkan.

Sintaks bahasa Java pada dasarnya adalah versi halus dari sintaks bahasa C++. Bahasa ini tidak memiliki file header, aritmatika pointer (dan pointer itu sendiri), struktur, serikat pekerja, kelebihan operator, kelas dasar virtual, dan sebagainya. (Perbedaan antara bahasa Java dan C++ dijelaskan dalam catatan tentang bahasa C++ yang tersebar di seluruh buku.) Namun, pengembang tidak mencoba untuk memperbaiki semua kekurangan bahasa C++.

Misalnya, sintaks dari pernyataan switch dalam bahasa Java tetap tidak berubah. Mengetahui bahasa C++, akan mudah untuk beralih ke sintaks bahasa Java.
Jika Anda biasanya menggunakan lingkungan pemrograman visual (seperti Visual Basic), Anda akan menemukan bahasa Java yang sulit.
Sintaksnya sering terlihat agak aneh (walaupun tidak sulit untuk memahami arti ungkapan). Lebih penting lagi, ketika bekerja dalam bahasa Java, Anda harus memprogram lebih banyak. Keindahan bahasa Visual Basic adalah lingkungan pemrograman visualnya memungkinkan Anda membuat infrastruktur aplikasi secara otomatis. Untuk mencapai hasil yang sama dengan menggunakan bahasa Java, Anda perlu memprogram dengan tangan, tetapi ini menghasilkan program yang jauh lebih singkat.

Namun, ada jenis lingkungan pemrograman ketiga yang memungkinkan Anda membuat program menggunakan teknologi "drag-and-drop".

Aspek lain dari kesederhanaan adalah singkatnya. Salah satu tujuan bahasa Java adalah memungkinkan pengembangan program yang dapat dijalankan sepenuhnya secara independen pada mesin kecil. Ukuran penerjemah utama dan dukungan kelas adalah sekitar 40 KB; perpustakaan standar dan alat threading (terutama mikrokernel mandiri) mengambil 17:Kb lagi.
Ini adalah sukses besar. Namun, perhatikan bahwa pustaka dukungan GUI jauh lebih besar.

Berorientasi pada objek

Sederhananya, pemrograman berorientasi objek adalah teknik pemrograman yang berfokus pada data (yaitu, objek) dan sarana untuk mengaksesnya. Menggambar analogi pertukangan, pengrajin berorientasi objek terutama berfokus pada kursi yang dia buat, dan hanya tertarik pada alat yang dibutuhkan untuk melakukannya; pada saat yang sama, tukang kayu yang tidak berorientasi pada objek hanya memikirkan peralatannya. Properti berorientasi objek Java dan C++ pada dasarnya sama.

Orientasi objek telah membuktikan nilainya selama 30 tahun terakhir, dan tanpanya mustahil membayangkan bahasa pemrograman modern. Memang, fitur berorientasi objek dari bahasa Java sebanding dengan C++. Perbedaan utama di antara mereka terletak pada mekanisme pewarisan berganda, di mana bahasa Java menemukan solusi yang lebih baik, serta dalam model metaclass dari bahasa Java.

Mekanisme refleksi (Bab 5) dan serialisasi objek (Bab 12) memungkinkan Anda untuk mengimplementasikan objek dan alat persisten untuk membuat antarmuka pengguna grafis berdasarkan komponen yang sudah jadi.

Jika Anda belum pernah memprogram dalam bahasa berorientasi objek, perhatikan Bab 4-6 dari dekat. Bab-bab ini memperkenalkan dasar-dasar pemrograman berorientasi objek dan menunjukkan bagaimana hal itu dapat digunakan untuk mengembangkan proyek-proyek kompleks melalui bahasa prosedural tradisional seperti C atau Basic.

Didistribusikan

Java memiliki perpustakaan besar program untuk mentransfer data berdasarkan protokol TCP/IP (Transmission Control Protocol/Internet Protocol) seperti HTTP (Hypertext Transfer Protocol) atau FTP (File Transfer Protocol).protokol transfer file). Aplikasi yang ditulis dalam bahasa Java dapat membuka dan mengakses objek melalui jaringan menggunakan danURL (Lokasi Sumber Daya Seragam - alamat sumber daya universal) semudah jaringan lokal.

Bahasa Java menyediakan alat yang kuat dan nyaman untuk bekerja di jaringan. Siapa pun yang pernah mencoba menulis program untuk Internet dalam bahasa lain akan terkejut dengan betapa mudahnya tugas yang paling sulit, seperti membuka koneksi jaringan (sambungan soket), diselesaikan di Java. Mekanisme elegan, yang terdiri dari apa yang disebut servlet (servlet), membuat pekerjaan di server menjadi sangat efisien.

Servlet didukung oleh banyak populer server web. (Jaringan akan dibahas dalam volume kedua.) Komunikasi antara objek terdistribusi dalam bahasa Java disediakan oleh mekanisme untuk memanggil metode jarak jauh (topik ini juga dibahas dalam volume kedua).

Dapat diandalkan

Bahasa Java dirancang untuk membuat program yang harus bekerja dengan andal di semua situasi. Fokus bahasa Jawa adalah pada deteksi dini kemungkinan kesalahan, pemeriksaan dinamis (saat runtime), dan menghindari situasi rawan kesalahan... Satu-satunya perbedaan utama antara Java dan C++ adalah model penunjuk bahasa Java, yang menghilangkan kemungkinan penimpaan memori dan kerusakan data.

Properti ini juga sangat berguna. Kompiler bahasa Java mendeteksi kesalahan yang dalam bahasa lain hanya terdeteksi saat runtime. Selain itu, pemrogram yang telah menghabiskan banyak waktu mencari bug kerusakan memori karena penunjuk yang buruk akan sangat senang karena pada prinsipnya masalah seperti itu tidak dapat muncul dalam bahasa Java.

Jika Anda pernah memprogram dalam bahasa Visual Basic atau COBOL yang tidak secara eksplisit menggunakan pointer, Anda mungkin tidak mengerti mengapa ini begitu penting. Pemrogram C jauh kurang beruntung. Mereka membutuhkan pointer untuk mengakses string, array, objek, dan bahkan file. Saat memprogram dalam Visual Basic, semua ini tidak diperlukan, dan pemrogram tidak perlu khawatir mengalokasikan memori untuk entitas ini. Di sisi lain, banyak struktur data dalam bahasa yang tidak memiliki pointer sangat sulit untuk diimplementasikan. Struktur biasa seperti string dan array tidak membutuhkan pointer. Kekuatan penuh pointer dimanifestasikan hanya di mana mereka tidak dapat ditiadakan, misalnya, saat membuat daftar tertaut. Pemrogram Java selamanya terhindar dari petunjuk buruk, misalokasi, dan kebocoran memori.

Aman

Bahasa Java dirancang untuk digunakan dalam lingkungan jaringan atau terdistribusi. Untuk alasan ini, perhatian besar telah diberikan pada keselamatan. Bahasa Java memungkinkan Anda membuat sistem yang terlindung dari virus dan gangguan.

Dalam edisi pertama kami menulis, "Jangan pernah berkata tidak," dan kami benar. Sekelompok pakar keamanan di Universitas Princeton menemukan bug keamanan pertama di Java 1.0 tak lama setelah versi pertama JDK mulai dijual. Selain itu, mereka dan spesialis lainnya terus menemukan lebih banyak bug dalam mekanisme keamanan semua versi bahasa Java berikutnya.

Sisi positif dari situasi ini, Java Language Development Group telah mendeklarasikan toleransi nol untuk setiap bug dalam sistem keamanan dan segera memperbaiki masalah yang ditemukan dalam mekanisme keamanan applet. Secara khusus, dengan menerbitkan spesifikasi internal untuk penerjemah bahasa Java, Sun telah mempermudah menemukan bug keamanan tersembunyi dan mengalihdayakannya ke pakar independen.

Ini meningkatkan kemungkinan bahwa semua kerentanan keamanan akan segera ditemukan. Bagaimanapun, sangat sulit untuk menipu sistem keamanan bahasa Java. Bug yang ditemukan sejauh ini hampir tidak terlihat, dan jumlahnya (relatif) kecil.

Halaman web keamanan Sun memiliki URL berikut: http://java.sun.com/sfaq/.

Berikut adalah beberapa situasi yang dicegah oleh sistem keamanan Java.

1) Stack overflow dalam program yang sedang berjalan yang disebabkan oleh worm Internet yang terkenal.

2) Kerusakan pada area memori yang berada di luar ruang yang dialokasikan untuk proses.

3) Membaca dan menulis file lokal saat menggunakan pemuat kelas aman, seperti browser Web, yang melarang akses file tersebut.

Semua langkah keamanan ini sesuai dan biasanya bekerja dengan sempurna, tetapi kebijaksanaan tidak ada salahnya. Meskipun ditemukan untuk saat ini Karena kesalahannya jauh dari sepele, dan detail penemuannya sering dirahasiakan, harus diakui bahwa pembuktian keamanan bahasa Jawa mungkin tidak mungkin lagi.

Seiring waktu, fitur keamanan baru telah ditambahkan ke bahasa. Dimulai dengan versi 1.1, bahasa Java memperkenalkan gagasan kelas yang ditandatangani secara digital. Dengan menggunakan kelas dengan tanda tangan digital, Anda dapat yakin dengan pembuatnya. Jika Anda memercayainya, Anda dapat memberikan kelas ini semua hak istimewa yang tersedia di mesin Anda.

Mekanisme pengiriman kode alternatif yang diusulkan oleh Microsoft didasarkan pada teknologi ActiveX dan hanya menggunakan tanda tangan digital untuk keamanan. Jelas, ini tidak cukup - setiap pengguna perangkat lunak Microsoft dapat membuktikan bahwa program dari produsen terkenal sering macet, sehingga menimbulkan risiko korupsi data. Sistem keamanan dalam bahasa Java jauh lebih kuat daripada teknologi ActiveX, karena ia mengontrol aplikasi sejak dimulai dan tidak membiarkannya menyebabkan kerusakan.

arsitektur mandiri

Kompiler menghasilkan file objek yang formatnya tidak bergantung pada arsitektur komputer - program yang dikompilasi dapat dieksekusi pada prosesor apa pun di bawah kendali sistem eksekusi program Java. Untuk melakukan ini, compiler bahasa Java menghasilkan perintah, bytecode, yang tidak bergantung pada arsitektur komputer tertentu. Bytecode dirancang sedemikian rupa sehingga dapat dengan mudah ditafsirkan oleh mesin apa pun atau diterjemahkan ke dalam kode yang bergantung pada mesin dengan cepat.

Tidak ide baru. Lebih dari 20 tahun yang lalu, baik sistem implementasi Pascal yang dikembangkan oleh Niclaus Wirth dan sistem UCSD Pascal menggunakan teknologi yang sama. Penggunaan bytecode memberikan keuntungan besar dalam eksekusi program (namun, kompilasi sinkron mengimbanginya dalam banyak kasus). Pengembang bahasa Java telah melakukan pekerjaan yang baik dalam mengembangkan satu set instruksi bytecode yang bekerja dengan baik pada sebagian besar komputer modern, dengan mudah diterjemahkan ke dalam instruksi mesin nyata.

mesin independen

Berbeda dengan bahasa C dan C++, tidak ada aspek spesifikasi Java yang bergantung pada sistem implementasi. Baik ukuran tipe data dasar dan operasi aritmatika pada mereka terdefinisi dengan baik.

Misalnya, tipe int dalam bahasa Java selalu berarti integer 32-bit. Dalam C dan C++, tipe int dapat berarti bilangan bulat 16-bit, bilangan bulat 32-bit, atau bilangan bulat dengan ukuran arbitrer, seperti yang dipilih oleh pengembang kompiler tertentu. Satu-satunya batasan adalah bahwa ukuran int tidak boleh lebih kecil dari ukuran int pendek dan lebih besar dari ukuran int panjang. Ukuran tetap dari tipe numerik menghindari banyak gangguan yang terkait dengan menjalankan program di komputer yang berbeda. Data biner disimpan dan ditransmisikan dalam format tetap, yang juga menghindari kesalahpahaman yang terkait dengan urutan byte yang berbeda pada platform yang berbeda (konflik "big endian/little endian"). Garis disimpan di format standar Unikode.

Pustaka yang merupakan bagian dari sistem mendefinisikan antarmuka yang tidak bergantung pada mesin. Misalnya, bahasa tersebut menyediakan kelas Window abstrak dan implementasinya untuk sistem operasi Unix, Windows, dan Macintosh.

Siapa pun yang pernah mencoba menulis program yang berjalan sama baiknya di Windows, Macintosh, dan sepuluh rasa Unix tahu bahwa ini adalah tugas yang sangat sulit. Versi Java melakukan upaya heroik untuk memecahkan masalah ini dengan menyediakan toolkit sederhana yang mengadaptasi elemen antarmuka pengguna yang umum ke sejumlah besar platform perangkat lunak. Sayangnya, perpustakaan, tempat banyak pekerjaan dihabiskan, tidak memungkinkan kami untuk mencapai hasil yang dapat diterima pada platform yang berbeda. (Pada saat yang sama, bug yang berbeda muncul di program grafis pada platform yang berbeda.)

Namun, ini hanya permulaan. Dalam banyak aplikasi, kemandirian mesin jauh lebih penting daripada kecanggihan antarmuka pengguna grafis. Aplikasi inilah yang mendapat manfaat dari pengenalan Java 1.0. Namun, toolkit GUI kini telah sepenuhnya didesain ulang dan tidak lagi bergantung pada antarmuka pengguna pada komputer host. Versi baru lebih bermakna dan, menurut kami, lebih menarik bagi pengguna daripada yang sebelumnya.

Ditafsirkan

Penerjemah bahasa Java dapat dikirim ke mesin apa pun dan mengeksekusi bytecode langsung di atasnya. Karena pengeditan tautan adalah proses yang lebih mudah, pemrograman bisa menjadi jauh lebih cepat dan efisien.

Mungkin ini merupakan keuntungan dalam pengembangan aplikasi, tetapi kutipan tersebut jelas dilebih-lebihkan. Bagaimanapun, kompiler bahasa Java yang disertakan dalam JSDK (Java Software Development Kit) cukup lambat. (Beberapa kompiler jenis ketiga, seperti IBM, jauh lebih cepat.) Kecepatan kompilasi ulang hanyalah salah satu faktor dalam efisiensi lingkungan pemrograman. Membandingkan kecepatan lingkungan pemrograman Java dan Visual Basic, Anda mungkin akan kecewa.

kinerja tinggi

Sementara bytecode yang ditafsirkan secara umum memiliki kinerja lebih dari cukup, ada situasi di mana kinerja yang lebih baik diperlukan. Bytecode dapat diterjemahkan dengan cepat (saat runtime) ke dalam kode mesin untuk prosesor tertentu di mana aplikasi sedang berjalan.

Jika penerjemah digunakan untuk mengeksekusi bytecode, Anda tidak boleh menggunakan frasa " kinerja tinggi". Namun, pada banyak platform, jenis kompilasi lain dimungkinkan, disediakan oleh kompiler sinkron (kompiler just-in-time-JIT). Mereka menerjemahkan bytecode ke dalam kode yang bergantung pada mesin, menyimpan hasilnya dalam memori, dan kemudian menyebutnya bila perlu Karena interpretasi ini dijalankan hanya sekali, pendekatan ini meningkatkan kecepatan berkali-kali lipat.

Meskipun kompiler sinkron masih lebih lambat daripada kompiler khusus mesin, mereka setidaknya jauh lebih cepat daripada interpreter, menyediakan 10x atau bahkan 20x percepatan untuk beberapa program. Teknologi ini terus meningkat dan akhirnya dapat mencapai kecepatan yang tidak akan pernah dilampaui oleh kompiler tradisional. Misalnya, kompiler sinkron dapat menentukan bagian kode mana yang lebih sering dieksekusi dan mengoptimalkannya untuk kecepatan eksekusi.

MULTITHREADING

Menyediakan interaktivitas dan eksekusi program yang lebih baik.

Jika Anda pernah mencoba multithreading dalam bahasa pemrograman lain, Anda akan terkejut melihat betapa mudahnya melakukannya di Java. Utas dalam bahasa Java dapat memanfaatkan sistem multiprosesor jika sistem operasi mengizinkannya. Sayangnya, implementasi utas pada sebagian besar platform sangat bervariasi, dan perancang bahasa Java tidak berusaha untuk mencapai keseragaman. Hanya kode untuk memanggil utas yang tetap sama untuk semua mesin; Bahasa Java meninggalkan implementasi multithreading ke sistem operasi atau pustaka threading yang mendasarinya. (Alur dijelaskan dalam Volume 2.) Meskipun demikian, ini adalah kemudahan pengorganisasian komputasi multithread membuat bahasa Java sangat menarik untuk pengembangan perangkat lunak server.

dinamis

Dalam banyak hal, Java lebih dinamis daripada C atau C++. Ini telah dirancang untuk dengan mudah beradaptasi dengan lingkungan yang terus berubah. Anda dapat dengan bebas menambahkan metode dan objek baru ke perpustakaan tanpa menyebabkan kerusakan apa pun. Bahasa Java memudahkan untuk mendapatkan informasi tentang kemajuan suatu program.

Ini sangat penting ketika Anda ingin menambahkan kode ke program yang sudah berjalan. Contoh utama dari hal ini adalah kode yang diunduh dari Internet untuk dieksekusi oleh browser. Di Java 1.0, mendapatkan informasi tentang kemajuan program yang dieksekusi sama sekali tidak mudah, tetapi versi bahasa Java saat ini memaparkan kepada programmer baik struktur dan perilaku objek dalam program yang dieksekusi.
Ini sangat berharga untuk sistem yang harus menganalisis objek selama eksekusi program. Sistem ini termasuk alat GUI, debugger pintar, plugin, dan database objek.

Bahasa Jawa dan Internet

Idenya sederhana - pengguna mengunduh bytecode Java dari Internet dan menjalankannya di mesin mereka. Program Java yang berjalan di web browser disebut applet. Untuk menggunakan applet, Anda memerlukan browser Web yang mendukung bahasa Java dan mampu menginterpretasikan bytecode. Kode sumber Java dilisensikan oleh Sun, yang menekankan pada kekekalan bahasa itu sendiri dan struktur pustaka intinya. Sayangnya, kenyataannya tidak seperti itu. Versi berbeda dari Netscape dan browser Internet Explorer mendukung versi yang berbeda Bahasa Java, dan beberapa versi ini sudah ketinggalan zaman. Situasi yang tidak menguntungkan ini menciptakan semakin banyak hambatan dalam pengembangan applet yang memanfaatkan versi terbaru bahasa Jawa. Untuk mengatasi masalah ini, Sun telah mengembangkan Plug-in Java yang menyediakan lingkungan paling canggih untuk menjalankan program Java berdasarkan browser Netscape dan Internet Explorer.

Memuat applet seperti menyematkan gambar di halaman Web. Applet menjadi bagian dari halaman, dan teks membungkus ruang yang ditempatinya. Namun, perbedaannya adalah gambar itu sekarang hidup. Ini merespons perintah pengguna, mengubahnya penampilan dan menyediakan transfer data antara komputer di mana applet dilihat dan komputer yang mengontrol applet.

Memuat applet seperti memasukkan gambar ke dalam halaman Web. Applet menjadi bagian dari halaman, dan teks membungkus ruang yang ditempatinya. Faktanya adalah bahwa gambar itu "hidup". Ini merespon perintah pengguna, mengubah penampilannya, dan mentransfer data antara komputer yang menjalankan applet dan komputer yang menjalankan applet.

pada gambar. Gambar 1.1 menunjukkan contoh yang baik dari halaman Web dinamis yang melakukan perhitungan kompleks dan menggunakan applet untuk menggambar molekul. Untuk lebih memahami struktur molekul, Anda dapat memutar atau memperbesar menggunakan mouse. Manipulasi semacam itu tidak dapat diimplementasikan pada statis Halaman web, namun applet memungkinkan hal ini. (Applet ini dapat ditemukan di http://jmol.sourceforge.net.)

Beras. 1.1. Jmol applet

Applet dapat digunakan untuk menambahkan tombol dan bidang teks baru ke halaman Web. Namun, applet semacam itu lambat dimuat melalui saluran telepon.

Hal yang sama dapat dilakukan dengan Dynamic HTML, bentuk HTML (Hypertext Markup Language), atau bahasa scripting seperti JavaScript. Tentu saja, applet pertama dirancang untuk animasi: bola dunia yang berputar, karakter kartun yang menari, teks seni, dan sebagainya. Namun, sebagian besar hal di atas juga dapat membuat GIF animasi, dan Dynamic HTML yang dikombinasikan dengan skrip melakukan lebih dari sekadar applet.

Akibat ketidakcocokan browser dan inkonsistensi dalam proses pengunduhan melalui lambat koneksi jaringan Applet yang dirancang untuk halaman Web bukanlah pencapaian besar. Di jaringan lokal (intranet) situasinya sama sekali berbeda. Mereka biasanya tidak memiliki masalah dengan keluaran channel, sehingga waktu download applet tidak signifikan. Di jaringan lokal, Anda dapat memilih browser yang diinginkan atau menggunakan Java Plug-In. Karyawan tidak dapat memindahkan program yang dikirimkan melalui jaringan ke lokasi yang salah atau menginstalnya secara tidak benar, dan administrator sistem tidak perlu melewati semua mesin klien dan memperbarui program pada mereka. Sejumlah besar program untuk akuntansi persediaan, perencanaan liburan, penggantian biaya perjalanan, dan sejenisnya telah dikembangkan oleh banyak perusahaan dalam bentuk applet menggunakan browser.

Saat kami menulis buku ini, pendulum berayun kembali dari pemrograman sisi klien ke pemrograman sisi server. Secara khusus, server aplikasi dapat menggunakan kemampuan pemantauan mesin virtual Java untuk penyeimbangan beban otomatis, kumpulan tautan basis data, sinkronisasi objek, penonaktifan dan pemuatan ulang yang aman, dan proses lain yang diperlukan untuk aplikasi server yang dapat diskalakan yang hampir tidak mungkin diimplementasikan dengan benar. Dengan demikian, programmer yang membuat aplikasi memiliki kesempatan untuk membeli mekanisme yang kompleks ini, daripada mengembangkannya sendiri. Ini meningkatkan produktivitas programmer - mereka fokus pada logika program mereka, tidak terganggu oleh detail yang terkait dengan pengoperasian server.

Java adalah bahasa pemrograman dari mikrosistem Sun. Awalnya dikembangkan sebagai bahasa pemrograman perangkat elektronik, tetapi kemudian digunakan untuk menulis aplikasi perangkat lunak server. Program Java bersifat lintas platform, yaitu dapat berjalan di sistem operasi apa pun.

Dasar-dasar Pemrograman Java

Java, sebagai bahasa berorientasi objek, mengikuti prinsip dasar OOP:

  • warisan;
  • polimorfisme;
  • enkapsulasi.

Di tengah "Java", seperti di OOP lainnya, ada objek dan kelas dengan konstruktor dan properti. Lebih baik mulai belajar bahasa pemrograman Java bukan dari sumber resmi, tetapi dari manual untuk pemula. Dalam manual tersebut, fitur dijelaskan secara rinci, contoh kode disediakan. Buku-buku seperti Bahasa Pemrograman Java untuk Pemula menjelaskan secara rinci prinsip-prinsip dasar dan fitur dari bahasa yang disebutkan.

Keunikan

Kode dalam bahasa pemrograman Java diterjemahkan ke dalam bytecode dan kemudian dieksekusi pada mesin virtual JVM. Konversi ke bytecode dilakukan di Javac, Jikes, Espresso, GCJ. Ada kompiler yang menerjemahkan bahasa C ke dalam bytecode Java. Dengan demikian, aplikasi C dapat berjalan di platform apa pun.

Sintaks "Java" dicirikan sebagai berikut:

  1. Nama kelas harus dimulai dengan huruf kapital. Jika nama terdiri dari beberapa kata, maka yang kedua harus dimulai dengan huruf besar.
  2. Jika beberapa kata digunakan untuk membentuk metode, maka kata kedua harus dimulai dengan huruf kapital.
  3. Pemrosesan dimulai dengan metode main() - ini adalah bagian dari setiap program.

Jenis

Bahasa pemrograman Java memiliki 8 tipe primitif. Mereka disajikan di bawah ini.

  • Boolean adalah tipe logika, hanya dibutuhkan dua nilai true dan false.
  • Byte adalah tipe integer terkecil dengan ukuran 1 byte. Ini digunakan saat bekerja dengan file atau data biner mentah. Memiliki jangkauan -128 hingga 127.
  • Short memiliki kisaran -32768 hingga 32767 dan digunakan untuk mewakili angka. Ukuran variabel jenis ini adalah 2 byte.
  • Int juga singkatan dari angka, tetapi ukurannya adalah 4 byte. Ini paling sering digunakan untuk bekerja dengan data integer, dan byte dan short terkadang dipromosikan menjadi int.
  • Long digunakan untuk bilangan bulat besar. Nilai yang mungkin berkisar dari -9223372036854775808 hingga 9223372036854775807.
  • Float dan double digunakan untuk menyatakan pecahan. Perbedaannya adalah bahwa float nyaman ketika presisi tinggi di bagian pecahan nomor tidak diperlukan.
  • Gandakan menampilkan semua karakter setelah pembatas ".", dan float - hanya yang pertama.
  • String adalah tipe primitif yang paling umum digunakan untuk mendefinisikan string.

Kelas dan Objek

Kelas dan objek memainkan peran penting dalam Belajar Bahasa Pemrograman Java untuk Pemula.

Sebuah kelas mendefinisikan sebuah template untuk sebuah objek, ia harus memiliki atribut dan metode. Untuk membuatnya, gunakan kata kunci Kelas. Jika dibuat dalam file terpisah, maka nama kelas dan file harus sama. Nama itu sendiri terdiri dari dua bagian: nama dan ekstensi.Java.

Di Java, Anda dapat membuat subclass yang akan mewarisi metode induknya. Untuk ini, kata meluas digunakan:

  • class classname memperluas superclassname();

Konstruktor adalah anggota dari kelas apa pun, bahkan jika itu tidak diatur secara eksplisit. Dalam hal ini, kompiler membuatnya sendiri:

  • kelas publik Kelas(Kelas publik()( ) Kelas publik(Nama string)())

Nama konstruktor sama dengan nama kelas, secara default hanya memiliki satu parameter:

  • Anak Anjing publik (Nama string)

Objek dibuat dari kelas menggunakan operator new() :

  • Titik p = Titik baru()

Ia menerima semua metode dan properti kelas, dengan bantuan yang berinteraksi dengan objek lain. Satu objek dapat digunakan beberapa kali di bawah variabel yang berbeda.

    Titik p = Titik baru()

    kelas Dua Titik (

    public static void main(String args) (

    Titik p1 = Titik baru();

    Titik p2 = Titik baru();

    Variabel objek dan objek adalah entitas yang sama sekali berbeda. Variabel objek adalah tautan. Mereka dapat menunjuk ke variabel apa pun dari tipe non-primitif. Tidak seperti C++, konversi tipenya diatur secara ketat.

    Bidang dan Metode

    Bidang adalah semua variabel yang terkait dengan kelas atau objek. Mereka adalah lokal secara default dan tidak dapat digunakan di kelas lain. Operator "." digunakan untuk mengakses bidang:

    • variabel nama kelas

    Anda dapat menentukan bidang statis dengan kata kunci statis. Bidang tersebut adalah satu-satunya cara untuk menyimpan variabel global. Hal ini disebabkan oleh fakta bahwa Java tidak memiliki variabel global.

    Menerapkan kemampuan untuk mengimpor variabel untuk mendapatkan akses dari paket lain:

    • impor nama kelas statis;

    Sebuah metode adalah subrutin untuk kelas-kelas di mana ia dideklarasikan. Dijelaskan pada tingkat yang sama dengan variabel. Ditentukan sebagai fungsi dan dapat berupa jenis apa pun, termasuk void:

    • kelas Titik ( int x, y;

      batal init(int a, int b) (

    Pada contoh di atas, kelas Point memiliki integer x dan y, sebuah metode init(). Metode diakses, seperti halnya variabel, dengan menggunakan operator ".":

    • titik.init();

    Properti init tidak mengembalikan apa pun, jadi bertipe void.

    Variabel

    Dalam tutorial bahasa pemrograman Java, variabel menempati tempat yang terpisah. Semua variabel memiliki tipe tertentu, itu mendefinisikan tempat yang diperlukan untuk menyimpan nilai, kisaran nilai yang mungkin, daftar operasi. Sebelum memanipulasi nilai, variabel dideklarasikan.

    Beberapa variabel dapat dideklarasikan secara bersamaan. Tanda koma digunakan untuk mencantumkannya:

    • int a, b, c;

    Inisialisasi dilakukan setelah atau selama deklarasi:

    int a = 10, b = 10;

    Ada beberapa jenis:

    • variabel lokal (lokal);
    • variabel instan (variabel instan);
    • variabel statis (statis).

    Variabel lokal dideklarasikan dalam metode dan konstruktor, mereka dibuat selama startup yang terakhir dan dihancurkan setelah selesai. Bagi mereka, dilarang menentukan pengubah akses dan mengontrol tingkat aksesibilitas. Mereka tidak terlihat di luar blok yang dideklarasikan. Di Java, variabel tidak memiliki nilai awal, jadi harus ditetapkan terlebih dahulu sebelum digunakan pertama kali.

    Variabel instan harus dideklarasikan di dalam kelas. Mereka digunakan sebagai metode, tetapi mereka hanya dapat diakses setelah objek dibuat. Variabel dihancurkan ketika objek dihancurkan. Variabel instan, tidak seperti variabel lokal, memiliki nilai default:

    • angka - 0;
    • logika - salah;
    • referensi adalah nol.

    Variabel statis disebut variabel kelas. Nama mereka dimulai dengan karakter huruf besar dan ditentukan dengan pengubah statis. Mereka digunakan sebagai konstanta, masing-masing, satu penentu dari daftar ditambahkan ke dalamnya:

    • terakhir;
    • pribadi;
    • publik.

    Jalankan di awal program, dimusnahkan setelah eksekusi berhenti. Sama seperti variabel instan, mereka memiliki nilai default yang ditetapkan ke variabel kosong. Angka memiliki nilai 0, boolean memiliki nilai false, referensi objek awalnya nol. Variabel statis disebut dalam bentuk berikut:

    • NamaKelas.NamaVariabel.

    Pemulung

    Dalam Tutorial Bahasa Pemrograman Java untuk Pemula, bagian pengumpul sampah otomatis adalah yang paling menarik.

    Di Jawa, tidak seperti bahasa C, itu tidak mungkin penghapusan manual objek dari memori. Untuk ini, metode penghapusan otomatis diterapkan - pengumpul sampah. Dengan penghapusan tradisional melalui null, hanya referensi ke objek yang dihapus, dan objek itu sendiri dihapus. Ada metode pengumpulan sampah paksa, meskipun tidak direkomendasikan untuk penggunaan normal.

    Modul untuk penghapusan otomatis objek yang tidak digunakan berjalan di latar belakang dan dimulai saat program tidak aktif. Untuk menghapus objek dari memori, program berhenti, setelah memori dibebaskan, operasi yang terputus dilanjutkan.

    Pengubah

    Membedakan jenis yang berbeda pengubah. Selain yang menentukan metode akses, ada pengubah untuk metode, variabel, dan kelas. Metode yang dideklarasikan sebagai pribadi hanya tersedia di kelas yang dideklarasikan. Variabel seperti itu tidak dapat digunakan di kelas dan fungsi lain. Publik memberikan akses ke kelas mana pun. Jika Anda perlu mendapatkan kelas Publik dari paket lain, maka Anda harus mengimpornya terlebih dahulu.

    Pengubah yang dilindungi mirip dengan tindakan publik - ini membuka akses ke bidang kelas. Dalam kedua kasus, variabel dapat digunakan di kelas lain. Tetapi pengubah publik tersedia untuk semua orang, dan pengubah yang dilindungi hanya tersedia untuk kelas yang diwarisi.

    Pengubah yang diterapkan saat membuat metode adalah statis. Ini berarti bahwa metode yang dihasilkan ada secara independen dari instance kelas. Pengubah Final tidak mengontrol akses, tetapi menunjukkan ketidakmungkinan manipulasi lebih lanjut dari nilai objek. Ini melarang mengubah elemen yang ditentukan.

    Final untuk bidang tidak memungkinkan untuk mengubah nilai pertama variabel:

      public static void mthod(String args) (

      int akhir Nama = 1;

      int Nama = 2;// akan menimbulkan kesalahan

    Variabel dengan pengubah terakhir adalah konstanta. Mereka biasanya ditulis dengan huruf kapital saja. CamelStyle dan cara lain tidak berfungsi.

    Final untuk metode menunjukkan larangan mengubah metode di kelas yang diwarisi:

      kekosongan terakhir myMethod() (

      System.out.printIn("Halo dunia");

    Final untuk kelas berarti Anda tidak dapat membuat turunan kelas:

      Kelas kelas publik terakhir (

    Abstrak - pengubah untuk membuat kelas abstrak. Setiap kelas abstrak dan metode abstrak dimaksudkan untuk dikembangkan lebih lanjut di kelas dan blok lain. Pengubah transien memberitahu mesin virtual untuk tidak memproses variabel yang diberikan. Dalam hal ini, itu tidak akan menyelamatkan. Misalnya, transient int Name = 100 tidak akan bertahan, tetapi int b akan tetap ada.

    Platform dan versi

    Keluarga bahasa pemrograman Java yang ada:

    • edisi Standar.
    • Edisi Perusahaan.
    • Edisi Mikro.
    • kartu.

    1. SE - adalah yang utama, banyak digunakan untuk membuat aplikasi khusus untuk penggunaan individu.
    2. EE adalah seperangkat spesifikasi untuk pengembangan perangkat lunak perusahaan. Ini berisi lebih banyak fitur daripada SE, oleh karena itu digunakan pada skala komersial di perusahaan besar dan menengah.
    3. ME - dirancang untuk perangkat dengan daya dan memori terbatas, biasanya memiliki ukuran layar kecil. Perangkat tersebut adalah smartphone dan PDA, receiver televisi digital.
    4. Kartu - dirancang untuk perangkat dengan sumber daya komputasi yang sangat terbatas, seperti kartu pintar, kartu sim, ATM. Untuk tujuan ini, bytecode, persyaratan untuk platform, dan komponen perpustakaan telah diubah.

    Aplikasi

    Program dalam bahasa pemrograman Java cenderung lebih lambat dan memakan waktu lebih banyak memori akses acak. Analisis komparatif bahasa Java dan C menunjukkan bahwa C sedikit lebih produktif. Setelah banyak perubahan dan optimasi mesin virtual Java, telah meningkatkan kinerjanya.

    Aktif digunakan untuk aplikasi untuk Android. Program dikompilasi menjadi bytecode non-standar dan dieksekusi pada mesin virtual ART. Android Studio digunakan untuk kompilasi. IDE dari Google ini adalah IDE pengembangan Android resmi.

    Microsoft telah mengembangkan implementasinya sendiri dari Java Virtual Machine MSJVM. Ada perbedaan yang mematahkan konsep dasar lintas platform - tidak ada dukungan untuk beberapa teknologi dan metode, ada ekstensi non-standar yang hanya berfungsi pada platform Windows. Microsoft merilis bahasa J#, yang sintaks dan operasi keseluruhannya sangat mirip dengan Java. Itu tidak sesuai dengan spesifikasi resmi dan akhirnya dihapus dari toolkit pengembang Microsoft Visual Studio standar.

    Bahasa dan lingkungan pemrograman Java

    Pengembangan perangkat lunak dilakukan dalam IDE berikut:

    1. IDE NetBeans.
    2. IDE gerhana.
    3. IntelliJ IDEA.
    4. jPengembang.
    5. Jawa untuk iOS.
    6. Geany.

    JDK didistribusikan oleh Oracle sebagai Java Development Kit. Termasuk compiler, perpustakaan standar, utilitas, sistem eksekutif. Lingkungan pengembangan terintegrasi modern bergantung pada JDK.

    Lebih mudah untuk menulis kode dalam bahasa pemrograman Java di Netbeans dan Eclipse IDE. Ini adalah lingkungan pengembangan terintegrasi gratis, cocok untuk semua platform Java. Juga digunakan untuk pemrograman dengan Python, PHP, JavaScript, C++.

    IntelliJ IDE dari Jetbrains didistribusikan dalam dua versi: gratis dan komersial. Mendukung penulisan kode dalam banyak bahasa pemrograman, ada plug-in pihak ketiga dari pengembang yang mengimplementasikan lebih banyak bahasa pemrograman.

    JDeveloper adalah pengembangan lain dari Oracle. Sepenuhnya ditulis dalam Java, sehingga berfungsi di semua sistem operasi.

pengantar

Karya ini dikhususkan untuk salah satu bahasa pemrograman paling menjanjikan saat ini - bahasa Java. Teknologi yang disebut "Java", tanpa berlebihan, dapat disebut revolusioner dalam industri pengembangan perangkat lunak.

Sorting dapat diimplementasikan dalam bahasa pemrograman lain seperti PHP, C++, dll. Hanya saja jauh lebih menguntungkan di Jawa. Rincian dibahas di bawah ini. Kebaruannya terletak pada kenyataan bahwa program penyortiran untuk bahasa yang diberikan dan dalam interpretasi ini.

Untuk mengimplementasikan tugas, algoritma untuk menulis program diusulkan. Selanjutnya, algoritma ini diimplementasikan di Jawa.

Deskripsi bahasa pemrograman Java

Ciri-ciri Umum Jawa

Bahasa Java dipilih untuk menulis program penyortir. Java adalah bahasa pemrograman berorientasi objek yang dikembangkan oleh Sun Microsystems sejak tahun 1991 dan resmi dirilis pada tanggal 23 Mei 1995. Awalnya, bahasa pemrograman baru disebut Oak (James Gosling) dan dikembangkan untuk elektronik konsumen, tetapi kemudian berganti nama menjadi Java dan mulai digunakan untuk menulis applet, aplikasi, dan perangkat lunak server.

Bahasa pemrograman Java tidak seperti yang lain yang ada. Hal ini dirancang untuk membuatnya lebih mudah untuk bekerja pada komputer di WWW melalui browser. Saat ini, setiap komputer memiliki browser. Pada gilirannya, setiap browser mendukung Java. Ini berarti Anda dapat melihat dokumen yang disimpan di seluruh dunia dan, dengan mengklik tautan, mengaktifkan program Java yang akan ditransfer melalui jaringan dan dijalankan di komputer Anda.

Salah satu keuntungan utama bahasa Java adalah kemandiriannya dari platform dan jenis komputer tempat program dijalankan. Dengan demikian, kode yang sama dapat dijalankan di bawah sistem operasi Windows, Linux, FreeBSD, Solaris, Apple Mac, dll. Ini menjadi sangat penting ketika program diunduh melalui Internet global dan digunakan di berbagai platform. Bahasa pemrograman Java dapat bekerja tidak hanya dengan teks dan grafik statis, tetapi juga dengan berbagai objek dinamis.

Keuntungan lain yang sama pentingnya dari Java adalah kesamaan yang besar dengan bahasa pemrograman C++. Oleh karena itu, bagi para programmer yang terbiasa dengan sintaks C dan C++, akan mudah untuk mempelajari Java.

Juga, Java adalah bahasa yang sepenuhnya berorientasi objek, bahkan lebih dari C++. Semua entitas dalam bahasa Java adalah objek, dengan pengecualian beberapa tipe primitif, seperti angka.

Penting juga bahwa jauh lebih mudah untuk mengembangkan program di Java yang tidak mengandung kesalahan daripada di C ++.

Masalahnya adalah pengembang bahasa Java dari perusahaan Sun melakukan analisis fundamental program dalam bahasa C ++. "Kemacetan" dari kode sumber dianalisis, yang mengarah pada munculnya kesalahan yang sulit dideteksi. Oleh karena itu, keputusan dibuat untuk merancang bahasa Java dengan kemampuan untuk membuat program yang akan menyembunyikan kesalahan paling umum.

Untuk itu dilakukan hal-hal sebagai berikut:

pengembang telah menghilangkan kemungkinan mengalokasikan dan membebaskan memori secara eksplisit.

Misalnya, memori di Java dibebaskan secara otomatis melalui pengumpulan sampah. Ternyata programmer diasuransikan terhadap kesalahan yang timbul dari penggunaan memori yang tidak tepat.

pengenalan array yang benar dan larangan pointer.

Sekarang programmer tidak dapat menghapus data dari memori karena penggunaan pointer yang salah.

kemungkinan membingungkan operator penugasan dengan operator pembanding untuk kesetaraan dikecualikan. Sebagai aturan, masalah dengan tanda "=" sangat sering menyebabkan kesalahan logis dalam C dan C ++, yang tidak mudah dideteksi. Terutama dalam program-program besar.

pewarisan berganda benar-benar dikecualikan. Itu telah digantikan oleh konsep baru - antarmuka, ide yang dipinjam dari bahasa Objective C.

Sebuah antarmuka memberi programmer hampir semua hal yang dapat diperoleh programmer dari pewarisan berganda, sambil menghindari kerumitan yang datang dengan mengelola hierarki kelas.

Rilis terbaru adalah versi 1.6, yang telah meningkatkan keamanan, meningkatkan dukungan untuk bahasa scripting Mozilla Rhino, meningkatkan integrasi desktop, dan menambahkan beberapa fitur baru dalam membuat antarmuka grafis.

Java dan Microsoft

Perusahaan berikut terutama berfokus pada teknologi Java (J2EE) daripada .NET, meskipun mereka juga menangani yang terakhir: IBM, Oracle. Secara khusus, Oracle DBMS menyertakan JVM sebagai komponennya, yang menyediakan kemampuan untuk memprogram DBMS secara langsung dalam bahasa Java, termasuk, misalnya, prosedur tersimpan.

Fitur utama

Contoh program

Program yang mencetak "Halo, Dunia!":

Kelas publik HelloWorld ( public static void main(String args) ( System .out .println ("Hello, World!" ); ) )

Contoh penggunaan template:

Impor java.util.*; Contoh kelas publik ( public static void main(String args) ( // Buat objek dari template. Daftar string = Daftar Tautan baru () ; strings.add("Halo"); strings.add("dunia"); strings.add("!"); for (String s: strings) ( System .out .print (s); System .out .print (" " ); ) ))

Ide Kunci

Tipe primitif

Hanya ada 8 jenis skalar dalam bahasa Java: boolean, byte, char, short, int, long, float, double.

Kelas pembungkus untuk tipe primitif

Panjang dan rentang nilai tipe primitif ditentukan oleh standar, dan bukan implementasi dan diberikan dalam tabel. Jenis char dibuat dua byte untuk kenyamanan lokalisasi (salah satu prinsip ideologis Java): ketika standar dibentuk, Unicode-16 sudah ada, tetapi tidak Unicode-32. Karena tidak ada tipe byte tunggal yang tersisa dalam hasil, tipe byte baru ditambahkan. Jenis float dan double dapat memiliki nilai khusus dan "bukan angka" (

Jenis Panjang (dalam byte) Rentang atau kumpulan nilai
boolean tidak terdefinisi benar salah
byte 1 −128..127
arang 2 0..2 16 -1, atau 0.65535
pendek 2 2 15 ..2 15 -1, atau 32768..32767
ke dalam 4 2 31 ..2 31 -1, atau 2147483648..2147483647
panjang 8 2 63 ..2 63 -1, atau kira-kira 9.2 10 18 ..9.2 10 18
mengambang 4 -(2-2 -23) 2 127 ..(2-2 -23) 2 127 , atau kira-kira 3.4 10 38 ..3.4 10 38 , serta , , NaN
dobel 8 -(2-2 -52) 2 1023 ..(2-2 -52) 2 1023 , atau kira-kira 1.8 10 308 ..1.8 10 308 , dan juga , , NaN

Standarisasi yang kaku seperti itu diperlukan untuk membuat platform bahasa-independen, yang merupakan salah satu persyaratan ideologis untuk Java dan salah satu alasan keberhasilannya. Namun demikian, satu masalah kecil dengan independensi platform masih tetap ada. Beberapa prosesor menggunakan register 10-byte untuk penyimpanan antara hasil atau meningkatkan akurasi perhitungan dengan cara lain. Untuk membuat Java sedapat mungkin interoperable antara sistem yang berbeda, di versi sebelumnya, segala cara untuk meningkatkan keakuratan perhitungan dilarang. Namun, ini menghasilkan kinerja yang lebih lambat. Ternyata hanya sedikit orang yang membutuhkan penurunan akurasi demi kemandirian platform, terutama jika mereka harus membayarnya dengan memperlambat kerja program. Setelah banyak protes, larangan ini dihapus, tetapi kata kunci strictfp ditambahkan untuk menonaktifkan peningkatan presisi.

Transformasi dalam Operasi Matematika

Bahasa Java memiliki aturan sebagai berikut:

  1. Jika satu operan bertipe double, operan lainnya juga diubah menjadi tipe double.
  2. Jika tidak, jika satu operan bertipe float, operan lainnya juga diubah menjadi tipe float.
  3. Jika tidak, jika satu operan bertipe panjang, operan lainnya juga dikonversi menjadi tipe panjang.
  4. Jika tidak, kedua operan dikonversi ke tipe int.

Aturan terakhir membedakan Java dari implementasi lama dan C++ dan membuat kode lebih aman. Jadi, misalnya, dalam bahasa Java, setelah mengeksekusi kode

Pendek x = 50 , y = 1000 ; int z = x*y;

variabel z diberi nilai 50000, bukan 15536, seperti pada kebanyakan implementasi C dan C++ yang sudah ketinggalan zaman. Dalam program yang dikompilasi oleh MS VC++ sejak versi 7, serta oleh banyak kompiler modern lainnya (gcc , Intel C++, Borland C++, Comeau, dll.), nilainya juga akan menjadi 50000.

Variabel Objek, Objek, Referensi, dan Pointer

Bahasa Java hanya memiliki objek yang dibuat secara dinamis. Selain itu, variabel tipe objek dan objek di Java adalah entitas yang sama sekali berbeda. Variabel tipe objek adalah referensi, yaitu pointer implisit ke objek yang dibuat secara dinamis. Hal ini ditekankan oleh sintaks dari deklarasi variabel. Misalnya, di Jawa Anda tidak dapat menulis:

Gandakan a[ 10 ] [ 20 ] ; fo b(30) ;

Ganda a = ganda baru [ 10 ] [ 20 ] ; Foo b = Foo baru(30 );

Selama penugasan, meneruskan ke subrutin, dan perbandingan, variabel objek berperilaku seperti pointer, yaitu, alamat objek ditugaskan, disalin, dan dibandingkan. Dan ketika mengakses bidang data atau metode suatu objek menggunakan variabel objek, tidak diperlukan operasi dereferensi khusus - akses ini dilakukan seolah-olah variabel objek adalah objek itu sendiri.

Variabel objek adalah variabel dari jenis apa pun, kecuali untuk jenis numerik sederhana. Tidak ada pointer eksplisit di Java. Tidak seperti pointer dalam C, C++, dan bahasa pemrograman lainnya, referensi di Java sangat aman karena pembatasan ketat pada penggunaannya, khususnya:

  • Anda tidak dapat mengonversi objek bertipe int atau tipe primitif lainnya ke penunjuk atau referensi, dan sebaliknya.
  • Dilarang melakukan operasi ++, , +, atau operasi aritmatika lainnya pada tautan.
  • Konversi jenis antar referensi diatur secara ketat. Dengan pengecualian referensi array, itu hanya diizinkan untuk mengonversi referensi antara tipe yang diwarisi dan turunannya, dan konversi dari tipe yang diwarisi ke tipe yang diwarisi harus secara eksplisit ditentukan dan diperiksa kebermaknaannya saat runtime. Konversi referensi larik hanya diperbolehkan jika konversi tipe dasarnya diizinkan dan tidak ada konflik dimensi.
  • Di Jawa, tidak ada operasi take-address (&) atau take-at-address (*). Tanda bintang di Jawa berarti perkalian, itu saja. Ampersand (&) hanya berarti "bitwise dan" (ampersand ganda adalah "logis dan").

Karena pembatasan yang diperkenalkan secara khusus di Jawa, manipulasi memori langsung pada tingkat alamat fisik tidak mungkin dilakukan (walaupun ada referensi yang tidak menunjukkan apa-apa: nilai referensi tersebut dilambangkan dengan nol).

Tautan duplikat dan kloning

Karena variabel objek adalah variabel referensi, tugas tidak menyalin objek. Jadi, jika Anda menulis

Foo foo, bar; ... bar = foo;

maka alamat akan disalin dari foo ke bar . Artinya, foo dan bar akan menunjuk ke area memori yang sama, yaitu ke objek yang sama; mencoba mengubah bidang objek yang direferensikan oleh foo akan mengubah objek yang direferensikan oleh bar , dan sebaliknya. Jika Anda perlu mendapatkan satu lagi salinan objek sumber, gunakan metode (fungsi anggota, dalam terminologi C++) clone() , yang membuat salinan objek, atau konstruktor salinan.

Metode clone() membutuhkan kelas untuk mengimplementasikan antarmuka Cloneable (lihat di bawah untuk antarmuka). Jika kelas mengimplementasikan antarmuka Cloneable, secara default clone() menyalin semua bidang ( salinan kecil). Jika Anda ingin mengkloning bidang (serta bidangnya, dan seterusnya) alih-alih menyalin, Anda harus mengganti metode clone(). Mendefinisikan dan menggunakan metode clone() seringkali bukan tugas yang sepele.

Pengumpulan sampah

Dalam bahasa Java, tidak mungkin untuk menghapus objek secara eksplisit dari memori - sebagai gantinya, pengumpulan sampah diimplementasikan. Trik tradisional untuk memberikan "petunjuk" kepada pengumpul sampah untuk membatalkan alokasi memori adalah dengan menyetel variabel ke null . Namun, ini tidak berarti bahwa suatu objek yang diganti dengan nilai nol akan dengan sendirinya dan segera dihapus. Teknik ini hanya menghilangkan referensi ke objek, yaitu melepaskan pointer dari objek di memori. Dalam hal ini, harus diingat bahwa objek tidak akan dihapus oleh pengumpul sampah selama setidaknya satu referensi dari variabel atau objek yang digunakan menunjuk ke sana. Ada juga metode untuk memulai pengumpulan sampah paksa, tetapi tidak dijamin akan dipanggil oleh runtime dan tidak direkomendasikan untuk penggunaan normal.

Kelas dan Fungsi

Java bukan bahasa prosedural: fungsi apa pun hanya bisa ada di dalam kelas. Hal ini dipertegas dengan terminologi bahasa Jawa, dimana tidak ada konsep “fungsi” atau “fungsi anggota” (Eng. fungsi anggota), tapi hanya metode. Fungsi standar juga telah menjadi metode. Misalnya, tidak ada fungsi sin() di Java, tetapi ada metode Math.sin() dari kelas Math (yang berisi, selain sin() , cos() , exp() , sqrt() , abs() dan banyak metode lainnya).

Metode dan bidang statis

Agar tidak membuat objek kelas Matematika (dan kelas serupa lainnya) setiap kali Anda perlu memanggil sin () (dan fungsi serupa lainnya), konsep metode statis(Bahasa inggris) metode statis; kadang-kadang dalam bahasa Rusia disebut statis). Metode statis (ditandai dengan kata kunci statis dalam deskripsi) dapat dipanggil tanpa membuat objek kelasnya. Oleh karena itu, seseorang dapat menulis

Ganda x = Matematika .sin(1) ;

Matematika m = Matematika baru(); ganda x = m.sin(1) ;

Pembatasan pada metode statis adalah bahwa mereka hanya dapat mengakses bidang dan metode statis dalam objek ini.

Bidang statis memiliki arti yang sama seperti di C++: hanya ada satu instance masing-masing.

Finalitas

Kata kunci terakhir memiliki arti yang berbeda saat mendeskripsikan variabel, metode, atau kelas. Variabel akhir (bernama konstan) diinisialisasi ketika dideklarasikan dan tidak dapat diubah lebih lanjut. Metode terakhir tidak dapat ditimpa oleh pewarisan. Kelas terakhir tidak dapat memiliki ahli waris sama sekali.

Abstraksi

Di Java, metode yang tidak secara eksplisit dideklarasikan sebagai final atau privat adalah virtual dalam terminologi C++: memanggil metode yang didefinisikan secara berbeda di kelas dasar dan mewarisi selalu memiliki pemeriksaan runtime.

Metode abstrak (deskriptor abstrak) di Java adalah metode yang parameter dan tipe pengembaliannya ditentukan, tetapi bukan badan. Sebuah metode abstrak didefinisikan dalam kelas turunan. Dalam C++, hal yang sama disebut fungsi virtual murni. Agar suatu kelas dapat mendeskripsikan metode abstrak, kelas itu sendiri juga harus dideklarasikan abstrak. Objek kelas abstrak tidak dapat dibuat.

Antarmuka

Tingkat abstraksi tertinggi di Java adalah antarmuka. Semua metode antarmuka abstrak: deskriptor abstrak bahkan tidak diperlukan. Antarmuka bukan kelas. Sebuah kelas dapat mewarisi, atau mengembangkan(memperluas) kelas lain, atau melaksanakan(mengimplementasikan) antarmuka. Juga, sebuah antarmuka dapat mewarisi atau memperluas antarmuka lain.

Di Jawa sebuah kelas tidak dapat mewarisi lebih dari satu kelas, tetapi dapat mengimplementasikan sejumlah antarmuka.

Antarmuka dapat diteruskan ke metode sebagai parameter, tetapi objek dari tipenya tidak dapat dibuat.

Antarmuka penanda

Ada beberapa antarmuka di Java yang tidak berisi metode untuk diimplementasikan, tetapi ditangani dengan cara khusus oleh JVM. Ini adalah antarmuka:

  • java.lang.Dapat dikloning
  • java.io.Serializable
  • java.rmi.remote

Template di Java (generik)

Dimulai dengan Java 5, bahasa ini memiliki mekanisme pemrograman generik - templat yang secara lahiriah mirip dengan templat C++. Menggunakan sintaks khusus dalam deskripsi kelas dan metode, Anda dapat menentukan parameter tipe yang dapat digunakan di dalam deskripsi sebagai tipe bidang, parameter, dan nilai pengembalian metode.

// Deklarasi kelas umum kelas GenerikKelas ( E getFirst() ( ... ) void add(E obj) ( ... ) ) // Menggunakan kelas generik dalam kode Kelas Umum var = Kelas Generik baru () ; var.add("qwerty"); String p = var.getFirst();

Deklarasi umum kelas, antarmuka, dan metode diperbolehkan. Selain itu, sintaks mendukung deklarasi terbatas tipe parameter: indikasi dalam deklarasi konstruksi formulir membutuhkan parameter tipe T untuk mengimplementasikan antarmuka A, B, C, dan seterusnya, dan konstruk mengharuskan parameter tipe T menjadi tipe C atau salah satu leluhurnya.

Tidak seperti template C#, template Java tidak didukung oleh runtime - compiler hanya membuat bytecode yang tidak berisi template apa pun. Implementasi template di Java pada dasarnya berbeda dari implementasi mekanisme serupa di C ++: kompiler tidak menghasilkan varian terpisah dari kelas atau metode template untuk setiap kasus penggunaan template, tetapi hanya membuat implementasi bytecode tunggal yang berisi jenis pemeriksaan dan konversi yang diperlukan. Hal ini menyebabkan sejumlah pembatasan penggunaan template dalam program Java.

Cek Keanggotaan Kelas

Di Java, Anda dapat secara eksplisit memeriksa kelas mana yang dimiliki objek. Ekspresi foo instanceof Foo benar jika objek foo milik kelas Foo atau turunannya, atau mengimplementasikan antarmuka Foo (atau, lebih umum, mewarisi kelas yang mengimplementasikan antarmuka yang diwarisi Foo).

Selanjutnya, fungsi getClass() yang ditentukan untuk semua objek mengembalikan objek bertipe Class . Objek-objek ini dapat dibandingkan. Jadi, misalnya, foo.getClass()==bar.getClass() akan bernilai true jika objek foo dan bar milik kelas yang sama persis (tetapi ini tidak berarti bahwa keduanya adalah dua objek yang identik).

Selain itu, objek bertipe Kelas dari tipe apa pun dapat diperoleh seperti ini: Integer.class , Object.class .

Namun, perbandingan langsung kelas tidak selalu merupakan cara terbaik untuk memeriksa keanggotaan kelas. Seringkali, fungsi isAssignableFrom() digunakan sebagai gantinya. Fungsi ini didefinisikan pada objek bertipe Kelas dan mengambil objek bertipe Kelas sebagai parameter. Jadi, memanggil Foo.class.isAssignableFrom(Bar.class) akan mengembalikan nilai true jika Foo adalah ancestor dari kelas Bar. Karena semua objek adalah turunan dari tipe Object , memanggil Object.class.isAssignableFrom() akan selalu mengembalikan true . Bersama dengan fungsi yang disebutkan dari objek bertipe Kelas, fungsi isInstance() (setara dengan instanceof) dan cast() (mengubah parameter menjadi objek dari kelas yang dipilih) juga digunakan.

Perpustakaan Kelas

Alat pengembangan perangkat lunak

  • JDK - selain satu set perpustakaan untuk platform Java SE dan Java EE, ini berisi kompiler garis komando javac dan satu set utilitas yang juga berfungsi dalam mode baris perintah.
  • NetBeans IDE adalah IDE gratis untuk semua platform Java - Java ME, Java SE dan Java EE. Dipromosikan oleh Sun Microsystems, pengembang Java, sebagai dasar untuk pengembangan perangkat lunak di Java dan bahasa lain (, C++, Fortran, dll.).
  • Java SE dan Java EE. Pekerjaan sedang dilakukan untuk mendukung platform Java ME di Eclipse. C, C++, Fortran, dll. dipromosikan.)
  • IntelliJ IDEA adalah lingkungan pengembangan komersial untuk platform Java SE, Java EE, dan Java ME.

Catatan

  1. jawa (bahasa inggris). Kamus Online Merriam-Webster. Merriam Webster. - Pengucapan bahasa Inggris dari kata "Java". Diakses tanggal 5 Juni 2009.
  2. Robert Tolksdorf. Bahasa pemrograman untuk Java Virtual Machine JVM. adalah penelitian GmbH. - Katalog online bahasa alternatif dan ekstensi bahasa untuk JVM. Diakses tanggal 5 Juni 2009.
  3. Dukungan Mesin Virtual Microsoft Java. Microsoft (2003-09-12). - Pernyataan resmi Microsoft tentang program dukungan MSJVM. Diakses tanggal 5 Juni 2009.
  4. Todd Hoff Arsitektur Amazon (Inggris) (2007-09-18). - Diskusi arsitektur Amazon menggunakan teknologi Java. Diakses pada 6 Juni 2009.
  5. Amazon Elastic Compute Cloud (Amazon EC2) . Layanan Web Amazon LLC. - Deskripsi teknologi dan kemampuan Amazon EC2 sebagai layanan web. Diakses pada 6 Juni 2009.
  6. Todd Hoff Arsitektur eBay (Inggris) (2008-05-27). - Diskusi arsitektur eBay pada platform Java. Diakses pada 6 Juni 2009.
  7. Randy Shoup, Dan Pritchett Arsitektur eBay (Inggris) (PDF). SD Forum 2006(2006-11-29). - Presentasi tentang sejarah perkembangan arsitektur eBay. Diakses pada 6 Juni 2009.
  8. Allen Stern Wawancara Eksklusif Dengan Yandex CTO Ilya Segalovich (Bahasa Inggris) . CenterNetworks (2008-01-14). - Wawancara dengan Yandex CTO Ilya Segalovich. Diakses pada 6 Juni 2009.
  9. Anatoly Orlov Arsitektur Yandex.Search (Rusia) (PowerPoint). Materi pertemuan JUG di Yekaterinburg(2008-05-24). Diakses pada 6 Juni 2009.
  10. Brian Guan Blog LinkedIn. Arsip Blog. Grail di LinkedIn. (Bahasa inggris) . LinkedIn.com (2008-06-11). - Sejarah pembuatan sistem LinkedIn berbasis teknologi Grails Java. Diakses tanggal 5 Juni 2009.
  11. OracleJVM dan Java Stored Procedures. Oracle Inc. - Bagian dari portal Oracle yang didedikasikan untuk teknologi Java sebagai bagian dari server Oracle DBMS. Diakses tanggal 5 Juni 2009.
  12. Tautan ke dokumentasi untuk metode Object.clone()

literatur

  • Monakhov Vadim Bahasa Pemrograman Java dan Lingkungan NetBeans, Edisi ke-2. - St. Petersburg .: "BHV-Petersburg", 2009. - S. 720. - ISBN 978-5-9775-0424-9
  • Joshua Bloch. Jawa. Pemrograman yang efektif = Java yang efektif. - M .: "Lori", 2002. - S. 224. - ISBN 5-85582-169-2
  • Java 2. Perpustakaan Profesional, Volume 1. Fundamentals = Core Java™ 2, Volume I--Fundamentals. - edisi ke-7. - M .: "Williams", 2007. - S. 896. - ISBN 0-13-148202-5
  • Kay S. Horstmann, Gary Cornell. Java 2. Pustaka Profesional, Volume 2. Tips Pemrograman = Core Java™ 2, Volume II--Fitur Lanjutan. - edisi ke-7. - M .: "Williams", 2007. - S. 1168. - ISBN 0-13-111826-9
  • Bruce Eckel. Filsafat Jawa = Berpikir di Jawa. - Edisi ke-3 - St. Petersburg: "Piter", 2003. - S. 976. - ISBN 5-88782-105-1
  • Herbert Schildt, James Holmes. Seni Pemrograman Java = Seni Java. - M .: "Dialektika", 2005. - S. 336. - ISBN 07-07-222971-3
  • Lubos Bruga. Quick Java: Kursus Ekspres Praktis = Luboš Brůha. Java Hotová ešení.. - M .: Sains dan Teknologi, 2006. - Hal. 369. - ISBN 5-94387-282-5

Java adalah bahasa pemrograman yang dikembangkan oleh SunMicrosystems. Aplikasi Java biasanya dikompilasi ke dalam bytecode khusus, sehingga dapat berjalan di mesin virtual Java (JVM) apa pun terlepas dari arsitektur komputer. Tanggal rilis resmi adalah 23 Mei 1995. Saat ini, teknologi Java menyediakan sarana untuk mengubah halaman Web statis menjadi dokumen dinamis yang interaktif dan untuk membuat aplikasi platform-independen terdistribusi.

Program Java diterjemahkan ke dalam bytecode, yang dieksekusi oleh Java Virtual Machine (JVM), sebuah program yang memproses kode byte dan meneruskan instruksi ke perangkat keras sebagai penerjemah.

Keuntungan dari cara menjalankan program ini adalah kebebasan penuh dari bytecode dari sistem operasi dan perangkat keras, yang memungkinkan Anda menjalankan aplikasi Java pada perangkat apa pun yang memiliki mesin virtual terkait. Lain fitur penting Teknologi Java adalah sistem keamanan yang fleksibel karena eksekusi program sepenuhnya dikendalikan oleh mesin virtual. Setiap operasi yang melebihi izin yang ditetapkan program (seperti mencoba akses tidak sah ke data atau menghubungkan ke komputer lain) akan mengakibatkan pembatalan segera.

Seringkali, kelemahan konsep mesin virtual termasuk fakta bahwa eksekusi bytecode oleh mesin virtual dapat mengurangi kinerja program algoritma yang diimplementasikan dalam bahasa Java. Baru-baru ini, sejumlah perbaikan telah dilakukan yang sedikit meningkatkan kecepatan eksekusi program Java:

Penerapan teknologi menerjemahkan bytecode ke dalam kode mesin secara langsung selama operasi program (teknologi JIT) dengan kemampuan untuk menyimpan versi kelas dalam kode mesin,

Penggunaan luas dari platform - kode berorientasi (kode asli) di perpustakaan standar,

Perangkat keras yang menyediakan pemrosesan bytecode yang dipercepat (misalnya, teknologi Jazelle, didukung oleh beberapa prosesor ARM).



Fitur utama bahasa:

Manajemen memori otomatis;

Kemampuan yang diperluas untuk menangani situasi luar biasa;

Seperangkat alat penyaringan input / output yang kaya;

Satu set koleksi standar seperti array, daftar, tumpukan, dll.;

Ketersediaan alat sederhana untuk membuat aplikasi jaringan (termasuk menggunakan protokol RMI);

Kehadiran kelas yang memungkinkan Anda membuat permintaan HTTP dan memproses respons;

Alat bahasa bawaan untuk membuat aplikasi multi-utas;

Akses basis data terpadu:

Pada tingkat kueri SQL individual - berdasarkan JDBC, SQLJ;

Pada tingkat konsep objek dengan kemampuan untuk menyimpan dalam database - berdasarkan Java Data Objects dan Java Persistence API;

Dukungan template (mulai dari versi 1.5);

Eksekusi program secara paralel.

1.4.3 bahasa pemrograman C#

Pada bulan Juni 2000, diketahui tentang bahasa pemrograman baru yang lahir di perut Microsoft. Dia menjadi bagian teknologi baru Microsoft disebut .NET (diucapkan "Dot Net"). Dalam kerangka teknologi ini, satu lingkungan eksekusi untuk program (Common Language Runtime, CLR) yang ditulis dalam bahasa pemrograman yang berbeda disediakan. Salah satu bahasa ini, yang utama di lingkungan ini, adalah C # (C #, baca "C tajam", "C tajam"). Dengan nama bahasa, tentu saja, mereka ingin menekankan hubungannya dengan C++, karena # adalah dua plus yang berpotongan. Tapi yang terpenting, bahasa baru ini mirip dengan Java. Dan tidak diragukan lagi bahwa salah satu alasan kemunculannya adalah keinginan Microsoft untuk menjawab tantangan Sun.

Meskipun penulis C# tidak disebutkan secara resmi, pada halaman judul salah satu edisi awal panduan bahasa, Anders Hejlsberg, pencipta Turbo Pascal dan Delphi, yang pindah ke Microsoft pada tahun 1996, dan Scott Wiltamuth ditunjukkan.

Lingkungan eksekusi program terpadu didasarkan pada penggunaan bahasa perantara IL (Bahasa Menengah - bahasa perantara), yang melakukan peran yang hampir sama dengan bytecode mesin virtual Java. Kompiler dari berbagai bahasa yang digunakan dalam teknologi .NET menerjemahkan program ke dalam kode IL. Seperti bytecode Java, kode IL mewakili instruksi dari komputer stack hipotetis. Namun ada juga perbedaan dalam desain dan penggunaan IL.

Pertama, tidak seperti JVM, IL tidak terikat pada satu bahasa pemrograman. Versi awal Microsoft.NET menyertakan kompiler untuk C++, C#, Visual Basic. Pengembang independen dapat menambahkan bahasa lain dengan membuat kompiler dari bahasa tersebut ke kode IL.

Kedua, IL tidak dimaksudkan untuk interpretasi program, tetapi untuk kompilasi selanjutnya ke dalam kode mesin. Ini memungkinkan Anda untuk mencapai program kinerja yang jauh lebih tinggi. File yang berisi kode IL membawa informasi yang cukup agar kompiler pengoptimal berfungsi.

C# adalah bahasa yang sederhana, modern, berorientasi objek dengan sistem yang aman tipe turunan dari C dan C++. C# akan nyaman dan dapat dimengerti oleh programmer yang mengetahui C dan C++. C# menggabungkan produktivitas Visual Basic dengan kekuatan C++." Kata-kata ini memulai deskripsi C#.

Mempertimbangkan fitur Teknik bahasa:

Unit kompilasi adalah file (seperti dalam C, C++, Java). File mungkin berisi satu atau lebih deskripsi tipe: kelas (class), antarmuka (interface), struktur (struct), enumerasi (enum), tipe delegasi (delegate) dengan atau tanpa indikasi distribusinya melalui ruang nama;

Namespace (ruang nama) mengatur visibilitas objek program (seperti dalam C++). Ruang nama dapat disarangkan. Diperbolehkan untuk menggunakan objek program tanpa secara eksplisit menentukan namespace tempat objek ini berada. Cukup menyebutkan secara umum penggunaan namespace ini dalam menggunakan direktif (seperti dalam Turbo Pascal). Ada alias untuk nama namespace di direktif using (seperti dalam bahasa Oberon);

Tipe data dasar: 8-bit (sbyte, byte), 16-bit (pendek, ushort), 32-bit (int, uint) dan 64-bit (panjang, ulong) bilangan bulat bertanda dan tidak bertanda, real tunggal (float ) dan presisi ganda (ganda), Karakter Unicode(char), tipe boolean (bool, tidak kompatibel dengan bilangan bulat), tipe desimal menyediakan 28 digit signifikan presisi (desimal);

Tipe terstruktur: kelas dan antarmuka (seperti di Java), array satu dimensi dan multidimensi (tidak seperti Java), string (string), struktur (hampir sama dengan kelas, tetapi tidak ditempatkan di heap dan tanpa pewarisan), enum, tidak kompatibel dengan bilangan bulat (seperti dalam Pascal);

Jenis delegasi atau cukup "delegasikan" (seperti jenis prosedural di Modul-2 dan Oberon, penunjuk fungsi di C dan C++);

Tipe dibagi menjadi tipe referensi (kelas, antarmuka, array, delegasi) dan tipe nilai (tipe dasar, enumerasi, struktur). Objek tipe referensi dialokasikan dalam memori dinamis (heap), dan variabel tipe referensi, pada kenyataannya, adalah penunjuk ke objek ini. Dalam hal tipe nilai, variabel bukanlah pointer, tetapi nilai itu sendiri. Konversi jenis implisit hanya diperbolehkan jika tidak melanggar keamanan jenis dan tidak mengakibatkan hilangnya informasi. Semua tipe, termasuk tipe dasar, kompatibel dengan tipe objek, yang merupakan kelas dasar dari semua tipe lainnya. Ada konversi implisit dari tipe nilai ke tipe objek, yang disebut boxing, dan konversi terbalik eksplisit - unboxing;

Pengumpulan sampah otomatis (seperti di Oberon dan Java);

Serangkaian operasi yang luas dengan 14 tingkat prioritas. Mendefinisikan ulang operasi (seperti pada Algol-68, Ada, C++). Dengan operator yang dicentang dan tidak dicentang, Anda dapat mengontrol kontrol luapan saat melakukan operasi pada bilangan bulat;

Metode dengan parameter nilai, parameter referensi (ref), dan parameter output (keluar). Kata ref dan out harus ditulis sebelum parameter, tidak hanya dalam deskripsi metode, tetapi juga saat memanggil. Kehadiran parameter keluaran memungkinkan Anda untuk mengontrol eksekusi penetapan tugas. Menurut aturan bahasa, variabel apa pun harus dijamin memiliki nilai sebelum dilakukan upaya untuk menggunakannya;

Pernyataan kontrol: if, switch, while, do, for, break, continue (seperti pada C, C++ dan Java). Pernyataan foreach, yang mengulang setiap elemen dari "koleksi", beberapa variasi dari pernyataan goto jump;

Penanganan pengecualian (seperti di Jawa);

Properti - elemen kelas (objek), aksesnya dilakukan dengan cara yang sama seperti bidang (Anda dapat menetapkan atau mendapatkan nilai), tetapi diimplementasikan oleh subrutin get dan set yang secara implisit disebut (seperti dalam Object Pascal - bahasa input dari sistem Delphi);

Pengindeks adalah elemen kelas (objek) yang memungkinkan Anda mengakses objek dengan cara yang sama seperti array (dengan menentukan indeks di tanda kurung siku). Diimplementasikan secara implisit disebut get and set routines. Misalnya, akses (untuk membaca) ke karakter string dapat dilakukan sebagai elemen array karena fakta bahwa pengindeks diimplementasikan untuk kelas string standar;

Acara adalah elemen kelas (bidang atau properti) dari tipe prosedural (delegasi), di mana, di luar kelas tempat mereka didefinisikan, hanya operasi += dan -= yang berlaku, memungkinkan Anda untuk menambah atau menghapus metode pengendali acara untuk objek dari kelas ini;

Kode tidak aman (tidak aman) menggunakan pointer dan aritmatika alamat dilokalkan di bagian program yang ditandai dengan pengubah tidak aman;

Praprosesor yang, tidak seperti C dan C++, hanya menyediakan fasilitas kompilasi bersyarat.

Tentu saja, kekurangan C # yang dibahas tidak menghilangkan bahasa prospek sama sekali. Dalam banyak hal lebih disukai daripada C++. Ketidakpuasan umum dengan bahasa C++, yang diakui dengan munculnya bahasa baru, adalah salah satu prasyarat utama untuk keberhasilan C#.

Membandingkan C# dengan Java, Anda dapat melihat banyak kesamaan. Benar, jika sistem Java multiplatform, maka implementasi C # hanya ada untuk sistem operasi. Sistem Windows dan hanya satu. Namun, meskipun berat, dapat diharapkan bahwa bahasa tersebut akan diimplementasikan untuk sistem lain. Selain itu, platform Microsoft .NET itu sendiri dengan lingkungan eksekusi program tunggal dapat dipromosikan ke arsitektur alternatif, terutama ke sistem UNIX.

C# tampaknya menjadi bahasa yang lebih realistis daripada Java. Tidak seperti Java, itu mandiri. Artinya, Anda dapat menulis program apa pun dalam C# tanpa menggunakan bahasa lain. Ini dimungkinkan karena adanya blok kode "tidak aman" yang membuka akses langsung ke perangkat keras. Di Java, akses ke fasilitas tingkat rendah harus menggunakan "metode asli" (native method), yang harus diprogram dalam bahasa lain.

Dan, tentu saja, prospek C # terutama terkait dengan upaya yang, tentu saja, akan dilakukan Microsoft untuk mempromosikannya.