程序代码如下:

这段程序放在<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()函数。
posted @ 2009-04-16 13:44 胡鹏 阅读(9204) | 评论 (0)编辑 收藏
  程序代码如下:
<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"> 在页面中插入一张图片。


posted @ 2009-04-16 13:40 胡鹏 阅读(1503) | 评论 (0)编辑 收藏
  下面的程序输出什么呢?  考虑下哦。。。。

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  

posted @ 2009-04-15 19:28 胡鹏 阅读(222) | 评论 (1)编辑 收藏
   
      在继承中的 使用静态方法的时候该注意。。。。。
   你觉得下面程序很简单吧,打印出什么呢? 没看仔细要错的哦~!~

class Dog{
    
public static void bark(){
        System.out.println(
"Dog bark");
    }

}


class Basenji extends Dog{
    
public static void bark(){
        
    }

}


public class Test {
    
public static void main(String []args) throws Exception{
        Dog dog 
= new Dog();
        Dog basenji 
= new Basenji();
        dog.bark();
        basenji.bark();
        
    }

}


程序运行结果:
Dog bark
Dog bark

打印出2个Dog bark,额,原来对静态方法的调用不存在任何动态的分派机制。这个没有注意很容易搞错的哦~!!~
posted @ 2009-04-15 19:15 胡鹏 阅读(453) | 评论 (6)编辑 收藏
YUI提供的Event工具集

YUI提供的Event工具集简化了浏览器中事件驱动程序的编写,提供了一种简单的接口来定制事件和检查浏览器中的event对象。YUI事件工具集提供了自定义事件对象(Custom Event),通过自定义事件对象可以发布自己感兴趣的时刻或事件,页面中的YUI组件能够响应这些自定义的事件并做出回应。

YUI对事件响应的顺序:通过YUI Event工具集添加的事件,默认是在冒泡过程中执行事件处理函数的。从DOM节点上来说,是从子节点向根节点响应事件。

Event需要的引入

<!-- Dependency -->

build/yahoo/yahoo-min.js

<!-- Event source file -->

build/event/event-min.js

EventCustom Event分别定义在YAHOO.util.EventYAHOO.util.CustomEvent

Event工具集提供的方法

YAHOO.util.Event.addListener(element,eventType,fn,obj,override)

参数:

element:为绑定事件的元素id可以是一个数组,以支持批量操作

eventType:为事件类型

fn:为事件响应的回调函数

obj:当overridetrue时,为回调函数传入的参数对象;当overridefalse时,该参数被忽略。

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,

recurseBoolean值,是否解除子节点的事件绑定

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:同addListenerobj参数

p_override:同addListeneroverride参数

返回值类型:

功能:当指定的elementp_id出现时,执行事件响应函数。如果在页面初始化之前执行这一函数,当页面加载时(可能还未完成时),就会执行响应的事件响应函数;如果放在页面加载之后执行这一函数,将以固定的时间轮询,当element可用时响应这一事件。这个轮询的的时间是可以配置的,缺省的时间是10秒一次。

YAHOO.util.Event.onContentReady ( p_id , p_fn , p_obj , p_override )

参数:

p_id:为绑定事件的元素id,

p_fn:为事件响应函数

p_obj:同addListenerobj参数

p_override:同addListeneroverride参数

返回值类型:

功能:onAvailable类似,但不同的是事件响应函数是等到element可以安全的修改的时候才响应。

YAHOO.util.Event.onDOMReady ( p_fn , p_obj , p_scope )

参数:

p_fn:为事件响应函数

p_obj:同addListenerobj参数

p_scope:同addListeneroverride参数

返回值类型:

功能:DOM第一次可用时执行响应函数。

YAHOO.util.Event.preventDefault ( event)

参数:

event:事件对象

返回值类型:

功能:阻止事件的缺省行为发生。

posted @ 2009-04-15 17:28 胡鹏 阅读(484) | 评论 (0)编辑 收藏

        简单程序:求2个数的最小公倍数 和 最大公约数


