程序代码如下:
这段程序放在<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)指一个数学模型以及定义在该模型上的一组操作。抽象数据类型和数据类型本质上是一个概念,它的最重要特征是将一个类型上的数据及操作的逻辑含义与具体实现分离
与使用数据类型描述数据特性一样,通常使用抽象数据类型描述数据结构,将线性表、树、图等数据结构分别定义为抽象数据类型,每种抽象数据类型描述一种数据结构的逻辑特性和操作,与该数据结构在计算机内的存储及实现无关。
抽象数据类型是软件模块化设计思想的重要手段。一个抽象数据类型是描述一种特定功能软件的基本模块,由各种基本模块可组织和构造起来一个庞大的软件系统。