Belajar Java dari bawah ke atas

Jadi, anda mahu memprogram di Java? Itu bagus, dan anda sudah sampai di tempat yang betul Siri Java 101 memberikan pengenalan mandiri untuk pengaturcaraan Java, bermula dengan asas dan merangkumi semua konsep teras yang perlu anda ketahui untuk menjadi pembangun Java yang produktif. Siri ini bersifat teknikal, dengan banyak contoh kod untuk membantu anda memahami konsep semasa kami mengikuti. Saya akan menganggap bahawa anda sudah mempunyai beberapa pengalaman pengaturcaraan, bukan hanya di Java.

Artikel pertama ini memperkenalkan platform Java dan menjelaskan perbezaan antara tiga edisi: Java SE, Java EE, dan Java ME. Anda juga akan mengetahui tentang peranan mesin maya Java (JVM) dalam menyebarkan aplikasi Java. Saya akan membantu anda menyiapkan Java Development Kit (JDK) pada sistem anda supaya anda dapat mengembangkan dan menjalankan program Java, dan saya akan memulakan anda dengan seni bina aplikasi khas Java. Akhirnya, anda akan belajar menyusun dan menjalankan aplikasi Java yang ringkas.

Dikemas kini untuk Java 12 dan JShell baru

Siri ini telah diperbaharui untuk Java 12 dan termasuk pengenalan cepat untuk yang baru jshell: alat interaktif untuk belajar Java dan memprotaip kod Java.

muat turun Dapatkan kod Muat turun kod sumber misalnya aplikasi dalam tutorial ini. Dicipta oleh Jeff Friesen untuk JavaWorld.

Apa itu Java?

Anda boleh menganggap Java sebagai bahasa tujuan umum, berorientasi objek yang mirip C dan C ++, tetapi yang lebih mudah digunakan dan membolehkan anda membuat program yang lebih mantap. Sayangnya, definisi ini tidak memberi anda banyak gambaran mengenai Java. Pada tahun 2000, Sun Microsystems (pencetus platform Java) menggambarkan Java dengan cara ini: 

Java adalah bahasa komputer yang mudah, berorientasikan objek, memahami rangkaian, ditafsirkan, kuat, selamat, tidak senibina, mudah alih, berprestasi tinggi, multithreaded, dan dinamik.

Mari kita pertimbangkan setiap definisi ini secara berasingan.

Bahasa Jawa adalah bahasa yang mudah . Java pada awalnya dimodelkan setelah C dan C ++, dikurangi beberapa fitur yang berpotensi membingungkan. Petunjuk, warisan pelaksanaan banyak, dan kelebihan operator adalah beberapa ciri C / C ++ yang bukan merupakan sebahagian daripada Java. Ciri yang tidak dimandatkan dalam C / C ++, tetapi penting untuk Java, adalah kemudahan pengumpulan sampah yang secara automatik mengambil kembali objek dan susunan.

Java adalah bahasa yang berorientasikan objek . Fokus berorientasi objek Java membolehkan para pengembang berusaha menyesuaikan Java untuk menyelesaikan masalah, dan bukannya memaksa kita memanipulasi masalah untuk memenuhi kekangan bahasa. Ini berbeza dengan bahasa terstruktur seperti C. Sebagai contoh, sedangkan Java membolehkan anda memusatkan perhatian pada objek akaun simpanan, C menghendaki anda berfikir secara terpisah mengenai keadaan akaun simpanan (baki seperti itu) dan tingkah laku (seperti deposit dan pengeluaran).

Java adalah bahasa yang memahami rangkaian . Perpustakaan rangkaian Java yang luas menjadikannya mudah untuk mengatasi protokol rangkaian Transmission Control Protocol / Internet Protocol (TCP / IP) seperti HTTP (HyperText Transfer Protocol) dan FTP (File Transfer Protocol), dan mempermudah tugas membuat sambungan rangkaian. Selanjutnya, program Java dapat mengakses objek di jaringan TCP / IP, melalui Uniform Resource Locators (URL), dengan kemudahan yang sama seperti yang Anda miliki untuk mengaksesnya dari sistem file lokal.

