Aplikasi, applet, dan hibrida

Jika Anda telah mengikuti Java 101 , Anda tahu bahwa Jacob Weintraub telah membuat serangkaian artikel luar biasa yang dirancang untuk membantu pemula Java menjadi pengembang Java. Namun, karena Jacob tidak lagi dapat melanjutkan kolom ini, JavaWorld telah memberikan obor kepada saya.

Anda akan segera mengetahui bahwa rute saya untuk menjadi pengembang Java mengikuti jalur yang berbeda. Misalnya, saya lebih suka berbicara tentang aspek pemrograman Java yang tidak berorientasi objek (seperti tipe, variabel, operator, ekspresi, dan pernyataan) sebelum mempelajari sisi berorientasi objeknya. Saya yakin pendekatan itu akan meningkatkan aliran alami Java 101 dari satu topik ke topik lainnya - aliran yang bergerak mulus dari awal hingga akhir. Untuk mempermudah pembahasan, sesekali saya akan menyajikan konsep lanjutan sebelum saya jelaskan secara lengkap. Akibatnya, Anda akan menemukan penjelasan singkat tentang topik yang lebih canggih saat Anda mempelajari artikel ini dan artikel mendatang.

Java 101 akan memperkenalkan banyak program contoh. Setiap program dikompilasi dengan Sun's Java 2 Platform, Standard Edition versi 1.4 (juga dikenal sebagai SDK 1.4) compiler dan diuji pada platform Windows 98 SE. Meskipun saya akan mencoba untuk meminimalkan referensi Windows, itu tidak selalu memungkinkan, jadi saya akan memperingatkan Anda ketika sebuah artikel tersesat ke dunia Windows.

Karena saya belum menghabiskan banyak waktu berurusan dengan Java dari perspektif server, kolom ini akan fokus pada Java sisi klien. Itu tidak berarti kami tidak akan menjelajahi topik seperti Remote Method Invocation dan JDBC, yang menjembatani sisi klien dan server. Namun, saya tidak akan menyajikan servlet, Enterprise JavaBeans, Java Server Pages, dan topik sisi server lainnya. Untuk mendapatkan ide yang lebih baik tentang subjek yang akan saya bahas, lihat sidebar, The Road Ahead, untuk garis besar kursus Java 101 .

Dalam artikel bulan ini, saya membahas tentang struktur aplikasi, applet, dan program hybrid. Dari perspektif aplikasi, Anda mungkin menemukan beberapa tumpang tindih dari artikel Jacob sebelumnya, tetapi saya juga akan memperkenalkan cukup banyak konten baru.

Kategori program

Java memberi Anda kemampuan untuk membuat empat jenis program: aplikasi, applet, hibrid, dan servlet. Saya membahas tiga program pertama dalam artikel ini. Untuk mempelajari lebih lanjut tentang servlet, lihat dokumentasi Java 2 Platform, Enterprise Edition.

Aplikasi

Sebuah aplikasi adalah program mandiri yang terdiri dari setidaknya satu kelas dengan main()metode. Metode itu menampilkan tanda tangan berikut:

public static void main (String [] args)

Arti publickata kunci main()dapat dipanggil dari luar kelas tempat ia dideklarasikan. The staticberarti kata kunci main()adalah callable tanpa referensi obyek. Dengan kata lain, JVM tidak perlu membuat objek dari kelas yang dideklarasikan main()sebelum dipanggil main(). Terakhir, voidkata kunci berarti main()tidak mengembalikan nilai.

Seperti metode lain, main()memiliki daftar parameter, daftar jenis dan nama variabel. Dalam main()kasus ini, hanya satu parameter yang muncul - args. Parameter itu dideklarasikan sebagai referensi ke - juga dikenal sebagai alamat - larik Stringobjek. Setiap objek berisi konten argumen yang diteruskan ke aplikasi melalui baris perintah program. Catatan: Anda tidak harus menggunakan argssebagai nama parameter itu. Anda dapat dengan mudah menentukan chickens, seperti dalam String [] chickens.

Kode 1 menyajikan kode sumber untuk aplikasi yang disebut App. Aplikasi itu mencetak daftar argumen yang diteruskan ke dirinya sendiri melalui baris perintah.

Daftar 1. App.java

// App.java class App {public static void main (String [] args) {System.out.println ("Argumen perintah \ n"); untuk (int i = 0; i <args.length; i ++) System.out.println (args [i]); }}

KOLOM TULISAN:

TEXTBOX_HEAD: Komentar

