程序代碼如下:
這段程序放在<body>與</body>之間
<script>
<!--
function windowopen(){
var target="http://zhoucaiqi.51.net"
newwindow=window.open("","","scrollbars")
if (document.all){
newwindow.moveTo(0,0)
newwindow.resizeTo(screen.width,screen.height)
}
newwindow.location=target
}
//-->
</script>
<form>
<input type="button" onClick="windowopen()" value="全屏顯示" name="button">
</form>
程序講解:
function windowopen()
|
定義一個函數。 |
{ var target="http://zhoucaiqi.51.net"
|
設置一個字符串。 |
newwindow=window.open("","","
scrollbars")
|
打開一個新窗口。 |
if (document.all)
{ newwindow.moveTo(0,0)
|
新窗口從(0,0)位置開始顯示。 |
newwindow.resizeTo
(screen.width,screen.height) }
|
新窗口的尺寸是整個屏幕的寬,整個屏幕的高。 |
newwindow.location=target |
顯示target指定的鏈接地址。 |
<input type="button" onClick="windowopen()" value="全屏顯示"
name="button"> |
插入一個按鈕,擊它的時候調用windowopen()函數。 |
|
|
程序代碼如下:
<style>
<!--.drag{position:relative;cursor:hand}
-->
</style>
<script language="JavaScript">
var dragapproved=false
var z,x,y
function move(){
if (event.button==1&&dragapproved){
z.style.pixelLeft=temp1+event.clientX-x
z.style.pixelTop=temp2+event.clientY-y
return false
}}
function drags(){
if (!document.all)
return
if (event.srcElement.className=="drag"){
dragapproved=true
z=event.srcElement
temp1=z.style.pixelLeft
temp2=z.style.pixelTop
x=event.clientX
y=event.clientY
document.onmousemove=move
}}
document.onmousedown=drags
document.onmouseup=new Function("dragapproved=false")
</script>
<img src="img/draw.jpg" class="drag">
程序代碼講解:
<style>
<!--.drag{position:relative;cursor:hand} -->
</style>
|
定義一個樣式。 |
<script language="JavaScript">
var dragapproved=false
var z,x,y
|
聲明幾個變量。 |
function move()
{ if
(event.button==1&&dragapproved)
|
定義一個函數move(),判斷鼠標是否是按下狀態。 |
{
z.style.pixelLeft=temp1+event.clientX-x
z.style.pixelTop=temp2+event.clientY-y
return false }}
|
定義圖片左上角的位置。 |
function drags()
{ if
(!document.all)
return
|
定義一個函數drags()。如果是Netscape瀏覽器,就返回。所以此效果,在Netscape瀏覽器中看不到。 |
if
(event.srcElement.className=="drag")
{ dragapproved=true
z=event.srcElement
temp1=z.style.pixelLeft
temp2=z.style.pixelTop
x=event.clientX
y=event.clientY
|
如果鼠標左鍵被按下,返回z,temp1,temp2,x,y的值。 |
document.onmousemove=move
}}
document.onmousedown=drags
document.onmouseup=new
Function("dragapproved=false")
</script>
|
當鼠標移動時,執行move()函數,當鼠標按下的時候,執行drags函數,當鼠標抬起的時候,不執行任何函數。 |
<img src="img/draw.jpg" class="drag"> |
在頁面中插入一張圖片。 |
|
|
下面的程序輸出什么呢? 考慮下哦。。。。

public class Test
{
public static final Test TEST = new Test();
private final int belt;
private static final int CURRENT_YEAR = Calendar.getInstance().get(Calendar.YEAR);

public Test()
{
belt = CURRENT_YEAR - 1930;
}

public int getBelt()
{
return belt;
}

public static void main(String []args) throws Exception
{
System.out.println(TEST.getBelt());
}
}
可能你覺得應該是當前年- 1930, 例如:今年是2009,2009-1930= 79,運行結果真的是這樣嗎?
你運行下,額,奇怪,居然是 -1930, 額,為什么呢??
原來 首先其靜態域 被設置為缺省值, TEST先設置為null, belt設置為0 , 然后TEST構造器計算出來,但我們已經初始化belt了,
belt被設置為final, 所以忽略了。。。
再來看下 下面一個簡單的例子,剛開始做的時候不仔細,哎,, 我錯了。。哎~!~ 希望大家不要跟我一樣啊。
1 class Point {
2 protected final int x, y;
3 private final String name;
4
5 Point(int x, int y) {
6 this.x = x;
7 this.y = y;
8 name = makeName();
9 }
10
11 protected String makeName() {
12 return "[" + x + "," + y + "]";
13 }
14
15 public final String toString(){
16 return name;
17 }
18
19 }
20
21 public class ColorPoint extends Point {
22 private final String color;
23
24 ColorPoint(int x, int y, String color){
25 super(x,y);
26 this.color = color;
27 }
28 protected String makeName() {
29 return super.makeName()+":"+color;
30 }
31
32 public static void main(String[] args) {
33 System.out.println(new ColorPoint(1,2,"abc"));
34 }
35
36 }
運行結果: [1,2]:null
程序從main啟動,然后到 25行,super(x,y); 之后 到 第 8行 name = makeName(); 再之后29行, return super.makeName()+":"+color;
這里,方法被子類重載了,運行到26行 this.color = color; 最后結束, 當然輸出: [1,2]:null
YUI提供的Event工具集
YUI提供的Event工具集簡化了瀏覽器中事件驅動程序的編寫,提供了一種簡單的接口來定制事件和檢查瀏覽器中的event對象。YUI事件工具集提供了自定義事件對象(Custom Event),通過自定義事件對象可以“發布”自己感興趣的時刻或事件,頁面中的YUI組件能夠響應這些自定義的事件并做出回應。
YUI對事件響應的順序:通過YUI Event工具集添加的事件,默認是在冒泡過程中執行事件處理函數的。從DOM節點上來說,是從子節點向根節點響應事件。
<!-- Dependency -->
build/yahoo/yahoo-min.js
<!-- Event source file -->
build/event/event-min.js
Event和Custom Event分別定義在YAHOO.util.Event和YAHOO.util.CustomEvent中
YAHOO.util.Event.addListener(element,eventType,fn,obj,override)
參數:
element:為綁定事件的元素id,可以是一個數組,以支持批量操作
eventType:為事件類型
fn:為事件響應的回調函數
obj:當override為true時,為回調函數傳入的參數對象;當override為false時,該參數被忽略。
override:
返回值類型:Boolean
功能:給指定的element綁定事件響應函數
YAHOO.util.Event.removeListener:function(element,eventType,fn)
參數:
element:為綁定事件的元素id,
eventType:事件類型
fn:為事件響應函數
返回值類型:Boolean
功能:給指定的element解除綁定事件
YAHOO.util.Event.purgeElement ( el , recurse , sType )
參數:
el:為綁定事件的元素id,
recurse:Boolean值,是否解除子節點的事件綁定
sType:事件類型
返回值類型:Boolean
功能:給指定的element解除綁定的同一類型的事件,也可以解除子節點上綁定的這一類型的事件
YAHOO.util.on
addListener的函數別名
YAHOO.util.Event.onAvailable ( p_id , p_fn , p_obj , p_override )
參數:
p_id:為綁定事件的元素id,
p_fn:為事件響應函數
p_obj:同addListener的obj參數
p_override:同addListener的override參數
返回值類型:無
功能:當指定的element的p_id出現時,執行事件響應函數。如果在頁面初始化之前執行這一函數,當頁面加載時(可能還未完成時),就會執行響應的事件響應函數;如果放在頁面加載之后執行這一函數,將以固定的時間輪詢,當element可用時響應這一事件。這個輪詢的的時間是可以配置的,缺省的時間是10秒一次。
YAHOO.util.Event.onContentReady ( p_id , p_fn , p_obj , p_override )
參數:
p_id:為綁定事件的元素id,
p_fn:為事件響應函數
p_obj:同addListener的obj參數
p_override:同addListener的override參數
返回值類型:無
功能:與onAvailable類似,但不同的是事件響應函數是等到element可以安全的修改的時候才響應。
YAHOO.util.Event.onDOMReady ( p_fn , p_obj , p_scope )
參數:
p_fn:為事件響應函數
p_obj:同addListener的obj參數
p_scope:同addListener的override參數
返回值類型:無
功能:當DOM第一次可用時執行響應函數。
YAHOO.util.Event.preventDefault ( event)
參數:
event:事件對象
返回值類型:無
功能:阻止事件的缺省行為發生。
算法(Algorithm)是一系列解決問題的清晰指令,也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。如果一個算法有缺陷,或不適合于某個問題,執行這個算法將不會解決這個問題。不同的算法可能用不同的時間、空間或效率來完成同樣的任務。一個算法的優劣可以用空間復雜度與時間復雜度來衡量。
算法可以理解為有基本運算及規定的運算順序所構成的完整的解題步驟。或者看成按照要求設計好的有限的確切的計算序列,并且這樣的步
驟和序列可以解決一類問題。
一個算法應該具有以下五個重要的特征:
1、有窮性: 一個算法必須保證執行有限步之后結束;
2、確切性: 算法的每一步驟必須有確切的定義;
3、輸入:一個算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指算法本身定除了初始條件;
4、輸出:一個算法有一個或多個輸出,以反映對輸入數據加工后的結果。沒有輸出的算法是毫無意義的;
5、可行性: 算法原則上能夠精確地運行,而且人們用筆和紙做有限次運算后即可完成。
計算機科學家尼克勞斯-沃思曾著過一本著名的書《數據結構+算法=程序》,可見算法在計算機科學界與計算機應用界的地位。
算法的復雜度
同一問題可用不同算法解決,而一個算法的質量優劣將影響到算法乃至程序的效率。算法分析的目的在于選擇合適算法和改進算法。一個算法的評價主要從時間復雜度和空間復雜度來考慮。
時間復雜度
算法的時間復雜度是指算法需要消耗的時間資源。一般來說,計算機算法是問題規模n 的函數f(n),算法的時間復雜度也因此記做
T(n)=Ο(f(n))
因此,問題的規模n 越大,算法執行的時間的增長率與f(n) 的增長率正相關,稱作漸進時間復雜度(Asymptotic Time Complexity)。
空間復雜度
算法的空間復雜度是指算法需要消耗的空間資源。其計算和表示方法與時間復雜度類似,一般都用復雜度的漸近性來表示。同時間復雜度相比,空間復雜度的分析要簡單得多。
算法設計與分析的基本方法
1.遞推法
遞推法是利用問題本身所具有的一種遞推關系求問題解的一種方法。它把問題分成若干步,找出相鄰幾步的關系,從而達到目的,此方法稱為遞推法。
2.遞歸
遞歸指的是一個過程:函數不斷引用自身,直到引用的對象已知
3.窮舉搜索法
窮舉搜索法是對可能是解的眾多候選解按某種順序進行逐一枚舉和檢驗,并從眾找出那些符合要求的候選解作為問題的解。
4.貪婪法
貪婪法是一種不追求最優解,只希望得到較為滿意解的方法。貪婪法一般可以快速得到滿意的解,因為它省去了為找最優解要窮盡所有可能而必須耗費的大量時間。貪婪法常以當前情況為基礎作最優選擇,而不考慮各種可能的整體情況,所以貪婪法不要回溯。
5.分治法
把一個復雜的問題分成兩個或更多的相同或相似的子問題,再把子問題分成更小的子問題……直到最后子問題可以簡單的直接求解,原問題的解即子問題的解的合并。
6.動態規劃法
動態規劃是一種在數學和計算機科學中使用的,用于求解包含重疊子問題的最優化問題的方法。其基本思想是,將原問題分解為相似的子問題,在求解的過程中通過子問題的解求出原問題的解。動態規劃的思想是多種算法的基礎,被廣泛應用于計算機科學和工程領域。
7.迭代法
迭代是數值分析中通過從一個初始估計出發尋找一系列近似解來解決問題(一般是解方程或者方程組)的過程,為實現這一過程所使用的方法統稱為迭代法。
算法分類
算法可大致分為基本算法、數據結構的算法、數論與代數算法、計算幾何的算法、圖論的算法、動態規劃以及數值分析、加密算法、排序算法、檢索算法、隨機化算法、并行算法。
數據結構的基本概念
數據:
數據(data)是描述客觀事物的數字、字符以及所有能夠輸入到計算機中并能被計算機接受的各種符號集合的統稱。數據是信息的符號表示,是計算機程序的處理對象。除了數值數據,計算機能夠處理的數據還可以是各種非數值數據,如字符串、圖形、音頻、視頻等多媒體數據。
表示一個事物的一組數據稱為一個數據元素(data element):數據元素是數據的基本單位。一個數據元素可以是一個不可分割的原子項,也可以由多個數據項組成。
數據項(data item)是數據元素中有獨立含義的、不可分割的最小標識單位。例如,一個整數、一個字符都是原子項;一個學生數據元素包含學號、姓名、性別和出生日期等多個數據項組成。
數據類型:
類型(type)是具有相同邏輯意義的一組值的集合。數據類型(data type)是指一個類型和定義在這個類型上的操作集合。數據類型定義了數據的性質、取值范圍以及對數據所能進行的各種操作。例如,Java語言的整數類型int,除了數值集合[-231,...,-2,-1,0,1,2,...,231-1]之外,還包括在這個值集合上的操作集合[+,-,*,/,%,=]。
程序中的每一個數據都屬于一個數據類型,決定了數據的類型也就決定了數據的性質以及對數據進行的運算和操作,同時數據也受到類型的保護,確保數據不能進行非法操作。
高級程序涉及語言通常預定一些基本數據類型和構造數據類型。基本數據類型的值是不可分解的,它可直接參與該類型所允許的運算。構造數據類型是使用已有的簡單數據類型和已定義的構造數據類型按照一定的語法規則組織起來的較復雜的數據類型。構造數據類型的變量包含多個數據項。
java語言的基本數據類型有整數類型、浮點數類型、字符類型、布爾類型,構造數據類型(引用類型)有數組、類和接口。
數據結構
計算機處理的數據不是雜亂無章的,而是有著內在聯系的。只有分析清楚它們的內在聯系,對大量的、復雜的數據才能進行復核的組織和有效處理。
數據結構是指元素之間存在的關系。一個數據結構(data structure)是由n(n≥0)個數據元素組成的有限集合,數據元素之間具有某種特定的關系。
數據結構概念包括三方向:數據的邏輯結構
數據的存儲結構
數據的操作
數據結構與數據類型兩個概念的側重點不同。數據類型研究的是每種數據所具有的特性,以及對這種特性的數據能夠進行哪些操作;數據結構研究的是數據元素之間具有的相互關系,數據結構與數據元素的數據類型無關,也不隨數據元素值的變化而變化。
抽象數據類型
程序設計語言使用數據類型描述數據特性,采取“表示與實現分離”的策略。語言本身僅提供數據類型的語法規則,并沒有說明這些數據類型是如何實現的;程序員按照這些規則使用數據類型,而不必知道這些數據類型是如何實現的。
抽象數據類型(Abstract Data type,ADT)指一個數學模型以及定義在該模型上的一組操作。抽象數據類型和數據類型本質上是一個概念,它的最重要特征是將一個類型上的數據及操作的邏輯含義與具體實現分離
與使用數據類型描述數據特性一樣,通常使用抽象數據類型描述數據結構,將線性表、樹、圖等數據結構分別定義為抽象數據類型,每種抽象數據類型描述一種數據結構的邏輯特性和操作,與該數據結構在計算機內的存儲及實現無關。
抽象數據類型是軟件模塊化設計思想的重要手段。一個抽象數據類型是描述一種特定功能軟件的基本模塊,由各種基本模塊可組織和構造起來一個龐大的軟件系統。