Java adalah bahasa yang ditafsirkan . Pada waktu runtime, program Java secara tidak langsung dijalankan pada platform yang mendasari (seperti Windows atau Linux) melalui mesin maya (yang merupakan perwakilan perisian dari platform hipotetis) dan persekitaran pelaksanaan yang berkaitan. Mesin maya menerjemahkan kod byte program Java (arahan dan data yang berkaitan) kepada arahan khusus platform melalui interpretasi. Tafsiran adalah tindakan mencari tahu apa maksud arahan bytecode dan kemudian memilih arahan khusus platform "kalengan" untuk dilaksanakan. Mesin maya kemudian melaksanakan arahan khusus platform tersebut.

Pentafsiran menjadikannya lebih mudah untuk men-debug program Java yang salah kerana lebih banyak maklumat masa kompilasi tersedia pada waktu berjalan. Tafsiran juga memungkinkan untuk menunda langkah penghubung antara potongan program Java sehingga waktu berjalan, yang mempercepat pengembangan.

Java adalah bahasa yang mantap . Program Java mesti boleh dipercayai kerana digunakan dalam aplikasi yang sangat penting bagi pengguna dan misi, mulai dari pemain Blu-ray hingga sistem navigasi kenderaan atau sistem udara. Ciri-ciri bahasa yang membantu menjadikan Java kuat termasuk deklarasi, pemeriksaan jenis pendua pada waktu kompilasi dan waktu berjalan (untuk mengelakkan masalah ketidakcocokan versi), susunan benar dengan pemeriksaan batas automatik, dan peninggalan penunjuk. (Lihat "Fitur bahasa Jawa Dasar" untuk memulai dengan jenis bahasa, literal, pemboleh ubah, dan banyak lagi.)

Aspek lain dari ketahanan Java adalah bahawa gelung mesti dikendalikan oleh ungkapan Boolean dan bukannya ungkapan integer di mana 0 adalah salah dan nilai bukan nol adalah benar. Sebagai contoh, Java tidak membenarkan gelung gaya C seperti while (x) x++;kerana gelung itu mungkin tidak berakhir di tempat yang diharapkan. Sebaliknya, anda mesti secara jelas memberikan ungkapan Boolean, seperti while (x != 10) x++;(yang bermaksud gelung akan berjalan hingga xsama dengan 10).

Java adalah bahasa yang selamat . Program Java digunakan dalam lingkungan jaringan / distribusi. Oleh kerana program Java dapat melakukan migrasi ke dan melaksanakan di berbagai platform rangkaian, penting untuk melindungi platform ini dari kod jahat yang mungkin menyebarkan virus, mencuri maklumat kad kredit, atau melakukan tindakan jahat lainnya. Ciri-ciri bahasa Java yang menyokong ketahanan (seperti peninggalan penunjuk) berfungsi dengan ciri keselamatan seperti model keselamatan kotak pasir Java dan penyulitan kunci awam. Bersama-sama ciri-ciri ini mencegah virus dan kod berbahaya lain daripada mendatangkan malapetaka pada platform yang tidak curiga.

Secara teori, Java selamat. Dalam praktiknya, pelbagai kelemahan keselamatan telah dikesan dan dieksploitasi. Hasilnya, Sun Microsystems ketika itu dan Oracle kini terus mengeluarkan kemas kini keselamatan.

Java adalah bahasa yang berkecuali seni bina . Rangkaian menghubungkan platform dengan seni bina yang berbeza berdasarkan pelbagai mikropemproses dan sistem operasi. Anda tidak boleh mengharapkan Java untuk menghasilkan arahan khusus platform dan arahan ini "difahami" oleh semua jenis platform yang merupakan sebahagian daripada rangkaian. Sebaliknya, Java menghasilkan arahan bytecode bebas platform yang mudah ditafsirkan oleh setiap platform (melalui pelaksanaan JVM).

