⑴ java.包 JAVA類 JAVA APPLET .......等跟JAVA挨得上邊得都要!
java基礎知識
基礎知識:
1.C++或Java中的異常處理機制的簡單原理和應用。
當JAVA程序違反了JAVA的語義規則時,JAVA虛擬機就會將發生的錯誤表示為一個異常。違反語義規則包括2種情況。一種是JAVA類庫內置的語義檢查。例如數組下標越界,會引發IndexOutOfBoundsException;訪問null的對象時會引發 NullPointerException。另一種情況就是JAVA允許程序員擴展這種語義檢查,程序員可以創建自己的異常,並自由選擇在何時用 throw關鍵字引發異常。所有的異常都是java.lang.Thowable的子類。
2. Java的介面和C++的虛類的相同和不同處。
由於Java不支持多繼承,而有可能某個類或對象要使用分別在幾個類或對象裡面的方法或屬性,現有的單繼承機制就不能滿足要求。與繼承相比,介面有更高的靈活性,因為介面中沒有任何實現代碼。當一個類實現了介面以後,該類要實現介面裡面所有的方法和屬性,並且介面裡面的屬性在默認狀態下面都是 public static,所有方法默認情況下是public.一個類可以實現多個介面。
3. 垃圾回收的優點和原理。並考慮2種回收機制。
Java語言中一個顯著的特點就是引入了垃圾回收機制,使c++程序員最頭疼的內存管理的問題迎刃而解,它使得Java程序員在編寫程序的時候不再需要考慮內存管理。由於有個垃圾回收機制,Java中的對象不再有「作用域」的概念,只有對象的引用才有「作用域」。垃圾回收可以有效的防止內存泄露,有效的使用可以使用的內存。垃圾回收器通常是作為一個單獨的低級別的線程運行,不可預知的情況下對內存堆中已經死亡的或者長時間沒有使用的對象進行清楚和回收,程序員不能實時的調用垃圾回收器對某個對象或所有對象進行垃圾回收。回收機制有分代復制垃圾回收和標記垃圾回收,增量垃圾回收。
4. 請說出你所知道的線程同步的方法。
wait():使一個線程處於等待狀態,並且釋放所持有的對象的lock。
sleep():使一個正在運行的線程處於睡眠狀態,是一個靜態方法,調用此方法要捕捉InterruptedException異常。
notify():喚醒一個處於等待狀態的線程,注意的是在調用此方法的時候,並不能確切的喚醒某一個等待狀態的線程,而是由JVM確定喚醒哪個線程,而且不是按優先順序。
Allnotity():喚醒所有處入等待狀態的線程,注意並不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。
5. 請講一講析構函數和虛函數的用法和作用。
6. Error與Exception有什麼區別?
Error表示系統級的錯誤和程序不必處理的異常,
Exception表示需要捕捉或者需要程序進行處理的異常。
7. 在java中一個類被聲明為final類型,表示了什麼意思?
表示該類不能被繼承,是頂級類。
8. 描述一下你最常用的編程風格。
9. heap和stack有什麼區別。
棧是一種線形集合,其添加和刪除元素的操作應在同一段完成。棧按照後進先出的方式進行處理。
堆是棧的一個組成元素
10. 如果系統要使用超大整數(超過long長度范圍),請你設計一個數據結構來存儲這種超大型數字以及設計一種演算法來實現超大整數加法運算)。
public class BigInt()
{
int[] ArrOne = new ArrOne[1000];
String intString="";
public int[] Arr(String s)
{
intString = s;
for(int i=0;i<ArrOne.leght;i++)
{
11. 如果要設計一個圖形系統,請你設計基本的圖形元件(Point,Line,Rectangle,Triiangles)的簡單實現
12,談談final, finally, finalize的區別。
final—修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變數或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變數必須在聲明時給定初值,而在以後的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載。
finally—再異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那麼相匹配的 catch 子句就會執行,然後控制就會進入 finally 塊(如果有的話)。
finalize—方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。
13,Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以implements(實現)interface(介面)?
匿名的內部類是沒有名字的內部類。不能extends(繼承) 其它類,但一個內部類可以作為一個介面,由另一個內部類實現。
14,Static Nested Class 和 Inner Class的不同,說得越多越好(面試題有的很籠統)。
Nested Class (一般是C++的說法),Inner Class (一般是JAVA的說法)。Java內部類與C++嵌套類最大的不同就在於是否有指向外部的引用上。具體可見http: //www.frontfree.net/articles/services/view.asp?id=704&page=1
註: 靜態內部類(Inner Class)意味著1創建一個static內部類的對象,不需要一個外部類對象,2不能從一個static內部類的一個對象訪問一個外部類對象
第四,&和&&的區別。
&是位運算符。&&是布爾邏輯運算符。
15,HashMap和Hashtable的區別。
都屬於Map介面的類,實現了將惟一鍵映射到特定的值上。
HashMap 類沒有分類或者排序。它允許一個 null 鍵和多個 null 值。
Hashtable 類似於 HashMap,但是不允許 null 鍵和 null 值。它也比 HashMap 慢,因為它是同步的。
16,Collection 和 Collections的區別。
Collections是個java.util下的類,它包含有各種有關集合操作的靜態方法。
Collection是個java.util下的介面,它是各種集合結構的父介面。
17,什麼時候用assert。
斷言是一個包含布爾表達式的語句,在執行這個語句時假定該表達式為 true。如果表達式計算為 false,那麼系統會報告一個 Assertionerror。它用於調試目的:
assert(a > 0); // throws an Assertionerror if a <= 0
斷言可以有兩種形式:
assert Expression1 ;
assert Expression1 : Expression2 ;
Expression1 應該總是產生一個布爾值。
Expression2 可以是得出一個值的任意表達式。這個值用於生成顯示更多調試信息的 String 消息。
斷言在默認情況下是禁用的。要在編譯時啟用斷言,需要使用 source 1.4 標記:
javac -source 1.4 Test.java
要在運行時啟用斷言,可使用 -enableassertions 或者 -ea 標記。
要在運行時選擇禁用斷言,可使用 -da 或者 -disableassertions 標記。
要系統類中啟用斷言,可使用 -esa 或者 -dsa 標記。還可以在包的基礎上啟用或者禁用斷言。
可以在預計正常情況下不會到達的任何位置上放置斷言。斷言可以用於驗證傳遞給私有方法的參數。不過,斷言不應該用於驗證傳遞給公有方法的參數,因為不管是否啟用了斷言,公有方法都必須檢查其參數。不過,既可以在公有方法中,也可以在非公有方法中利用斷言測試後置條件。另外,斷言不應該以任何方式改變程序的狀態。
18,GC是什麼? 為什麼要有GC? (基礎)。
GC是垃圾收集器。Java 程序員不用擔心內存管理,因為垃圾收集器會自動進行管理。要請求垃圾收集,可以調用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
19,String s = new String("xyz");創建了幾個String Object?
兩個對象,一個是「xyx」,一個是指向「xyx」的引用對象s。
20,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;
21,short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?
short s1 = 1; s1 = s1 + 1;有錯,s1是short型,s1+1是int型,不能顯式轉化為short型。可修改為s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正確。
22,sleep() 和 wait() 有什麼區別? 搞線程的最愛
sleep()方法是使線程停止一段時間的方法。在sleep 時間間隔期滿後,線程不一定立即恢復執行。這是因為在那個時刻,其它線程可能正在運行而且沒有被調度為放棄執行,除非(a)「醒來」的線程具有更高的優先順序 (b)正在運行的線程因為其它原因而阻塞。
wait()是線程交互時,如果線程對一個同步對象x 發出一個wait()調用,該線程會暫停執行,被調對象進入等待狀態,直到被喚醒或等待時間到。
23,Java有沒有goto?
Goto—java中的保留字,現在沒有在java中使用。
24,數組有沒有length()這個方法? String有沒有length()這個方法?
數組沒有length()這個方法,有length的屬性。
String有有length()這個方法。
25,Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型?
方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被「屏蔽」了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。
26,Set里的元素是不能重復的,那麼用什麼方法來區分重復與否呢? 是用==還是equals()? 它們有何區別?
Set里的元素是不能重復的,那麼用iterator()方法來區分重復與否。equals()是判讀兩個Set是否相等。
equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,為的是當兩個分離的對象的內容和類型相配的話,返回真值。
27,給我一個你最常見到的runtime exception。
ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, , DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException,
ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFORMatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
28,error和exception有什麼區別?
error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況。
exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況。
29,List, Set, Map是否繼承自Collection介面?
List,Set是
Map不是
30,abstract class和interface有什麼區別?
聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基本行為的類,並為該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而可以創建一個變數,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。
介面(interface)是抽象類的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都是抽象的,沒有一個有程序體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實現類不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即將程序體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何對象上調用介面的方法。由於有抽象類,它允許使用介面名作為引用變數的類型。通常的動態聯編將生效。引用可以轉換到介面類型或從介面類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了介面。
31,abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?
都不能
32,介面是否可繼承介面? 抽象類是否可實現(implements)介面? 抽象類是否可繼承實體類(concrete class)?
介面可以繼承介面。抽象類可以實現(implements)介面,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數。
33,啟動一個線程是用run()還是start()?
啟動一個線程是調用start()方法,使線程所代表的虛擬處理機處於可運行狀態,這意味著它可以由JVM調度並執行。這並不意味著線程就會立即運行。run()方法可以產生必須退出的標志來停止一個線程。
34,構造器Constructor是否可被override?
構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。
35,是否可以繼承String類?
String類是final類故不可以繼承。
36,當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?
不能,一個對象的一個synchronized方法只能由一個線程訪問。
37,try {}里有一個return語句,那麼緊跟在這個try後的finally {}里的code會不會被執行,什麼時候被執行,在return前還是後?
會執行,在return前執行。
38,編程題: 用最有效率的方法算出2乘以8等於幾?
有C背景的程序員特別喜歡問這種問題。
2 << 3
39,兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?
不對,有相同的hash code。
40,當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這里到底是值傳遞還是引用傳遞?
是值傳遞。Java 編程語言只由值傳遞參數。當一個對象實例作為一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的。
41,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr1)中,expr1是一個整數表達式。因此傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。long,string 都不能作用於swtich。
42,編程題: 寫一個Singleton出來。
Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。
一般Singleton模式通常有幾種種形式:
第一種形式:定義一個類,它的構造函數為private的,它有一個static的private的該類變數,在類初始化時實例話,通過一個public的getInstance方法獲取對它的引用,繼而調用其中的方法。
public class Singleton {
private Singleton(){}
//在自己內部定義自己一個實例,是不是很奇怪?
//注意這是private 只供內部調用
private static Singleton instance = new Singleton();
//這里提供了一個供外部訪問本class的靜態方法,可以直接訪問
public static Singleton getInstance() {
return instance;
}
}
第二種形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//這個方法比上面有所改進,不用每次都進行生成對象,只是第一次
//使用時生成實例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
其他形式:
定義一個類,它的構造函數為private的,所有方法為static的。
一般認為第一種形式要更加安全些
Hashtable和HashMap
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現
HashMap允許將null作為一個entry的key或者value,而Hashtable不允許
還有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在
多個線程訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap
就必須為之提供外同步。
Hashtable和HashMap採用的hash/rehash演算法都大概一樣,所以性能不會有很大的差異。
43.描述一下JVM載入class文件的原理機制?
44.試舉例說明一個典型的垃圾回收演算法?
45.請用java寫二叉樹演算法,實現添加數據形成二叉樹功能,並以先序的方式列印出來.
46.請寫一個java程序實現線程連接池功能?
47.給定一個C語言函數,要求實現在java類中進行調用。
48、編一段代碼,實現在控制台輸入一組數字後,排序後在控制台輸出;
49、列出某文件夾下的所有文件;
50、調用系統命令實現刪除文件的操作;
51、實現從文件中一次讀出一個字元的操作;
52、列出一些控制流程的方法;
53、多線程有哪些狀態?
54、編寫了一個伺服器端的程序實現在客戶端輸入字元然後在控制台上顯示,直到輸入"END"為止,讓你寫出客戶端的程序;
55、作用域public,private,protected,以及不寫時的區別
答:區別如下:
作用域 當前類 同一package 子孫類 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不寫時默認為friendly
56、ArrayList和Vector的區別,HashMap和Hashtable的區別
答:就ArrayList與Vector主要從二方面來說.
一.同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程序不安全的,不是同步的
二.數據增長:當需要增長時,Vector默認增長為原來一培,而ArrayList卻是原來的一半
就HashMap與HashTable主要從三方面來說。
一.歷史原因:Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map介面的一個實現
二.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的
三.值:只有HashMap可以讓你將空值作為一個表的條目的key或value
57、char型變數中能不能存貯一個中文漢字?為什麼?
答:是能夠定義成為一個中文的,因為java中以unicode編碼,一個char佔16個位元組,所以放一個中文是沒問題的
58、多線程有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼?
答:多線程有兩種實現方法,分別是繼承Thread類與實現Runnable介面
同步的實現方面有兩種,分別是synchronized,wait與notify
59、垃圾回收機制,如何優化程序?
希望大家補上,謝謝
60、float型float f=3.4是否正確?
答:不正確。精度不準確,應該用強制類型轉換,如下所示:float f=(float)3.4
61、介紹JAVA中的Collection FrameWork(包括如何寫自己的數據結構)?
答:Collection FrameWork如下:
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
Collection是最基本的集合介面,一個Collection代表一組Object,即Collection的元素(Elements)
Map提供key到value的映射
62、Java中異常處理機制,事件機制?
11、JAVA中的多形與繼承?
希望大家補上,謝謝
63、抽象類與介面?
答:抽象類與介面都用於抽象,但是抽象類(JAVA中)可以有自己的部分實現,而介面則完全是一個標識(同時有多重繼承的功能)。
編程題:
1.現在輸入n個數字,以逗號,分開;
然後可選擇升或者降序排序;
按提交鍵就在另一頁面顯示
按什麼 排序,結果為, ,
提供reset
答案(1) public static String[] splitStringByComma(String source){
if(source==null||source.trim().equals(""))
return null;
StringTokenizer commaToker = new StringTokenizer(source,",");
String[] result = new String[commaToker.countTokens()];
int i=0;
while(commaToker.hasMoreTokens()){
result[i] = commaToker.nextToken();
i++;
}
return result;
}
循環遍歷String數組
Integer.parseInt(String s)變成int類型
組成int數組
Arrays.sort(int[] a),
a數組升序
降序可以從尾部開始輸出
2.金額轉換,阿拉伯數字的金額轉換成中國傳統的形式如:
(¥1011)->(一千零一拾一元整)輸出。
3、繼承時候類的執行順序問題,一般都是選擇題,問你將會列印出什麼?
答:父類:
package test;
public class FatherClass
{
public FatherClass()
{
System.out.println("FatherClass Create");
}
}
子類:
package test;
import test.FatherClass;
public class ChildClass extends FatherClass
{
public ChildClass()
{
System.out.println("ChildClass Create");
}
public static void main(String[] args)
{
FatherClass fc = new FatherClass();
ChildClass cc = new ChildClass();
}
}
輸出結果:
C:>java test.ChildClass
FatherClass Create
FatherClass Create
ChildClass Create
4、內部類的實現方式?
答:示例代碼如下:
package test;
public class OuterClass
{
private class InterClass
{
public InterClass()
{
System.out.println("InterClass Create");
}
}
public OuterClass()
{
InterClass ic = new InterClass();
System.out.println("OuterClass Create");
}
public static void main(String[] args)
{
OuterClass oc = new OuterClass();
}
}
輸出結果:
C:>java test/OuterClass
InterClass Create
OuterClass Create
再一個例題:
public class OuterClass {
private double d1 = 1.0;
//insert code here
}
You need to insert an inner class declaration at line 3. Which two inner class declarations are
valid?(Choose two.)
A. class InnerOne{
public static double methoda() {return d1;}
}
B. public class InnerOne{
static double methoda() {return d1;}
}
C. private class InnerOne{
double methoda() {return d1;}
}
D. static class InnerOne{
protected double methoda() {return d1;}
}
E. abstract class InnerOne{
public abstract double methoda();
}
說明如下:
一.靜態內部類可以有靜態成員,而非靜態內部類則不能有靜態成員。 故 A、B 錯
二.靜態內部類的非靜態成員可以訪問外部類的靜態變數,而不可訪問外部類的非靜態變數;return d1 出錯。
故 D 錯
三.非靜態內部類的非靜態成員可以訪問外部類的非靜態變數。 故 C 正確
四.答案為C、E
5、Java 的通信編程,編程題(或問答),用JAVA SOCKET編程,讀伺服器幾個字元,再寫入本地顯示?
答:Server端程序:
package test;
import java.net.*;
import java.io.*;
public class Server
{
private ServerSocket ss;
private Socket socket;
private BufferedReader in;
private PrintWriter out;
public Server()
{
try
{
ss=new ServerSocket(10000);
while(true)
{
socket = ss.accept();
String RemoteIP = socket.getInetAddress().getHostAddress();
String RemotePort = ":"+socket.getLocalPort();
System.out.println("A client come in!IP:"+RemoteIP+RemotePort);
in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
String line = in.readLine();
System.out.println("Cleint send is :" + line);
out = new PrintWriter(socket.getOutputStream(),true);
out.println("Your Message Received!");
out.close();
i
⑵ 什麼是Java小程序
(小應用程序)
採用Java創建的基於HTML的程序。瀏覽器將其暫時下載到用戶的硬碟上,並在Web頁打開時在本地運行。
可通過網際網路下載並在接收計算機上運行的一小段程序。小應用程序通常用Java語言編寫並運行在瀏覽器軟體中,applet典型用於為萬維網網頁頁面定製或添加交互格式元素。Applet可以翻譯為小應用程序,可通過網際網路下載並在接收計算機上運行的一小段程序。,Java Applet就是用Java語言編寫的這樣的一些小應用程序,它們可以直接嵌入到網頁中,並能夠產生特殊的效果。包含Applet的網頁被稱為Java- powered頁,可以稱其為Java支持的網頁。
當用戶訪問這樣的網頁時, Applet被下載到用戶的計算機上執行,但前提是用戶使用的是支持Java的網路l瀏覽器。由於Applet是在用戶的計算機上執行的,因此它的執行速度不受網路帶寬或者Modem存取速度的限制。用戶可以更好地欣賞網頁上Applet產生的多媒體效果。
在Java Applet中,可以實現圖形繪制,字體和顏色控制,動畫和聲音的插入,人機交互及網路交流等功能。 Applet還提供了名為抽象窗口工具箱(Abstract Window Toolkit, AWT)的窗口環境開發工具。 AWT利用用戶計算機的GUI元素,可以建立標準的圖形用戶界面,如窗口、按鈕、滾動條等等。目前,在網路上有非常多的Applet範例來生動地展現這些功能,讀者可以去調閱相應的網頁以觀看它們的效果。
Applet的工作原理.
含有Applet的網頁的HTML文件代碼中部帶有<applet> 和</applet>這樣一對標記,當支持Java的網路瀏覽器遇到這對標記時,就將下載相應的小應用程序代碼並在本地計算機上執行該Applet。
Java Applet 是用Java 語言編寫的一些小應用程序,這些程序是直接嵌入到頁面中,由支持Java的瀏覽器(IE 或 Nescape)解釋執行能夠產生特殊效果的程序。它可以大大提高Web頁面的交互能力和動態執行能力。包含Applet的網頁被稱為Java- powered頁,可以稱其為Java支持的網頁。
當用戶訪問這樣的網頁時,Applet被下載到用戶的計算機上執行,但前提是用戶使用的是支持Java的網路瀏覽器。由於Applet是在用戶的計算機上執行的,所以它的執行速度不受網路帶寬或者Modem存取速度的限制,用戶可以更好地欣賞網頁上Applet產生的多媒體效果。
Applet 小應用程序的實現主要依靠java.applet 包中的Applet類。與一般的應用程序不同,Applet應用程序必須嵌入在HTML頁面中,才能得到解釋執行;同時Applet可以從Web頁面中獲得參數,並和Web頁面進行交互。
含有Applet的網頁的HTML文件代碼中必須帶有<applet>和</applet>這樣一對標記,當支持Java的網路瀏覽器遇到這對標記時,就將下載相應的小程序代碼並在本地計算機上執行該Applet小程序。
Applet是一種Java的小程序,它通過使用該Applet的HTML文件,由支持Java的網頁瀏覽器下載運行。也可以通過java開發工具的 appletviewer來運行。Applet 程序離不開使用它的HTML文件。這個HTML文件中關於Applet的信息至少應包含以下三點:
1)位元組碼文件名(編譯後的Java文件,以.class為後綴)
2)位元組碼文件的地址
3)在網頁上顯示Applet的方式。
一個HTML文件增加Applet有關的內容只是使網頁更加富有生氣,如添加聲音、動畫等這些吸引人的特徵,它並不會改變HTML文件中與Applet無關的元素。
(一) Applet程序開發步驟
Applet程序開發主要步驟如下:
1)選用EDIT或Windows Notepad等工具作為編輯器建立Java Applet源程序。
2)把Applet的源程序轉換為位元組碼文件。
3)編制使用class 的HTML文件。在HTML文件內放入必要的<APPLET>語句。
下面舉一個最簡單的HelloWorld 例子來說明Applet程序的開發過程:
(1) 編輯Applet 的java源文件
創建文件夾C:\ghq,在該文件夾下建立 HelloWorld.java
文件的源代碼如下:
import java.awt.*;
import java.applet.*;
public class HelloWorld extends Applet //繼承Appelet類,這是Appelet Java程序的特點
{
public void paint(Graphics g )
{
g.drawString("Hello World!",5,35);
}
}
保存上述程序在C:\ghq\HelloWorld.java文件里。
(2)編譯Applet
編譯HelloWorld.java源文件可使用如下JDK命令:
C:\ghq\>javac HelloWorld.java<Enter>
注意:如果編寫的源程序違反了Java編程語言的語法規則,Java編譯器將在屏幕上顯示語法錯誤提示信息。源文件中必須不含任何語法錯誤,Java編譯器才能成功地把源程序轉換為appletviewer和瀏覽器能夠執行的位元組碼程序。
成功地編譯Java applet之後生成響應的位元組碼文件HelloWorld.class的文件。用資源管理器或DIR命令列出目錄列表,將會發現目錄C:\ghq中多了一個名為HelloWorld.class的文件。
(3)創建HTML文件
在運行創建的HelloWorld.class 之前,還需創建一個HTML文件,appletviewer或瀏覽器將通過該文件訪問創建的Applet。為運行HelloWorld.class, 需要創建包含如下HTML語句的名為HelloWorld.html的文件。
<HTML>
<TITLE>HelloWorld! Applet</TITLE>
<APPLET
CODE="JavaWorld.class"
WIDTH=200
HEIGHT=100>
</APPLET>
</HTML>
本例中,<APPLET>語句指明該Applet位元組碼類文件名和以像素為單位的窗口的尺寸。雖然這里HTML文件使用的文件名為 HelloWorld.HTML,它對應於HelloWorld.java的名字,但這種對應關系不是必須的,可以用其他的任何名字(比如說 Ghq.HTML)命名該HTML文件。但是使文件名保持一種對應關系可給文件的管理帶來方便。
(4)執行 HelloWorld.html
如果用appletviewer運行HelloWorld.html,需輸入如下的命令行:
C:\ghq\>appletviewer JavaWorld.html<ENTER>
可以看出,該命令啟動了appletviewer並指明了HTML文件,該HTML文件中包含對應於HelloWorld 的<APPLET>語句。
如果用瀏覽器運行HelloWorld Applet,需在瀏覽器的地址欄中輸入HTML文件URL地址。
至此,一個Applet程序的開發運行整個過程結束了(包括java源文件、編譯的class文件、html文件以及用appletviewer或用瀏覽器運行)。
(二) Applet類
Applet類是所有Applet應用的基類,所有的Java小應用程序都必須繼承該類。如下所示。
import java. applet.*;
public class OurApplet extends Applet
{
......
......
}
Applet類的構造函數只有一種,即:public Applet()
Applet實現了很多基本的方法,下面列出了Applet類中常用方法和用途。
public final void setStub(AppletStub stub)
//設置Applet的stub.stub是Java和C之間轉換參數並返回值的代碼位,它是由系統自動設定的。
public boolean isActive();// 判斷一個Applet是否處於活動狀態。
public URL getDocumentBase();// 檢索表示該Applet運行的文件目錄的對象。
public URL getCodeBase();// 獲取該Applet 代碼的URL地址。
public String getParameter(String name);// 獲取該Applet 由name指定參數的值。
public AppletContext getAppletContext();// 返回瀏覽器或小應用程序觀察器。
public void resize(int width,int height);// 調整Applet運行的窗口尺寸。
public void resize(Dimension d);// 調整Applet運行的窗口尺寸。
public void showStatus(String msg);// 在瀏覽器的狀態條中顯示指定的信息。
public Image getImage(URL url); // 按url指定的地址裝入圖象。
public Image getImage(URL url,String name);// 按url指定的地址和文件名載入圖像。
public AudioClip getAudioClip(URL url);// 按url指定的地址獲取聲音文件。
public AudioClip getAudioClip(URL url, String name);// 按url指定的地址和文件名獲取聲音。
public String getAppletInfo();// 返回Applet應用有關的作者、版本和版權方面的信息;
public String[][] getParameterInfo();
// 返回描述Applet參數的字元串數組,該數組通常包含三個字元串: 參數名、該參數所需值的類型和該參數的說明。
public void play(URL url);// 載入並播放一個url指定的音頻剪輯。
public void destroy();//撤消Applet及其所佔用的資源。若該Applet是活動的,則先終止該Applet的運行。
(1) Applet運行狀態控制基本方法
Applet類中的四種基本方法用來控制其運行狀態:init()、start()、stop()、destroy()
init()方法
這個方法主要是為Applet的正常運行做一些初始化工作。當一個Applet被系統調用時,系統首先調用的就是該方法。通常可以在該方法中完成從網頁向Applet傳遞參數,添加用戶界面的基本組件等操作。
start()方法
系統在調用完init()方法之後,將自動調用start()方法。而且,每當用戶離開包含該Applet的主頁後又再返回時,系統又會再執行一遍 start()方法。這就意味著start()方法可以被多次執行,而不像init()方法。因此,可把只希望執行一遍的代碼放在init()方法中。可以在start()方法中開始一個線程,如繼續一個動畫、聲音等。
stop()方法
這個方法在用戶離開Applet所在頁面時執行,因此,它也是可以被多次執行的。它使你可以在用戶並不注意Applet的時候,停止一些耗用系統資源的工作以免影響系統的運行速度,且並不需要人為地去調用該方法。如果Applet中不包含動畫、聲音等程序,通常也不必實現該方法。
destroy()方法
與對象的finalize()方法不同,Java在瀏覽器關閉的時候才調用該方法。Applet是嵌在HTML文件中的,所以destroty()方法不關心何時Applet被關閉,它在瀏覽器關閉的時候自動執行。在destroy()方法中一般可以要求收回佔用的非內存獨立資源。(如果在 Applet仍在運行時瀏覽器被關閉,系統將先執行stop()方法,再執行destroy()方法。
(2) Applet應用的有關參數說明
利用Applet來接收從HTML中傳遞過來的參數,下面對這些參數作一簡單說明:
* CODE標志
CODE標志指定Applet的類名;WIDTH和HEIGHT標志指定Applet窗口的像素尺寸。在APPLET語句里還可使用其他一些標志。
* CODEBASE 標志
CODEBASE標志指定Applet的URL地址。Applet的通用資源定位地址URL,它可以是絕對地址,如www.sun.com。也可以是相對於當前HTML所在目錄的相對地址,如/AppletPath/Name。如果HTML文件不指定 CODEBASE 標志,瀏覽器將使用和HTML文件相同的URL。
* ALT 標志
雖然Java在WWW上很受歡迎,但並非所有瀏覽器都對其提供支持。如果某瀏覽器無法運行Java Applet,那麼它在遇到APPLET語句時將顯示ALT標志指定的文本信息。
* ALIGN 標志
ALIGN標志可用來控制把Applet窗口顯示在HTML文檔窗口的什麼位置。與HTML<LMG>語句一樣,ALIGN標志指定的值可以是TOP、MIDDLE或BOTTOM。
* VSPACE與HSPACE 標志
VSPACE和HSPACE標志指定瀏覽器顯示在Applet窗口周圍的水平和豎直空白條的尺寸,單位為像素。如下例使用該標志在Applet窗口之上和之下各留出50像素的空白,在其左和其右各留出25像素的空白:
* NAME 標志
NAME標志把指定的名字賦予Applet的當前實例。當瀏覽器同時運行兩個或多個Applet時,各Applet可通過名字相互引用或交換信息。如果忽略NAME標志,Applet的名字將對應於其類名。
* PARAM 標志
通用性是程序設計所追求的目標之一。使用戶或者程序員能很方便地使用同一個Applet完成不同的任務是通用性的具體表現。從HTML文件獲取信息是提高Applet通用性的一條有效途徑。
假設編制了一個把某公司的名字在屏幕上卷動的Applet。為了使該Applet更加通用,則可以使該Applet從HTML文件獲取需要卷動的文本信息。這樣,若想顯示另一個公司的名字,用不著修改Java Applet本身,只需修改HTML文件即可。
PARAM 標志可用來在HTML文件里指定參數,格式如下所示:
PARAM Name="name" Value="Liter"
Java Applet可調用getParameter方法獲取HTML文件里設置的參數值。
上面這個例子就是一個簡單主頁的HTML文件代碼。代碼第五行中的<P>,是為了確保Applet出現在新的一行,若沒有它, Applet將會緊接著上一行的最後一個單詞出現。代碼第六、七兩行是關於Applet的一些參數。其中第六行是必需的Applet參數,定義了編譯後的包含Applet位元組碼的文件名,後綴通常為「.class」;和以象素為單位的Applet的初始寬度與高度。第七行則是附加的Applet參數,它由一個分離的
標記來指定其後的名稱和值,在這里是img的值為「example.gif』,它代表了一個圖形文件名。
Applet的下載與圖形文件一樣需要一定的時間,若干秒後它才能在屏幕上顯示出來。等待的時間則取決於Applet的大小和用戶的網路連接的速度。一旦下載以後,它便和本地計算機上的程序以相同的速度運行了。
Applet在用戶的計算機上執行時,還可以下載其它的資源,如聲音文件、圖像文件或更多的Java代碼,有些Applet還允許用戶進行互動式操作。但這需要重復的鏈接與下載,因此速度很慢,這是一個亟待解決的問題,可以想到的一個好辦法是採用類似高速緩存的技術,將每次下載的文件都臨時保存在用戶的硬碟上,雖然第一次使用時花的時間比較多,但當再次使用時,只需直接從硬碟上讀取文件而無需再與Internet連接,便可以大大提高性能了。
從哪裡得到Applet
自從Java日益流行之後,世界各地的愛好者們便不斷創造出各種各樣的Applet。這里列出了幾個較大的Applet收集站,讀者可以去逛一逛,看看這些Applet的效果如何,相信會使人流連忘返的。 http://www.gamelan.com
這是Intemet上最負盛名的Applet收集站,它按照小應用程序的用途加以分類,並列出了它們的說明、功能和程序代碼,其規模和種類之多,令人嘆為觀止。
http://www.jars.com/
這個站點的特色是對它收集的小應用程序都加以評分,JARS是小應用程序評價服務(Java Applet Rating Services)的簡稱。許多Java開發者均以能獲得其好評為榮。
http://www.yahoo.com/Computers_and_Internet/Languages/Applet/
這個URL可真夠長的!這是Yahoo公司提供的小應用程序目錄,收集的數量雖然稍遜於Gamelan,但也很可觀了。
http://home.netscape.com/comprod/procts/navigator/version_2.0 /java_applets/ <BR>這是網景公司提供的小應用程序演示網頁,同時也提供一些Java信息。
http://java.wiwi.uni_frankfurt.de/
這是一個小應用程序的信息站點,提供了許多實用信息,讀者可以藉助這里的資料庫,查詢自己感興趣的小應用程序的相關信 .
applet的超類是panel,
如果您認為本詞條還有待完善,需要補充新內容或修改錯誤內容,請 編輯詞條
貢獻者(共6名):
jlbstz2003、fuweimin911、明明我心521、menganhonglo、邪惡怖怖、lym13
本詞條在以下詞條中被提及:
java.applet、JRE、web2.0、www
「Applet」在英漢詞典中的解釋(來源:網路詞典):
applet
n.
1. 【電腦】程序類型(一小程序可附予其它程序一些功能,像Java就是一受歡迎用之以產生applet的語言)
關於本詞條的評論(共4條):查看評論 >>
返回頁首
©2008 Bai
⑶ 簡述Java Applet 程序的特點是什麼
Java Applet 是用Java 語言編寫的一些小應用程序,這些程序是直接嵌入到頁面中,由支持Java的瀏覽器(IE 或 Nescape)解釋執行能夠產生特殊效果的程序。它可以大大提高Web頁面的交互能力和動態執行能力。包含Applet的網頁被稱為Java-powered頁,可以稱其為Java支持的網頁。
當用戶訪問這樣的網頁時,Applet被下載到用戶的計算機上執行,但前提是用戶使用的是支持Java的網路瀏覽器。由於Applet是在用戶的計算機上執行的,所以它的執行速度不受網路帶寬或者Modem存取速度的限制,用戶可以更好地欣賞網頁上Applet產生的多媒體效果。
Applet 小應用程序的實現主要依靠java.applet 包中的Applet類。與一般的應用程序不同,Applet應用程序必須嵌入在HTML頁面中,才能得到解釋執行;同時Applet可以從Web頁面中獲得參數,並和Web頁面進行交互。
含有Applet的網頁的HTML文件代碼中必須帶有<applet>和</applet>這樣一對標記,當支持Java的網路瀏覽器遇到這對標記時,就將下載相應的小程序代碼並在本地計算機上執行該Applet小程序。
Applet是一種Java的小程序,它通過使用該Applet的HTML文件,由支持Java的網頁瀏覽器下載運行。也可以通過java開發工具的appletviewer來運行。Applet 程序離不開使用它的HTML文件。這個HTML文件中關於Applet的信息至少應包含以下三點:
1)位元組碼文件名(編譯後的Java文件,以.class為後綴)
2)位元組碼文件的地址
3)在網頁上顯示Applet的方式。
一個HTML文件增加Applet有關的內容只是使網頁更加富有生氣,如添加聲音、動畫等這些吸引人的特徵,它並不會改變HTML文件中與Applet無關的元素。
(一) Applet程序開發步驟
Applet程序開發主要步驟如下:
1)選用EDIT或Windows Notepad等工具作為編輯器建立Java Applet源程序。
2)把Applet的源程序轉換為位元組碼文件。
3)編制使用class 的HTML文件。在HTML文件內放入必要的<APPLET>語句。
下面舉一個最簡單的HelloWorld 例子來說明Applet程序的開發過程:
(1) 編輯Applet 的java源文件
創建文件夾C:\ghq,在該文件夾下建立 HelloWorld.java
文件的源代碼如下:
import java.awt.*;
import java.applet.*;
public class HelloWorld extends Applet //繼承Appelet類,這是Appelet Java程序的特點
{
public void paint(Graphics g )
{
g.drawString("Hello World!",5,35);
}
}
保存上述程序在C:\ghq\HelloWorld.java文件里。
(2)編譯Applet
編譯HelloWorld.java源文件可使用如下JDK命令:
C:\ghq\>javac HelloWorld.java<Enter>
注意:如果編寫的源程序違反了Java編程語言的語法規則,Java編譯器將在屏幕上顯示語法錯誤提示信息。源文件中必須不含任何語法錯誤,Java編譯器才能成功地把源程序轉換為appletviewer和瀏覽器能夠執行的位元組碼程序。
成功地編譯Java applet之後生成響應的位元組碼文件HelloWorld.class的文件。用資源管理器或DIR命令列出目錄列表,將會發現目錄C:\ghq中多了一個名為HelloWorld.class的文件。
(3)創建HTML文件
在運行創建的HelloWorld.class 之前,還需創建一個HTML文件,appletviewer或瀏覽器將通過該文件訪問創建的Applet。為運行HelloWorld.class, 需要創建包含如下HTML語句的名為HelloWorld.html的文件。
<HTML>
<TITLE>HelloWorld! Applet</TITLE>
<APPLET
CODE="JavaWorld.class"
WIDTH=200
HEIGHT=100>
</APPLET>
</HTML>
本例中,<APPLET>語句指明該Applet位元組碼類文件名和以像素為單位的窗口的尺寸。雖然這里HTML文件使用的文件名為HelloWorld.HTML,它對應於HelloWorld.java的名字,但這種對應關系不是必須的,可以用其他的任何名字(比如說Ghq.HTML)命名該HTML文件。但是使文件名保持一種對應關系可給文件的管理帶來方便。
(4)執行 HelloWorld.html
如果用appletviewer運行HelloWorld.html,需輸入如下的命令行:
C:\ghq\>appletviewer JavaWorld.html<ENTER>
可以看出,該命令啟動了appletviewer並指明了HTML文件,該HTML文件中包含對應於HelloWorld 的<APPLET>語句。
如果用瀏覽器運行HelloWorld Applet,需在瀏覽器的地址欄中輸入HTML文件URL地址。
至此,一個Applet程序的開發運行整個過程結束了(包括java源文件、編譯的class文件、html文件以及用appletviewer或用瀏覽器運行)。
(二) Applet類
Applet類是所有Applet應用的基類,所有的Java小應用程序都必須繼承該類。如下所示。
import java. applet.*;
public class OurApplet extends Applet
{
......
......
}
Applet類的構造函數只有一種,即:public Applet()
Applet實現了很多基本的方法,下面列出了Applet類中常用方法和用途。
public final void setStub(AppletStub stub)
//設置Applet的stub.stub是Java和C之間轉換參數並返回值的代碼位,它是由系統自動設定的。
public boolean isActive();// 判斷一個Applet是否處於活動狀態。
public URL getDocumentBase();// 檢索表示該Applet運行的文件目錄的對象。
public URL getCodeBase();// 獲取該Applet 代碼的URL地址。
public String getParameter(String name);// 獲取該Applet 由name指定參數的值。
public AppletContext getAppletContext();// 返回瀏覽器或小應用程序觀察器。
public void resize(int width,int height);// 調整Applet運行的窗口尺寸。
public void resize(Dimension d);// 調整Applet運行的窗口尺寸。
public void showStatus(String msg);// 在瀏覽器的狀態條中顯示指定的信息。
public Image getImage(URL url); // 按url指定的地址裝入圖象。
public Image getImage(URL url,String name);// 按url指定的地址和文件名載入圖像。
public AudioClip getAudioClip(URL url);// 按url指定的地址獲取聲音文件。
public AudioClip getAudioClip(URL url, String name);// 按url指定的地址和文件名獲取聲音。
public String getAppletInfo();// 返回Applet應用有關的作者、版本和版權方面的信息;
public String[][] getParameterInfo();
// 返回描述Applet參數的字元串數組,該數組通常包含三個字元串: 參數名、該參數所需值的類型和該參數的說明。
public void play(URL url);// 載入並播放一個url指定的音頻剪輯。
public void destroy();//撤消Applet及其所佔用的資源。若該Applet是活動的,則先終止該Applet的運行。
(1) Applet運行狀態控制基本方法
Applet類中的四種基本方法用來控制其運行狀態:init()、start()、stop()、destroy()
init()方法
這個方法主要是為Applet的正常運行做一些初始化工作。當一個Applet被系統調用時,系統首先調用的就是該方法。通常可以在該方法中完成從網頁向Applet傳遞參數,添加用戶界面的基本組件等操作。
start()方法
系統在調用完init()方法之後,將自動調用start()方法。而且,每當用戶離開包含該Applet的主頁後又再返回時,系統又會再執行一遍start()方法。這就意味著start()方法可以被多次執行,而不像init()方法。因此,可把只希望執行一遍的代碼放在init()方法中。可以在start()方法中開始一個線程,如繼續一個動畫、聲音等。
stop()方法
這個方法在用戶離開Applet所在頁面時執行,因此,它也是可以被多次執行的。它使你可以在用戶並不注意Applet的時候,停止一些耗用系統資源的工作以免影響系統的運行速度,且並不需要人為地去調用該方法。如果Applet中不包含動畫、聲音等程序,通常也不必實現該方法。
destroy()方法
與對象的finalize()方法不同,Java在瀏覽器關閉的時候才調用該方法。Applet是嵌在HTML文件中的,所以destroty()方法不關心何時Applet被關閉,它在瀏覽器關閉的時候自動執行。在destroy()方法中一般可以要求收回佔用的非內存獨立資源。(如果在Applet仍在運行時瀏覽器被關閉,系統將先執行stop()方法,再執行destroy()方法。
(2) Applet應用的有關參數說明
利用Applet來接收從HTML中傳遞過來的參數,下面對這些參數作一簡單說明:
* CODE標志
CODE標志指定Applet的類名;WIDTH和HEIGHT標志指定Applet窗口的像素尺寸。在APPLET語句里還可使用其他一些標志。
* CODEBASE 標志
CODEBASE標志指定Applet的URL地址。Applet的通用資源定位地址URL,它可以是絕對地址 ,如www.sun.com。也可以是相對於當前HTML所在目錄的相對地址,如/AppletPath/Name。如果HTML文件不指定CODEBASE 標志,瀏覽器將使用和HTML文件相同的URL。
* ALT 標志
雖然Java在WWW上很受歡迎,但並非所有瀏覽器都對其提供支持。如果某瀏覽器無法運行Java Applet,那麼它在遇到APPLET語句時將顯示ALT標志指定的文本信息。
* ALIGN 標志
ALIGN標志可用來控制把Applet窗口顯示在HTML文檔窗口的什麼位置。與HTML<LMG>語句一樣,ALIGN標志指定的值可以是TOP、MIDDLE或BOTTOM。
* VSPACE與HSPACE 標志
VSPACE和HSPACE標志指定瀏覽器顯示在Applet窗口周圍的水平和豎直空白條的尺寸,單位為像素。如下例使用該標志在Applet窗口之上和之下各留出50像素的空白,在其左和其右各留出25像素的空白:
* NAME 標志
NAME標志把指定的名字賦予Applet的當前實例。當瀏覽器同時運行兩個或多個Applet時,各Applet可通過名字相互引用或交換信息。如果忽略NAME標志,Applet的名字將對應於其類名。
* PARAM 標志
通用性是程序設計所追求的目標之一。使用戶或者程序員能很方便地使用同一個Applet完成不同的任務是通用性的具體表現。從HTML文件獲取信息是提高Applet通用性的一條有效途徑。
假設編制了一個把某公司的名字在屏幕上卷動的Applet。為了使該Applet更加通用,則可以使該Applet從HTML文件獲取需要卷動的文本信息。這樣,若想顯示另一個公司的名字,用不著修改Java Applet本身,只需修改HTML文件即可。
PARAM 標志可用來在HTML文件里指定參數,格式如下所示:
PARAM Name="name" Value="Liter"
Java Applet可調用getParameter方法獲取HTML文件里設置的參數值。
⑷ 如何在html文檔中包含 java applet程序
調用"applet"格式(以Java01.class 為例)
< applet code="Java01.class" codebase="javam" width=100 height=60 vspace=2 hspace=3 align="top" name="Java01" alt="你的瀏覽器不支持 Java Applet 程序" > </applet> code屬性:定義調用的Java Applet 程序名,要注意全名和大小寫。 codebase屬性:定義Java Applet 程序的路徑或地址(URL),當Java Applet與HTML文檔不在同一目錄時用它來定位,上面調用格式中codebase="javam"說明該Java Applet程序存放在"javam"目錄里(建議將Java Applet程序和HTML文檔放在同一目錄)。 width和height屬性:給出Java Applet程序顯示區域以像素為單位的寬度和高度。 vspace和hspace屬性:用來設置以像素為單位的豎直和水平邊距。 align屬性:控制Java Applet的對齊方式,取值如下; left(屏幕的左邊) right(屏幕的右邊) top(與該行中最高項的頂部對齊) texttop(與該行文本的頂部對齊) middle(使該行的基線與該Java Applet程序顯示域的中間對齊) absmiddle(使該行的中間與該Java Applet程序顯示域的中間對齊) baseline(使該行的基線與該Java Applet的程序顯示域的底部對齊) bottom(使該行的基線與該Java Applet的程序顯示域的底部對齊) absbottom(使該行的底部與圖像的底部對齊) archive屬性:用逗號分隔的歸檔文件列表(HTML 4.0 ) object屬性:序列化的applet文件(HTML 4.0) name屬性:為應用的Applet 實例賦一具體的名字。 alt屬性: 為不支持Java Applet程序的瀏覽器顯示你替代的文字,如果支持該屬性被忽略。 另:為不支持Java Applet程序的瀏覽器顯示你替代的文字,還可以用在<applet>與</applet>之間插入文字的方法進行,反之該插入文字被忽略不顯示。 3.向 Applet 傳遞變數 確定該 Java Applet 程序所接受的變數名,比如 size、font兩個變數, 在<applet></applet>之間輸入<param>標記,
<applet code="Java01.class" codebase="javam" width=100 height=60 ><param></applet> 給<param>標記加入name屬性並設置為Java Applet中將接收值的變數名
<applet code="Java01.class" codebase="javam" width=100 height=60 >
<param name="size">
<param name="font">
</applet> 加入value屬性為前面定義好的變數賦值。
<applet code="Java01.class" codebase="javam" width=100 height=60 >
<param name="size" value="5" >
</applet> 當瀏覽器遇到<applet>標記中的<param>標記時,它讀進變數名和賦予的值傳遞給當前Java Applet中的命名變數。
⑸ java中drawImage(img, 10, 10, this)中this是啥意思,是指 類AppletDemo對象還是 img程序如下:
this代表當前對象
這些不帶static的方法都是對象方法,是不能直接用類調用的,而是需要該類的一個實例化對象,並且對對象進行調用,而this就是指代的該類被實例化的這個對象。
⑹ JAVA applet ,如何時間相除和顯示,有沒有例子
// TestApplet.java
import java.awt.Graphics;
import java.util.Date;
import javax.swing.JApplet;
public class TestApplet extends JApplet {
public void paint(Graphics g) {
String time = (new Date()).toString();
g.clearRect(0, 0, getWidth(), getHeight());
g.drawString(time, 10, 10);
}
}
時間/時間 = 無厘頭
⑺ java怎麼做個簡單按鈕
你寫的按鈕計算吧,這個類是一個Applet,其中有一個按鈕,這個類本身也是按鈕的動作監聽器,所以實現了ActionListener 介面用來給按鈕調用(也就是 actionPerformed方法),其中的參數e是事件參數,當點擊按鈕時會發送給按鈕使用。e.getSource() == b 就是如果點擊是b這個按鈕,當監聽器給一個按鈕使用時沒有必要加此判斷,e.getSource就是獲取發生事件的源對象,比如
c = new JButton("點我有次數哦");
f.getContentPane().add(c);
c.setVisible(true);
c.addActionListener(this);
此時又增加了一個按鈕,就可以用e.getSource() 判斷點擊的是哪一個按鈕。
建議你把面向對象搞懂在學swing編程吧,很容易看懂的
⑻ 用JAVA製作一個小程序,計算兩個數的加減乘除,用Applet實現
下面兩個可以么,是我做實驗答辯時用到的!
import java.awt.*;//AWT核心包
import java.awt.event.*;//提供事件類和監聽器
public class Counter extends Frame implements ActionListener
{
TextField t=new TextField("");//文本框
Panel p1=new Panel();//new一個panel,用於存放數字鍵和符號鍵。
Panel p2=new Panel();//new一個panel,用於存放開方、平方、和清除鍵。
Button[] b=new Button[10];//實例化Button對象
Button bAdd=new Button("加");
Button bSub=new Button("減");
Button bMul=new Button("乘以");
Button bPoint=new Button(".");
Button bDiv=new Button("除以");
Button bEqual=new Button("等於");
Button bSqrt=new Button("開方");
Button bPow=new Button("平方");
Button bNull=new Button("清除");
String str1=""; //str1和str2存放兩個輸入的數
String str2="";
String operator=null; //存放加減乘除以及開平方的符號
boolean first=true; //檢驗輸入的是否為第一個數
int countOper=0; //累計輸入符號的個數,連加連減等操作中會用到
double result=0.0; //暫存結果
double num1=0.0,num2=0.0; //兩個輸入的數做運算時轉化為double存放
boolean error=false; //檢驗除數是否為0
//構造方法
public Counter()
{
Frame s=new Frame("計算器");//創建Frame
for(int i=0;i<10;i++)//利用for循環將數字鍵添加進p1中
{
b[i]=new Button(String.valueOf(i));
p1.add(b[i]);
b[i].setActionCommand("number");
b[i].setForeground(new Color(150,20,20));
b[i].addActionListener(this);//調用addActionListener()方法注冊事件監聽器
}
p1.add(bPoint);
bPoint.setActionCommand("number");
p1.add(bAdd); //數字鍵,符號鍵放置在panel的p1中
p1.add(bSub);
p1.add(bMul);
p1.add(bDiv);
p1.add(bEqual);
p2.add(bSqrt);//開方鍵,平方鍵,清除鍵放置在panel的p2中
p2.add(bPow);
p2.add(bNull);
bAdd.setActionCommand("oper");
bSub.setActionCommand("oper");
bMul.setActionCommand("oper");
bDiv.setActionCommand("oper");
bAdd.setForeground(Color.red);//為組鍵設計顏色
bSub.setForeground(Color.red);
bMul.setForeground(Color.red);
bDiv.setForeground(Color.red);
bPoint.setForeground(Color.black);
bEqual.setForeground(Color.red);
bSqrt.setForeground(Color.blue);
bPow.setForeground(Color.blue);
bNull.setForeground(Color.blue);
bAdd.addActionListener(this);//調用addActionListener()方法注冊事件監聽器
bSub.addActionListener(this);
bMul.addActionListener(this);
bDiv.addActionListener(this);
bPoint.addActionListener(this);
bEqual.addActionListener(this);
bSqrt.addActionListener(this);
bPow.addActionListener(this);
bNull.addActionListener(this);
p1.setLayout(new GridLayout(4,4,5,5));//網格布局管理器,把容器根據行數和列數分成同樣大小的單元,
//每個單元可容納一個組件,並且此組件會填滿網格單元,不能控
//制其占據網格的大小。4、4為網格的行、列數。5、5為組建之間的
//間距
p2.setLayout(new FlowLayout());//用FlowLayout布局管理器將組建默認劇中排放,默認間隙為5個像素
add(t,"North"); //frame的north放置輸入框,panel放置在center和south
add(p1,"Center");//將p1添加到Center中
add(p2,"South");//將p2添加到South中
setLocation(400,200);//設計按鈕尺寸
setSize(200,200);//設計窗口尺寸
setBackground(new Color(20,200,10));//設置Frame的背景,默認為白色
setVisible(true);//設置Frame設置為可見
addWindowListener(new WindowAdapter(){ //關閉窗口功能
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
//實現介面ActionListener
public void actionPerformed(ActionEvent e)
{
Button temp=(Button)e.getSource();
if(e.getActionCommand().equals("number"))
{
if(first)
{
str1=str1+temp.getLabel();
t.setText(str1);//將輸入的str1顯示在文本框中
}
else
{
str2=str2+temp.getLabel();
t.setText(str2);//將輸入的str2顯示在文本框中
}
}
else if(e.getActionCommand().equals("oper"))
{
if(str1=="") //如果還沒有輸入數就點擊運算符執行if
{
countOper=0;//若此,則將計數清零
first=true;
}
else
{
countOper++;//計算輸入符號的個數
if(countOper>1)//若輸入的符號個數多餘一個,則可以進行計算
{
getResult();
}
operator=temp.getLabel();//存放加減乘除以及開方、平方的符號
first=false;
}
}
else if(e.getActionCommand().equals("開方"))
{
double d=Math.sqrt(Double.parseDouble(str1));
str1=String.valueOf(d);//將計算出來的結果再次傳給str1,為連計算準備
t.setText(String.valueOf(d));//將計算出來的結果傳至文本框中
first=false;//置為false,即已輸入第一個數
}
else if(e.getActionCommand().equals("平方"))
{
double f=Math.pow(Double.parseDouble(str1),2);
str1=String.valueOf(f);
t.setText(String.valueOf(f));
first=false;
}
else if(e.getActionCommand().equals("清除"))
{
str1="";//清空
str2="";
t.setText("");//將文本框清空
countOper=0;//將按鍵計數器清零
first=true;
error=false;
}
else if(e.getActionCommand().equals("等於"))
{
if((str1=="")||(str2=="")) //兩個數沒有輸全就點擊等號,執行if
{
countOper=0;//將按鍵計數器清零
first=true;
}
else
{
getResult();
countOper=0;
}
}
}
//運算結果的方法
public void getResult()
{
num1=Double.parseDouble(str1);
num2=Double.parseDouble(str2);
if(operator.equals("加"))
{
result=num1+num2;
}
else if(operator.equals("減"))
{
result=num1-num2;
}
else if(operator.equals("乘以"))
{
result=num1*num2;
}
else if(operator.equals("除以"))
{
if(num2==0.0) //除數為0的處理方法
{
error=true;
}
else
{
result=num1/num2;
}
}
if(error)
{
t.setText("error");
}
else
{
t.setText(String.valueOf(result));
str1=String.valueOf(result); //運算後把結果放入str1中,str2清空,為連加連減等操作做准備
str2="";
}
}
//主方法
public static void main(String[] args)
{
new Counter();//創建一個對象"計算器"
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class CalculatorPanel extends JPanel
implements ActionListener
{ public CalculatorPanel()
{ setLayout(new BorderLayout());
display = new JTextField("0");
display.setEditable(false);
add(display, "North");
JPanel p = new JPanel();
p.setLayout(new GridLayout(4, 4));
String buttons = "789/456*123-0.=+";
for (int i = 0; i < buttons.length(); i++)
addButton(p, buttons.substring(i, i + 1));
add(p, "Center");
}
private void addButton(Container c, String s)
{ JButton b = new JButton(s);
c.add(b);
b.addActionListener(this);
}
public void actionPerformed(ActionEvent evt)
{ String s = evt.getActionCommand();
if ('0' <= s.charAt(0) && s.charAt(0) <= '9'
|| s.equals("."))
{ if (start) display.setText(s);
else display.setText(display.getText() + s);
start = false;
}
else
{ if (start)
{ if (s.equals("-"))
else op = s;
}
else
{ calculate(Double.parseDouble(display.getText()));
op = s;
start = true;
}
}
}
public void calculate(double n)
{ if (op.equals("+")) arg += n;
else if (op.equals("-")) arg -= n;
else if (op.equals("*")) arg *= n;
else if (op.equals("/")) arg /= n;
else if (op.equals("=")) arg = n;
display.setText("" + arg);
}
private JTextField display;
private double arg = 0;
private String op = "=";
private boolean start = true;
}
public class CalculatorApplet extends JApplet
{ public void init()
{ Container contentPane = getContentPane();
contentPane.add(new CalculatorPanel());
}
}
⑼ java 中init 方法是幹嘛用的 啊
Applet主要方法有init()
start()
stop()
pain()
destroy()
init() 方法是初始化方法,用於在啟動Applet程序之前做一些必要的初始化工作!運行Applet程序時首先調用該方法,而且只被調用一次.
舉個例子:
importjava.awt.*;
import java.applet.*;
public class nihao extends Applet
{
public void init()
{
setBackground(Color.blue)
}
}
此例就是用init()方法設置Applet背景區域的顏色。
(9)javaapplet實例擴展閱讀
init作用:
1,可以直接使用內部類==>new okListener()
2,public static void main(String args[]){
Frame f=new Frame("測試事件");
Button ok=new Button("確定");
finalTextField tf=new TextField(20);
ok.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("用戶單擊了ok按鈕");
tf.setText("Hello Java");
}
});
f.add(tf);
f.add(ok,BorderLayout.SOUTH);
f.pack();
f.setVisible(true);
}
⑽ 怎麼編寫java程序實現圖片的移動(最好有例子)
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
public class DrawTest extends JFrame {
private int x = 50;
private int y = 50;
private Image offScreenImage = null;
@Override
public void paint(Graphics g) {
Color c = g.getColor();
g.setColor(Color.BLACK);
g.fillOval(x, y, 30, 30);
g.setColor(c);
}
public void update(Graphics g) {
if (offScreenImage == null) {
offScreenImage = this.createImage(500, 500);
}
Graphics gOffScreen = offScreenImage.getGraphics();
Color c = gOffScreen.getColor();
gOffScreen.setColor(Color.GREEN);
gOffScreen.fillRect(0, 0, 500, 500);
gOffScreen.setColor(c);
paint(gOffScreen);
g.drawImage(offScreenImage, 0, 0, null);
}
public static void main(String[] args) {
DrawTest d = new DrawTest();
}
public DrawTest() {
init();
addKeyListener(new KeyAdapter() {
public void keyPressed(final KeyEvent e) {
int code = e.getKeyCode();
switch (code) {
case KeyEvent.VK_UP:
y -= 5;
break;
case KeyEvent.VK_RIGHT:
x += 5;
break;
case KeyEvent.VK_DOWN:
y += 5;
break;
case KeyEvent.VK_LEFT:
x -= 5;
break;
}
}
});
}
public void init() {
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
this.setBackground(Color.GREEN);
this.setResizable(false);
this.setBounds(140, 140, 500, 500);
this.setVisible(true);
MyThread mt = new MyThread();
new Thread(mt).start();
}
class MyThread implements Runnable {
public void run() {
while (true) {
repaint();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
以上