程序代碼如下:
這段程序放在<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()
|
定義一個(gè)函數(shù)。 |
{ var target="http://zhoucaiqi.51.net"
|
設(shè)置一個(gè)字符串。 |
newwindow=window.open("","","
scrollbars")
|
打開一個(gè)新窗口。 |
if (document.all)
{ newwindow.moveTo(0,0)
|
新窗口從(0,0)位置開始顯示。 |
newwindow.resizeTo
(screen.width,screen.height) }
|
新窗口的尺寸是整個(gè)屏幕的寬,整個(gè)屏幕的高。 |
newwindow.location=target |
顯示target指定的鏈接地址。 |
<input type="button" onClick="windowopen()" value="全屏顯示"
name="button"> |
插入一個(gè)按鈕,擊它的時(shí)候調(diào)用windowopen()函數(shù)。 |
|
|
程序代碼如下:
<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>
|
定義一個(gè)樣式。 |
<script language="JavaScript">
var dragapproved=false
var z,x,y
|
聲明幾個(gè)變量。 |
function move()
{ if
(event.button==1&&dragapproved)
|
定義一個(gè)函數(shù)move(),判斷鼠標(biāo)是否是按下狀態(tài)。 |
{
z.style.pixelLeft=temp1+event.clientX-x
z.style.pixelTop=temp2+event.clientY-y
return false }}
|
定義圖片左上角的位置。 |
function drags()
{ if
(!document.all)
return
|
定義一個(gè)函數(shù)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
|
如果鼠標(biāo)左鍵被按下,返回z,temp1,temp2,x,y的值。 |
document.onmousemove=move
}}
document.onmousedown=drags
document.onmouseup=new
Function("dragapproved=false")
</script>
|
當(dāng)鼠標(biāo)移動(dòng)時(shí),執(zhí)行move()函數(shù),當(dāng)鼠標(biāo)按下的時(shí)候,執(zhí)行drags函數(shù),當(dāng)鼠標(biāo)抬起的時(shí)候,不執(zhí)行任何函數(shù)。 |
<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());
}
}
可能你覺得應(yīng)該是當(dāng)前年- 1930, 例如:今年是2009,2009-1930= 79,運(yùn)行結(jié)果真的是這樣嗎?
你運(yùn)行下,額,奇怪,居然是 -1930, 額,為什么呢??
原來 首先其靜態(tài)域 被設(shè)置為缺省值, TEST先設(shè)置為null, belt設(shè)置為0 , 然后TEST構(gòu)造器計(jì)算出來,但我們已經(jīng)初始化belt了,
belt被設(shè)置為final, 所以忽略了。。。
再來看下 下面一個(gè)簡單的例子,剛開始做的時(shí)候不仔細(xì),哎,, 我錯(cuò)了。。哎~!~ 希望大家不要跟我一樣啊。
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 }
運(yùn)行結(jié)果: [1,2]:null
程序從main啟動(dòng),然后到 25行,super(x,y); 之后 到 第 8行 name = makeName(); 再之后29行, return super.makeName()+":"+color;
這里,方法被子類重載了,運(yùn)行到26行 this.color = color; 最后結(jié)束, 當(dāng)然輸出: [1,2]:null
YUI提供的Event工具集
YUI提供的Event工具集簡化了瀏覽器中事件驅(qū)動(dòng)程序的編寫,提供了一種簡單的接口來定制事件和檢查瀏覽器中的event對(duì)象。YUI事件工具集提供了自定義事件對(duì)象(Custom Event),通過自定義事件對(duì)象可以“發(fā)布”自己感興趣的時(shí)刻或事件,頁面中的YUI組件能夠響應(yīng)這些自定義的事件并做出回應(yīng)。
YUI對(duì)事件響應(yīng)的順序:通過YUI Event工具集添加的事件,默認(rèn)是在冒泡過程中執(zhí)行事件處理函數(shù)的。從DOM節(jié)點(diǎn)上來說,是從子節(jié)點(diǎn)向根節(jié)點(diǎn)響應(yīng)事件。
<!-- 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)
參數(shù):
element:為綁定事件的元素id,可以是一個(gè)數(shù)組,以支持批量操作
eventType:為事件類型
fn:為事件響應(yīng)的回調(diào)函數(shù)
obj:當(dāng)override為true時(shí),為回調(diào)函數(shù)傳入的參數(shù)對(duì)象;當(dāng)override為false時(shí),該參數(shù)被忽略。
override:
返回值類型:Boolean
功能:給指定的element綁定事件響應(yīng)函數(shù)
YAHOO.util.Event.removeListener:function(element,eventType,fn)
參數(shù):
element:為綁定事件的元素id,
eventType:事件類型
fn:為事件響應(yīng)函數(shù)
返回值類型:Boolean
功能:給指定的element解除綁定事件
YAHOO.util.Event.purgeElement ( el , recurse , sType )
參數(shù):
el:為綁定事件的元素id,
recurse:Boolean值,是否解除子節(jié)點(diǎn)的事件綁定
sType:事件類型
返回值類型:Boolean
功能:給指定的element解除綁定的同一類型的事件,也可以解除子節(jié)點(diǎn)上綁定的這一類型的事件
YAHOO.util.on
addListener的函數(shù)別名
YAHOO.util.Event.onAvailable ( p_id , p_fn , p_obj , p_override )
參數(shù):
p_id:為綁定事件的元素id,
p_fn:為事件響應(yīng)函數(shù)
p_obj:同addListener的obj參數(shù)
p_override:同addListener的override參數(shù)
返回值類型:無
功能:當(dāng)指定的element的p_id出現(xiàn)時(shí),執(zhí)行事件響應(yīng)函數(shù)。如果在頁面初始化之前執(zhí)行這一函數(shù),當(dāng)頁面加載時(shí)(可能還未完成時(shí)),就會(huì)執(zhí)行響應(yīng)的事件響應(yīng)函數(shù);如果放在頁面加載之后執(zhí)行這一函數(shù),將以固定的時(shí)間輪詢,當(dāng)element可用時(shí)響應(yīng)這一事件。這個(gè)輪詢的的時(shí)間是可以配置的,缺省的時(shí)間是10秒一次。
YAHOO.util.Event.onContentReady ( p_id , p_fn , p_obj , p_override )
參數(shù):
p_id:為綁定事件的元素id,
p_fn:為事件響應(yīng)函數(shù)
p_obj:同addListener的obj參數(shù)
p_override:同addListener的override參數(shù)
返回值類型:無
功能:與onAvailable類似,但不同的是事件響應(yīng)函數(shù)是等到element可以安全的修改的時(shí)候才響應(yīng)。
YAHOO.util.Event.onDOMReady ( p_fn , p_obj , p_scope )
參數(shù):
p_fn:為事件響應(yīng)函數(shù)
p_obj:同addListener的obj參數(shù)
p_scope:同addListener的override參數(shù)
返回值類型:無
功能:當(dāng)DOM第一次可用時(shí)執(zhí)行響應(yīng)函數(shù)。
YAHOO.util.Event.preventDefault ( event)
參數(shù):
event:事件對(duì)象
返回值類型:無
功能:阻止事件的缺省行為發(fā)生。
算法(Algorithm)是一系列解決問題的清晰指令,也就是說,能夠?qū)σ欢ㄒ?guī)范的輸入,在有限時(shí)間內(nèi)獲得所要求的輸出。如果一個(gè)算法有缺陷,或不適合于某個(gè)問題,執(zhí)行這個(gè)算法將不會(huì)解決這個(gè)問題。不同的算法可能用不同的時(shí)間、空間或效率來完成同樣的任務(wù)。一個(gè)算法的優(yōu)劣可以用空間復(fù)雜度與時(shí)間復(fù)雜度來衡量。
算法可以理解為有基本運(yùn)算及規(guī)定的運(yùn)算順序所構(gòu)成的完整的解題步驟?;蛘呖闯砂凑找笤O(shè)計(jì)好的有限的確切的計(jì)算序列,并且這樣的步
驟和序列可以解決一類問題。
一個(gè)算法應(yīng)該具有以下五個(gè)重要的特征:
1、有窮性: 一個(gè)算法必須保證執(zhí)行有限步之后結(jié)束;
2、確切性: 算法的每一步驟必須有確切的定義;
3、輸入:一個(gè)算法有0個(gè)或多個(gè)輸入,以刻畫運(yùn)算對(duì)象的初始情況,所謂0個(gè)輸入是指算法本身定除了初始條件;
4、輸出:一個(gè)算法有一個(gè)或多個(gè)輸出,以反映對(duì)輸入數(shù)據(jù)加工后的結(jié)果。沒有輸出的算法是毫無意義的;
5、可行性: 算法原則上能夠精確地運(yùn)行,而且人們用筆和紙做有限次運(yùn)算后即可完成。
計(jì)算機(jī)科學(xué)家尼克勞斯-沃思曾著過一本著名的書《數(shù)據(jù)結(jié)構(gòu)+算法=程序》,可見算法在計(jì)算機(jī)科學(xué)界與計(jì)算機(jī)應(yīng)用界的地位。
算法的復(fù)雜度
同一問題可用不同算法解決,而一個(gè)算法的質(zhì)量優(yōu)劣將影響到算法乃至程序的效率。算法分析的目的在于選擇合適算法和改進(jìn)算法。一個(gè)算法的評(píng)價(jià)主要從時(shí)間復(fù)雜度和空間復(fù)雜度來考慮。
時(shí)間復(fù)雜度
算法的時(shí)間復(fù)雜度是指算法需要消耗的時(shí)間資源。一般來說,計(jì)算機(jī)算法是問題規(guī)模n 的函數(shù)f(n),算法的時(shí)間復(fù)雜度也因此記做
T(n)=Ο(f(n))
因此,問題的規(guī)模n 越大,算法執(zhí)行的時(shí)間的增長率與f(n) 的增長率正相關(guān),稱作漸進(jìn)時(shí)間復(fù)雜度(Asymptotic Time Complexity)。
空間復(fù)雜度
算法的空間復(fù)雜度是指算法需要消耗的空間資源。其計(jì)算和表示方法與時(shí)間復(fù)雜度類似,一般都用復(fù)雜度的漸近性來表示。同時(shí)間復(fù)雜度相比,空間復(fù)雜度的分析要簡單得多。
算法設(shè)計(jì)與分析的基本方法
1.遞推法
遞推法是利用問題本身所具有的一種遞推關(guān)系求問題解的一種方法。它把問題分成若干步,找出相鄰幾步的關(guān)系,從而達(dá)到目的,此方法稱為遞推法。
2.遞歸
遞歸指的是一個(gè)過程:函數(shù)不斷引用自身,直到引用的對(duì)象已知
3.窮舉搜索法
窮舉搜索法是對(duì)可能是解的眾多候選解按某種順序進(jìn)行逐一枚舉和檢驗(yàn),并從眾找出那些符合要求的候選解作為問題的解。
4.貪婪法
貪婪法是一種不追求最優(yōu)解,只希望得到較為滿意解的方法。貪婪法一般可以快速得到滿意的解,因?yàn)樗∪チ藶檎易顑?yōu)解要窮盡所有可能而必須耗費(fèi)的大量時(shí)間。貪婪法常以當(dāng)前情況為基礎(chǔ)作最優(yōu)選擇,而不考慮各種可能的整體情況,所以貪婪法不要回溯。
5.分治法
把一個(gè)復(fù)雜的問題分成兩個(gè)或更多的相同或相似的子問題,再把子問題分成更小的子問題……直到最后子問題可以簡單的直接求解,原問題的解即子問題的解的合并。
6.動(dòng)態(tài)規(guī)劃法
動(dòng)態(tài)規(guī)劃是一種在數(shù)學(xué)和計(jì)算機(jī)科學(xué)中使用的,用于求解包含重疊子問題的最優(yōu)化問題的方法。其基本思想是,將原問題分解為相似的子問題,在求解的過程中通過子問題的解求出原問題的解。動(dòng)態(tài)規(guī)劃的思想是多種算法的基礎(chǔ),被廣泛應(yīng)用于計(jì)算機(jī)科學(xué)和工程領(lǐng)域。
7.迭代法
迭代是數(shù)值分析中通過從一個(gè)初始估計(jì)出發(fā)尋找一系列近似解來解決問題(一般是解方程或者方程組)的過程,為實(shí)現(xiàn)這一過程所使用的方法統(tǒng)稱為迭代法。
算法分類
算法可大致分為基本算法、數(shù)據(jù)結(jié)構(gòu)的算法、數(shù)論與代數(shù)算法、計(jì)算幾何的算法、圖論的算法、動(dòng)態(tài)規(guī)劃以及數(shù)值分析、加密算法、排序算法、檢索算法、隨機(jī)化算法、并行算法。
數(shù)據(jù)結(jié)構(gòu)的基本概念
數(shù)據(jù):
數(shù)據(jù)(data)是描述客觀事物的數(shù)字、字符以及所有能夠輸入到計(jì)算機(jī)中并能被計(jì)算機(jī)接受的各種符號(hào)集合的統(tǒng)稱。數(shù)據(jù)是信息的符號(hào)表示,是計(jì)算機(jī)程序的處理對(duì)象。除了數(shù)值數(shù)據(jù),計(jì)算機(jī)能夠處理的數(shù)據(jù)還可以是各種非數(shù)值數(shù)據(jù),如字符串、圖形、音頻、視頻等多媒體數(shù)據(jù)。
表示一個(gè)事物的一組數(shù)據(jù)稱為一個(gè)數(shù)據(jù)元素(data element):數(shù)據(jù)元素是數(shù)據(jù)的基本單位。一個(gè)數(shù)據(jù)元素可以是一個(gè)不可分割的原子項(xiàng),也可以由多個(gè)數(shù)據(jù)項(xiàng)組成。
數(shù)據(jù)項(xiàng)(data item)是數(shù)據(jù)元素中有獨(dú)立含義的、不可分割的最小標(biāo)識(shí)單位。例如,一個(gè)整數(shù)、一個(gè)字符都是原子項(xiàng);一個(gè)學(xué)生數(shù)據(jù)元素包含學(xué)號(hào)、姓名、性別和出生日期等多個(gè)數(shù)據(jù)項(xiàng)組成。
數(shù)據(jù)類型:
類型(type)是具有相同邏輯意義的一組值的集合。數(shù)據(jù)類型(data type)是指一個(gè)類型和定義在這個(gè)類型上的操作集合。數(shù)據(jù)類型定義了數(shù)據(jù)的性質(zhì)、取值范圍以及對(duì)數(shù)據(jù)所能進(jìn)行的各種操作。例如,Java語言的整數(shù)類型int,除了數(shù)值集合[-231,...,-2,-1,0,1,2,...,231-1]之外,還包括在這個(gè)值集合上的操作集合[+,-,*,/,%,=]。
程序中的每一個(gè)數(shù)據(jù)都屬于一個(gè)數(shù)據(jù)類型,決定了數(shù)據(jù)的類型也就決定了數(shù)據(jù)的性質(zhì)以及對(duì)數(shù)據(jù)進(jìn)行的運(yùn)算和操作,同時(shí)數(shù)據(jù)也受到類型的保護(hù),確保數(shù)據(jù)不能進(jìn)行非法操作。
高級(jí)程序涉及語言通常預(yù)定一些基本數(shù)據(jù)類型和構(gòu)造數(shù)據(jù)類型?;緮?shù)據(jù)類型的值是不可分解的,它可直接參與該類型所允許的運(yùn)算。構(gòu)造數(shù)據(jù)類型是使用已有的簡單數(shù)據(jù)類型和已定義的構(gòu)造數(shù)據(jù)類型按照一定的語法規(guī)則組織起來的較復(fù)雜的數(shù)據(jù)類型。構(gòu)造數(shù)據(jù)類型的變量包含多個(gè)數(shù)據(jù)項(xiàng)。
java語言的基本數(shù)據(jù)類型有整數(shù)類型、浮點(diǎn)數(shù)類型、字符類型、布爾類型,構(gòu)造數(shù)據(jù)類型(引用類型)有數(shù)組、類和接口。
數(shù)據(jù)結(jié)構(gòu)
計(jì)算機(jī)處理的數(shù)據(jù)不是雜亂無章的,而是有著內(nèi)在聯(lián)系的。只有分析清楚它們的內(nèi)在聯(lián)系,對(duì)大量的、復(fù)雜的數(shù)據(jù)才能進(jìn)行復(fù)核的組織和有效處理。
數(shù)據(jù)結(jié)構(gòu)是指元素之間存在的關(guān)系。一個(gè)數(shù)據(jù)結(jié)構(gòu)(data structure)是由n(n≥0)個(gè)數(shù)據(jù)元素組成的有限集合,數(shù)據(jù)元素之間具有某種特定的關(guān)系。
數(shù)據(jù)結(jié)構(gòu)概念包括三方向:數(shù)據(jù)的邏輯結(jié)構(gòu)
數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)
數(shù)據(jù)的操作
數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)類型兩個(gè)概念的側(cè)重點(diǎn)不同。數(shù)據(jù)類型研究的是每種數(shù)據(jù)所具有的特性,以及對(duì)這種特性的數(shù)據(jù)能夠進(jìn)行哪些操作;數(shù)據(jù)結(jié)構(gòu)研究的是數(shù)據(jù)元素之間具有的相互關(guān)系,數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)元素的數(shù)據(jù)類型無關(guān),也不隨數(shù)據(jù)元素值的變化而變化。
抽象數(shù)據(jù)類型
程序設(shè)計(jì)語言使用數(shù)據(jù)類型描述數(shù)據(jù)特性,采取“表示與實(shí)現(xiàn)分離”的策略。語言本身僅提供數(shù)據(jù)類型的語法規(guī)則,并沒有說明這些數(shù)據(jù)類型是如何實(shí)現(xiàn)的;程序員按照這些規(guī)則使用數(shù)據(jù)類型,而不必知道這些數(shù)據(jù)類型是如何實(shí)現(xiàn)的。
抽象數(shù)據(jù)類型(Abstract Data type,ADT)指一個(gè)數(shù)學(xué)模型以及定義在該模型上的一組操作。抽象數(shù)據(jù)類型和數(shù)據(jù)類型本質(zhì)上是一個(gè)概念,它的最重要特征是將一個(gè)類型上的數(shù)據(jù)及操作的邏輯含義與具體實(shí)現(xiàn)分離
與使用數(shù)據(jù)類型描述數(shù)據(jù)特性一樣,通常使用抽象數(shù)據(jù)類型描述數(shù)據(jù)結(jié)構(gòu),將線性表、樹、圖等數(shù)據(jù)結(jié)構(gòu)分別定義為抽象數(shù)據(jù)類型,每種抽象數(shù)據(jù)類型描述一種數(shù)據(jù)結(jié)構(gòu)的邏輯特性和操作,與該數(shù)據(jù)結(jié)構(gòu)在計(jì)算機(jī)內(nèi)的存儲(chǔ)及實(shí)現(xiàn)無關(guān)。
抽象數(shù)據(jù)類型是軟件模塊化設(shè)計(jì)思想的重要手段。一個(gè)抽象數(shù)據(jù)類型是描述一種特定功能軟件的基本模塊,由各種基本模塊可組織和構(gòu)造起來一個(gè)龐大的軟件系統(tǒng)。