Java adalah bahasa mudah alih . Neutraliti seni bina menyumbang kepada mudah alih. Walau bagaimanapun, terdapat lebih banyak kemudahan portabel daripada arahan bytecode bebas platform. Pertimbangkan bahawa ukuran jenis bilangan bulat tidak boleh berbeza. Sebagai contoh, jenis bilangan bulat 32-bit mesti selalu ditandatangani dan menempati 32 bit, tidak kira di mana bilangan bulat 32-bit diproses (contohnya, platform dengan register 16-bit, platform dengan register 32-bit, atau platform dengan daftar 64-bit). Perpustakaan Java juga menyumbang kepada mudah alih. Sekiranya perlu, mereka menyediakan jenis yang menghubungkan kod Java dengan kemampuan khusus platform dengan cara yang paling mudah dibawa.

Java adalah bahasa berprestasi tinggi . Tafsiran menghasilkan tahap prestasi yang biasanya lebih daripada mencukupi. Untuk senario aplikasi berprestasi tinggi Java menggunakan kompilasi tepat pada waktunya, yang menganalisis urutan arahan bytecode yang ditafsirkan dan menyusun urutan arahan yang sering ditafsirkan ke petunjuk khusus platform. Percubaan berikutnya untuk menafsirkan urutan arahan bytecode ini menghasilkan pelaksanaan arahan khusus platform yang setara, menghasilkan peningkatan prestasi.

Java adalah bahasa multithreaded . Untuk meningkatkan prestasi program yang mesti menyelesaikan beberapa tugas sekaligus, Java menyokong konsep pelaksanaan berulir . Sebagai contoh, program yang menguruskan antara muka pengguna grafik (GUI) sambil menunggu input dari sambungan rangkaian menggunakan utas lain untuk melakukan penantian dan bukannya menggunakan utas GUI lalai untuk kedua tugas. Ini menjadikan GUI responsif. Primitif penyegerakan Java membolehkan utas menyampaikan data antara mereka dengan selamat tanpa merosakkan data. (Lihat pengaturcaraan berulir di Java yang dibahas di tempat lain dalam siri Java 101.)

Java adalah bahasa yang dinamik . Kerana interkoneksi antara kod program dan perpustakaan berlaku secara dinamik pada waktu runtime, tidak perlu menghubungkannya secara eksplisit. Akibatnya, ketika program atau salah satu perpustakaannya berkembang (misalnya, untuk perbaikan bug atau peningkatan prestasi), pembangun hanya perlu menyebarkan program atau perpustakaan yang dikemas kini. Walaupun tingkah laku dinamik menghasilkan lebih sedikit kod untuk diedarkan ketika perubahan versi berlaku, dasar pengedaran ini juga dapat menyebabkan konflik versi. Contohnya, pembangun mengalih keluar jenis kelas dari perpustakaan, atau menamakannya semula. Apabila syarikat mengedarkan perpustakaan yang dikemas kini, program yang ada yang bergantung pada jenis kelas akan gagal. Untuk mengurangkan masalah ini, Java menyokong jenis antara muka, seperti kontrak antara dua pihak. (Lihat antara muka, jenis, dan ciri bahasa berorientasi objek lain yang dibincangkan di tempat lain dalam siri Java 101.)

Membongkar definisi ini banyak mengajar kita mengenai Java. Yang paling penting, ia menyatakan bahawa Java adalah bahasa dan platform. Anda akan mengetahui lebih lanjut mengenai komponen platform Java - iaitu mesin maya Java dan persekitaran pelaksanaan Java - kemudian dalam tutorial ini.

Tiga edisi Java: Java SE, Java EE, dan Java ME