Kode 1 mengilustrasikan teknik yang saya gunakan untuk mengidentifikasi program - di bagian atas file sumber, saya menempatkan komentar yang mengidentifikasi nama file sumber. Saya menemukan komentar itu berguna untuk melacak program. Jika Anda tidak terbiasa dengan konsep komentar, itu tidak lebih dari dokumentasi kode sumber yang hanya memiliki arti di tingkat sumber. Ketika kode sumber dikompilasi, komentar tersebut dibuang. Kami akan melihat komentar lagi bulan depan.

: END_TEXTBOX

Kode dalam App's main()metode panggilan salah satu outreferensi variabel objek println()metode untuk informasi output ke perangkat output standar. Biasanya, perangkat itu adalah jendela perintah seperti jendela Microsoft Windows DOS, meskipun perangkat dapat diarahkan ke file. (Saya akan menunjukkan pengalihan itu di artikel berikutnya.) Karakter periode memisahkan println()pemanggilan metode dari outvariabel referensi objek. Pada gilirannya, outdideklarasikan dalam kelas yang dipanggil Systemdan dipisahkan Systemoleh karakter titik. Variabel referensi objek sangat mirip dengan pointer C atau C ++: Ini adalah variabel yang berisi alamat variabel lain. Anda akan menerima sedikit eksposur variabel referensi objek di artikel mendatang.

Jika Anda pernah bekerja dengan C atau C ++, Anda mungkin akrab dengan struktur pernyataan loop for (yang muncul dalam kode sumber melalui kata kunci for). Pernyataan perulangan for secara berulang mengeksekusi satu atau lebih pernyataan baik untuk beberapa kali atau tanpa batas. (Dalam artikel mendatang, saya akan menjelajahi pernyataan perulangan for dan pernyataan lain secara rinci.) Dalam Appkasus ini, formengeksekusi System.out.printlnpemanggilan metode untuk setiap argumen yang diteruskan ke program itu pada baris perintah. Perhatikan args.length. Di Java, lengthadalah properti dari sebuah array, dan ia mengembalikan jumlah elemen array.

Di baris perintah, ketik javac App.javauntuk mengkompilasi App. Jika Anda telah memasukkan semuanya seperti yang ditunjukkan, Anda akan mendapatkan file kelas yang disebut App.classyang berisi Appinstruksi kode byte. Jadi, bagaimana Anda lari App? Lihatlah Gambar 1. Bahwa angka menunjukkan Appberjalan dari baris perintah dengan tiga argumen: one, two, dan three.

Catatan: Gambar 1 menunjukkan Appberjalan di bawah Windows 98 SE. Unix dan Linux berjalan Appserupa. Namun, saat dijalankan di bawah Mac, Anda mungkin harus menyelesaikan lebih banyak pekerjaan. Saya ingin menunjukkan cara melakukannya, tetapi saya belum pernah menggunakan Java di Mac.

The javaProgram mengeksekusi aplikasi. Di bawah Windows, program itu disimpan dalam file yang dapat dieksekusi bernama java.exe. Seperti javac, javaditentukan pada baris perintah. Nama file kelas yang berisi main()metode kemudian mengikuti java.

The javaProgram terlihat untuk main()metode dalam file kelas. Jika tidak ditemukan main(), itu akan mengeluarkan pesan kesalahan. (Seperti yang Anda lihat dari Gambar 1, Anda TIDAK menentukan .classekstensi file.)

Argumen dapat mengikuti nama kelas, tetapi bersifat opsional. Dalam Gambar 1, argumen-argumen yang one, two, dan three. javamembuat sebuah Stringarray (melalui Java Native Interface - JNI), dan mengisi setiap elemen dengan referensi ke Stringobjek yang berisi karakter yang menyusun argumen. Setelah selesai, main()metode ini dipanggil (melalui JNI) dan meneruskan referensi ke Stringarray.

Misalkan Anda mengetik java App *di baris perintah. Menurut Anda, apa yang akan ditampilkan jendela perintah? Jika menurut Anda jawabannya adalah tanda bintang, lihat Gambar 2.

Gambar 2 menunjukkan Appmenampilkan nama-nama file yang terletak di direktori yang sama dengan App.class. Ternyata karakter asterisk mewakili wildcard. Dengan kata lain, ini mewakili semua nama file di direktori saat ini. Saat javamembangun Stringlarik, ia memperoleh daftar semua nama berkas direktori saat ini, dan menempatkan setiap nama berkas dalam Stringobjek terpisah , yang kemudian disimpan sebagai elemen dalam larik.