public class T {
    
public static void main(String[] args) {

        
int m, n;
        m
= 32 ;
        n 
= 48;
        System.out.println(m
+""+n+"");
        System.out.println(
"最大公约数是:" + getGongYue(m,n));
        System.out.println(
"最小公倍数是:" + getGongBei(m,n));
    }

    
    
/**
     * 得到 m,n 的最大公约数
     * 
@param m
     * 
@param n
     * 
@return
     
*/

    
public static int getGongYue(int m, int n){
        
int  r;
        
do {
            
if (m < n) {
                
int t = m;
                m 
= n;
                n 
= t;
            }


            r 
= m % n;
            m 
= n;
            n 
= r;
        }
 while (r != 0);
        
return m;
    }

    
    
/**
     * 得到 m,n 的最小公倍数
     * 
@param m
     * 
@param n
     * 
@return
     
*/

    
public static long getGongBei(int m,int n){
        
return m*n/getGongYue(m,n);
    }

}
posted @ 2009-04-12 15:03 胡鹏 阅读(299) | 评论 (0)编辑 收藏
   
     算法(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.迭代法

  迭代是数值分析中通过从一个初始估计出发寻找一系列近似解来解决问题(一般是解方程或者方程组)的过程,为实现这一过程所使用的方法统称为迭代法。


   算法分类

  算法可大致分为基本算法、数据结构的算法、数论与代数算法、计算几何的算法、图论的算法、动态规划以及数值分析、加密算法、排序算法、检索算法、随机化算法、并行算法。





 

posted @ 2009-04-12 14:37 胡鹏 阅读(236) | 评论 (0)编辑 收藏

数据结构的基本概念



      数据:

       数据(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)指一个数学模型以及定义在该模型上的一组操作。抽象数据类型和数据类型本质上是一个概念,它的最重要特征是将一个类型上的数据及操作的逻辑含义与具体实现分离

       与使用数据类型描述数据特性一样,通常使用抽象数据类型描述数据结构,将线性表、树、图等数据结构分别定义为抽象数据类型,每种抽象数据类型描述一种数据结构的逻辑特性和操作,与该数据结构在计算机内的存储及实现无关。

       抽象数据类型是软件模块化设计思想的重要手段。一个抽象数据类型是描述一种特定功能软件的基本模块,由各种基本模块可组织和构造起来一个庞大的软件系统。

posted @ 2009-04-12 14:22 胡鹏 阅读(704) | 评论 (0)编辑 收藏

使用StringBuffer时应该注意的:
  StringBuffer sb = new StringBuffer('M');
  sb.append("abc");
  System.out.println(sb.toString());

   该程序会输出什么呢?   不是 mabc   输入结果为: abc
   为什么m没有输出来呢?奇怪了? 其实也不是很奇怪,StringBuffer没有字符为参数的构造方法,只有int作为缓冲区初始容量的构造器。
在本例子中, new StringBuffer('M') 返回的是一个具有初始容量77的空字符串缓冲区。


**2******************************************************************************************************************

 

下面的程序循环遍历byte数值,以查找某个特定值。这个程序会打印出什么?

public class BigDelight {
 
public static void main(String[] args) {
  
for (byte b = Byte.MIN_VALUE; b < Byte.MAX_VALUE; b++{
   
if (b == 0x90)
    System.out.println(
"hello");
  }

 }

}



 

结果什么都没有打印。
  0x90是一个两位数的十六进制字面常量,每一个十六进制位都占据4个比特的位置,
所以整个数值也只占8个比特,即1个byte。问题在于byte是有符号类型,常量0x90是
一个正的最高位被置为8位int数值。合法的byte数值是从-128到+127,但是常量0x90等于+144


上面这个程序大家应该都能理解,但是下面整个判断是true还是false呢?
( (byte)0x90 == 0x90 ) ,当然是false啦,有点java基础知识的人都知道会转化成int比较的,
但转化后值是多少呢? 这个这个。。。。。hoho   (byte)0x90 提升为int数值-122,而0x90为144


如果要实现比较,其实也很简单。

方法一: 只要我们相同的类型比较就可以啦,苹果跟苹果比较,桔子跟桔子比较。
最上面的程序改成:
if (b == (byte)0x90)
    System.out.println("hello");
这就可以打印出来了。

方法二:
可以用一个屏蔽码来消除符号扩展的影响,从而将byte转化为int,之后就可以拿到一个int与另一个int进行比较了。
if ( (b & 0xff) == 0x90)
    System.out.println("hello");

   虽然上面的两种方法都可以,但是避免这类问题的最佳方法还是将常量值移到循环的外面,并在一个常量种定义它。

1public class BigDelight {
2 private static final byte TARGET = (byte)0x90;
3 public static void main(String[] args) {
4  for (byte b = Byte.MIN_VALUE; b < Byte.MAX_VALUE; b++{
5   if ( b == TARGET )
6    System.out.println("hello");
7  }

8 }

9}

 

 




****3**************************************************************************************
下面的程序输入结果是什么呢?

public class Incremet {
 
public static void main(String[] args) {
  
int j = 0;
  
for(int i=0;i<100;i++){
   j 
= j++;
  }

  System.out.println(j);
 }


}

 


乍一看应该慧是100吧。 毕竟做了100次循环增量。   结果确是0


j = j++; 整个操作细分开来大家都知道:
int temp = j;
j = j+1 ;
j = temp;

 那如果是这样那么结果就不用怀疑了,j=0

****4***************************************************************************


下面的程序输出什么呢?

 1public class InTheLoop {
 2 public static final int END = Integer.MAX_VALUE;
 3 public static final int START = Integer.MIN_VALUE;
 4 public static void main(String[] args) {
 5  int count = 0;
 6  for(int i=START;i<=END;i++){
 7   count ++;
 8  }

 9  System.out.println(count);
10 }

11}

 

应该是101吧,应该,那就是错啦,实际上是:在for循环中,出现了无限循环。
当i达到Integer.MAX_VALUE时,并且再次执行增量操作时,它就又绕回到了Integer.MIN_VALUE。 所以就出现无限循环。

 


求:寻找一种定义,使得下面的循环一直无限,
   (1). for(int i=start;i<=start+1;i++){}
   (2). while(i== i+1){}
   (3). while(i !=i ){}
   (4). while(i!= i + 0 ){},附加要求,不能使用浮点数类型
   (5). while(i<=j && i>=j && i!=j ){}
   (6). while(i!=0 && i== -i ){} 

解答(1):int start = Integer.MAX_VALUE-1;   //不信你可以试一试
解答(2):可以用任何计算位无穷大的浮点算术表达式来实现:
double i = 1.0/0.0; 一般都使用浮点数常量:double i = Double.POSITIVE_INFINITY;事实上,不必将i初始化为无穷大,
任何足够大的浮点数都可以实现这一目的。例如:double i = 1.0e40;
解答(3):double i=0.0/0.0; 即:double i = Double.NaN;
解答(4):把i定义成string类型就可以实现啦
解答(5):Integer i = new Integer(0);  Integer j = new Integer(0);
解答(6):int i = Integer.MIN_VALUE; 或 long i = Long.MIN_VALUE;

 


寻找i一种定义,使得 if( i-i == 0 ){} if中的条件永远为false?
解答:double i=0.0/0.0; 即:double i = Double.NaN;

 

 

 

 

 

 

 

 

 


 

posted @ 2009-04-07 22:49 胡鹏 阅读(266) | 评论 (0)编辑 收藏
 下面三个程序每一个都会打印些什么? 不要假设他们都可以编译通过:

第一个程序:
import java.io.IOException;

public class Arcane1 {
    
public static void main(String[] args) {
        
try{
            System.out.println(
"hello lsbwahaha");
        }
catch(IOException e){
            System.out.println(
"I've never seen println fail!");
        }

    }

}


第二个程序:
1public class Arcane2 {
2    public static void main(String[] args) {
3        try{
4            //you have noting nice to say
5        }
catch(Exception e){
6            System.out.println("this can't happen");
7        }

8    }

9}


第三个程序:

interface Type1{
    
void f() throws CloneNotSupportedException;
}


interface Type2{
    
void f() throws InterruptedException;
}


interface Type3 extends Type2,Type1{}

public class Arcane3 implements Type3 {
    
public void f(){
        System.out.println(
"hello lsbwahaha");
    }

    
public static void main(String[] args) {
        Type3 t3 
= new Arcane3();
        t3.f();
    }

}


分析第一个程序:
        看起来应该会打印出hello lsbwahaha,这个程序不能编译,因为pringln犯法没有会抛出任何受检查异常,
而IOException 却正是一个受检查异常。
语言规范中描述:如果一个catch子句要捕获一个类型为E的受检查异常,而其相对应的try子句不能抛出E的某种子类型的异常,
那么这就是一个编译期错误。


分析第二个程序:
    基于第一个程序,那么第二个程序应该不可以编译,但是它却可以。它之所以可以编译,是因为它唯一的catch子句检查了Exception
   捕获Exception或Throwable的catch子句是合法的,不管于其相对应的try子句的内容为何。  这个程序什么都不会打印。


分析第三个程序:
   看起来它也不能编译。 如果它能编译,那是为什么呢?
 结果居然能编译通过。。。。  这个到底是为什么呢?、、、、、、、
     Type3 中 因为每一个接口都限制了方法f可以抛出的受检查异常集合。一个方法可以抛出的受检查异常集合是它所适用的所有类型声明
要抛出的受检查异常交集,而不是并集。




posted @ 2009-04-07 20:51 胡鹏 阅读(184) | 评论 (0)编辑 收藏
仅列出标题
共10页: First 上一页 2 3 4 5 6 7 8 9 10 下一页 

导航

<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

统计

常用链接

留言簿(3)

随笔分类

随笔档案

agile

搜索

最新评论

阅读排行榜

评论排行榜