Sun Microsystems mengeluarkan kit pengembangan perangkat lunak Java 1.0 (JDK) pada bulan Mei 1995. JDK pertama digunakan untuk mengembangkan aplikasi desktop dan applet, dan Java kemudian berkembang untuk merangkumi pengaturcaraan pelayan perusahaan dan peranti mudah alih. Menyimpan semua perpustakaan yang diperlukan dalam satu JDK akan menjadikan JDK terlalu besar untuk diedarkan, terutamanya kerana pengedaran pada tahun 1990-an dibatasi oleh CD bersaiz kecil dan kelajuan rangkaian yang perlahan. Oleh kerana kebanyakan pengembang tidak memerlukan setiap API terakhir (pemaju aplikasi desktop tidak perlu mengakses API Java perusahaan), Sun memperhitungkan Java menjadi tiga edisi utama. Ini akhirnya dikenal sebagai Java SE, Java EE, dan Java ME:

  • Platform Java, Edisi Standard (Java SE) adalah platform Java untuk mengembangkan aplikasi sisi klien (yang berjalan di desktop) dan applet (yang berjalan di pelayar web). Perhatikan bahawa untuk alasan keselamatan applet tidak lagi disokong secara rasmi.
  • Platform Java, Enterprise Edition (Java EE ) adalah platform Java yang dibangun di atas Java SE, yang digunakan secara eksklusif untuk mengembangkan aplikasi server berorientasi perusahaan. Aplikasi sisi pelayan merangkumi servlet Java , yang merupakan program Java yang serupa dengan applet tetapi berjalan pada pelayan dan bukannya klien. Servlets sesuai dengan Java Servlet API.
  • Java Platform, Micro Edition (Java ME) juga dibangun di atas Java SE. Ini adalah platform Java untuk mengembangkan MIDlets , yang merupakan program Java yang berjalan pada perangkat informasi bergerak, dan Xlets , yang merupakan program Java yang berjalan pada perangkat tertanam.

Java SE adalah platform dasar untuk Java dan menjadi fokus untuk siri Java 101. Contoh kod akan berdasarkan versi Java yang paling baru pada saat penulisan, Java 12.

Platform Java dan JVM

Java adalah bahasa pengaturcaraan dan platform untuk menjalankan kod Java yang dikompilasi. Platform ini terdiri terutamanya dari JVM, tetapi juga merangkumi persekitaran pelaksanaan yang menyokong pelaksanaan JVM pada platform yang mendasari (asli). JVM merangkumi beberapa komponen untuk memuat, mengesahkan, dan melaksanakan kod Java. Gambar 1 menunjukkan bagaimana program Java dijalankan di platform ini. 

Jeff Friesen

Di bahagian atas rajah adalah rangkaian fail kelas program, salah satunya dilambangkan sebagai fail kelas utama. Program Java terdiri daripada sekurang-kurangnya file kelas utama, yang merupakan file kelas pertama yang akan dimuat, disahkan, dan dilaksanakan.

JVM mewakilkan pemuatan kelas ke komponen pemuat kelasnya. Pemuat kelas memuat fail kelas dari pelbagai sumber, seperti sistem fail, rangkaian, dan fail arkib. Mereka melindungi JVM dari selok-belok pemuatan kelas.

Fail kelas yang dimuat disimpan dalam memori dan ditunjukkan sebagai objek yang dibuat dari Classkelas. Setelah dimuat, pengesah bytecode mengesahkan pelbagai arahan kod bytek untuk memastikan bahawa ia sah dan tidak akan menjejaskan keselamatan.

Sekiranya bykod fail kelas tidak sah, JVM akan dihentikan. Jika tidak, komponen pentafsirnya menafsirkan satu bytecode satu arahan pada satu masa. Tafsiran mengenal pasti arahan bytecode dan melaksanakan arahan asli yang setara.

Beberapa urutan arahan bytecode dijalankan lebih kerap daripada yang lain. Apabila jurubahasa mengesan keadaan ini, penyusun just-in-time (JIT) JVM menyusun urutan bytecode ke kod asli untuk pelaksanaan yang lebih pantas.

Semasa pelaksanaan, jurubahasa biasanya menemui permintaan untuk melaksanakan bytecode fail kelas lain (milik program atau perpustakaan). Apabila ini berlaku, pemuat kelas memuat fail kelas dan pengesah bytecode mengesahkan kod bytec fail kelas yang dimuat sebelum dijalankan. Juga semasa pelaksanaan, arahan bytecode mungkin meminta agar JVM membuka file, menampilkan sesuatu di layar, mengeluarkan suara, atau melakukan tugas lain yang memerlukan kerjasama dengan platform asli. JVM bertindak balas dengan menggunakan teknologi jambatan Java Native Interface (JNI) untuk berinteraksi dengan platform asli untuk melaksanakan tugas.