Coba lari java App * *. Tebak apa yang akan ditampilkan. Karena setiap tanda bintang menyebabkan javamendapatkan daftar semua nama file, Anda akan melihat dua salinan dari semua nama file di direktori saat ini.

Suppose you write a Calculator application that multiplies two numbers with the asterisk, as in java Calculator 4 * 3. Based on the previous discussion, 4 and 3 will not multiply. If you want the asterisk to be interpreted as itself -- and not a wildcard -- you must surround it with a pair of double quote characters. For example, you would type java Calculator 4 "*" 3. Furthermore, if your argument contains embedded space characters, and you want to include those space characters as part of the argument, you must use double quotes. For example, type java App "my compound argument" at the command line to specify my compound argument as App's single argument.

Our first Java application consisted of a single class. However, you can also create applications that consist of multiple classes. Furthermore, each class can have its own main() method. To see what that situation looks like, check out Listing 2.

Listing 2. Fred.java

// Fred.java class A { public static void main (String [] dogs) { System.out.println ("Class A main() method"); } } class B { public static void main (String [] chickens) { System.out.println ("Class B main() method"); System.out.println ("Num args: " + chickens.length); } } 

Listing 2 presents source code stored in a file called Fred.java. That source code consists of two classes: A and B. When compiled (as in javac Fred.java), you end up with two class files: A.class and B.class. If you were to type java A, you would see Class A main() method in the command window. However, if you were to type java B, the command window would display Class B main() method, followed by a line that begins with Num args: and identifies the number of arguments passed on the command line.

Is Fred one application or two applications? The answer depends on your perspective. Normally, an application consists of a single class with a main() method. As you've seen, you run the application by specifying java and the name of the class that contains main(). However, you might find yourself placing a main() method in other classes (for debugging purposes). To prevent confusion for anyone using your program, either remove all main() methods except the main() method that starts the application, or identify the class file containing the official main() method before deploying the application.

In addition to java, the Java 2 SDK includes a javaw program that you can use to run applications. That program is almost identical to java, except that javaw does not display a command window when running an application (unless you run the application through a Windows batch file, which automatically opens a command window). For example, suppose your class file called GUIDemo is stored in the c:\jdk1.4\projects directory (assuming Windows). You decide to create a Windows shortcut for running that program, and choose the following command line: java -cp c:\jdk1.4\projects GUIDemo. (The -cp option tells java where to find a class file called GUIDemo.class.) When you select the shortcut, a command window pops up along with GUIDemo's GUI window. However, if you change java to javaw, you won't see the command window.

Now that you've had a chance to play with applications, let's take a look at the second category of Java programs -- applets.

Applets

An applet is an application that runs in the context of a Web browser that controls the applet. Because a rectangular area of the Webpage displays an applet's output, applets are described as being embedded in Webpages. Furthermore, by calling certain methods -- which we'll shortly investigate -- the browser manages an applet's life cycle.

An applet's class files download automatically to a user's machine when the user surfs to a Webpage containing the applet. Once downloaded, the browser's virtual machine or the Java Plug-in software executes those class files. (See Resources for an article that explores Java Plug-in.)

Imagine a malicious person creating an applet that deletes files, wastes reams of printer paper, steals passwords or other sensitive information, and so on. An applet with unrestricted access to a user's machine could perform all of those misdeeds. For that reason, applets can only execute limited functions. For example, an applet cannot perform any file-related activities.

Sun has established a specific (and involved) procedure for turning restricted applets into unrestricted applets. However, unrestricted applets can only run under the user's permission. (We will explore that subject in a future article.) To be an applet, one -- and only one -- of the applet's classes must conform to the following pattern:

public class class_name extends java.applet.Applet { } 

The required public keyword gives the Web browser access to the applet. The extends keyword indicates the object-oriented programming concept of inheritance and suggests that the class_name class inherits applet capabilities from a class called Applet (located in the java.applet package -- an organizational mechanism for classes and class files -- to be explored in a future article).

Setiap applet memiliki siklus hidup. Sebuah applet diinisialisasi (sekali dan hanya sekali), dimulai dan dihentikan (satu kali atau lebih selama masa pakainya), dan dimusnahkan (sekali dan hanya sekali). Browser memanggil salah satu dari empat metode pada titik penting selama siklus hidup tersebut untuk menunjukkan bahwa applet telah memasuki fase keberadaan lain. Metode tersebut adalah init(), start(), stop(), dan destroy().