10.菜单 有两种类型的菜单:下拉式菜单和弹出式菜单。本章只讨论下拉式菜单编程方法。菜单与JComboBox和JCheckBox不同,它们在界面中是一直可见的。菜单与JComboBox的相同之处是每次只可选择一个项目。在下拉式菜单或弹出式菜单中选择一个选项就产生一个ActionEvent事件。该事件被发送给那个选项的监视器,事件的意义由监视器解释。菜单条、菜单和菜单项下拉式菜单通过出现在菜
9.列表和组合框 列表和组合框是又一类供用户选择的界面组件,用于在一组选择项目选择,组合框还可以输入新的选择。列表列表(JList)在界面中表现为列表框,是JList类或它的子类的对象。程序可以在列表框中加入多个文本选择项条目。列表事件的事件源有两种:一是鼠标双击某个选项:双击选项是动作事件,与该事件相关的接口是ActionListener,注册监视器的方法是addActionListener(
8.选择框和单选按钮 选择框、单选框和单选按钮都是选择组件,选择组件有两种状态,一种是选中(on),另一种是未选中(off),它们提供一种简单的 “on/off”选择功能,让用户在一组选择项目中作选择。选择框选择框(JCheckBox)的选中与否开状是一个小方框,被选中则在框中打勾。当在一个容器中有多个选择框,同时可以有多个选择框被选中,这样的选择框也称复选框。与选择框相关的接口是ItemListene
7.文本框和文本区的输入输出 在GUI中,常用文本框和文本区实现数据的输入和输出。如果采用文本区输入,通常另设一个数据输入完成按钮。当数据输入结束时,点击这个按钮。事件处理程序利用getText()方法从文本区中读取字符串信息。对于采用文本框作为输入的情况,最后输入的回车符可以激发输入完成事件,通常不用另设按钮。事件处理程序可以利用单词分析器分析出一个个数,再利用字符串转换数值方法,获得输入的数值。对于输出,程序先将数值转换成
6.文本框和文本区 在图形界面中,文本框和文本区是用于信息输入输出的组件。文本框文本框(JTextField)是界面中用于输入和输出一行文本的框。JTextField类用来建立文本框。与文本框相关的接口是ActionListener。文本框处理程序的基本内容有以下几个方面:声明一个文本框名。建立一个文本框对象。将文本框对象加入到某个容器。对需要控制的文本框对象注册监视器,监听文本框的输入结
5.布局设计 在界面设计中,一个容器要放置许多组件,为了美观,为组件安排在容器中的位置,这就是布局设计。java.awt中定义了多种布局类,每种布局类对应一种布局的策略。常用的有以下布局类:FlowLayout,依次放置组件。BoarderLayout,将组件放置在边界上。CardLayout,将组件像扑克牌一样叠放,而每次只能显示其中一个组件。GridLayout,将显示区域按行、列划分成一个个相等的
4.面板 面板有两种,一种是普通面板(JPanel),另一种是滚动面板(JScrollPane)。JPanel面板是一种通用容器,JPanel的作用是实现界面的层次结构,在它上面放入一些组件,也可以在上面绘画,将放有组件和有画的JPanel再放入另一个容器里。JPanel的默认布局为FlowLayout。面板处理程序的基本内容有以下几个方面:通过继承声明JPanel类的子类,子类
2.框架窗口 http://www.nxtv.com.cn/jkzx/jkja/20140830/2232357.htmlhttp://www.nxtv.com.cn/jkzx/jkja/20140830/2232264.htmlhttp://www.nxtv.com.cn/jkzx/jkja/20140830/2232248.htmlhttp://www.nxtv.com.cn/jkzx/jkja
3.标签、按钮和按钮事件 标签和按钮也许是图形界面中最常见的两种组件,按钮又总是与激发动作事件有关。标签标签(JLabel)是最简单的Swing组件。标签对象的作用是对位于其后的界面组件作说明。可以设置标签的属性,即前景色,背景色、字体等,但不能动态地编辑标签中的文本。程序关于标签的基本内容有以下几个方面:声明一个标签名;创建一个标签对象;将标签对象加入到某个容器。JLabel类的主要构
1.图形界面设计基础 早先程序使用最简单的输入输出方式,用户在键盘输入数据,程序将信息输出在屏幕上。现代程序要求使用图形用户界面(Graphical User Interface,GUI),界面中有菜单、按钮等,用户通过鼠标选择菜单中的选项和点击按钮,命令程序功能模块。本章学习如何用Java语言编写GUI科学试验,如何通过GUI实现输入和输出。AWT和Swing先前用Java编写GUI程序,是使用抽象窗口工
6.哈希表及其应用 哈希表也称为散列表,是用来存储群体对象的集合类结构。什么是哈希表数组和向量都可以存储对象,但对象的存储位置是随机的,也就是说对象本身与其存储位置之间没有必然的联系。当要查找一个对象时,只能以某种顺序(如顺序查找或二分查找)与各个元素进行比较,当数组或向量中的元素数量很多时,查找的效率会明显的降低。一种有效的存储方式,是不与其他元素进行比较,一次存取便能得到所需要的记录。这就需要
5.向量及其应用 向量(Vector)是 java.util 包提供的一个工具类,该类实现了可扩展的对象数组。向量和数组的区别向量和数组相似,都可以保存列表对象。但是数组只能保存固定大小的列表,而向量却提供了一种类似于“动态数组”的功能,向量与数组的重要区别之一就是向量的容量是可变的。向量和数组分别适用于不同的场合,一般来说,下列场合更适合于使用向量:如果需要频繁进行对象的插入和删除工作
4.日期和时间类 Java 的日期和时间类包含在 Java 实用程序包(java.util)中。利用日期时间类提供的方法,可以获取当前的日期和时间,创建日期和时间参数,计算和比较时间。Date 类Date 类是 Java 中的日期时间类,其构造方法为: Date()使用当前的日期和时间初始化一个对象。 Date(long millisec)该构造方法带有一个参数,使用这个参数
3.Java语言包(java.lang)简介 Java语言包(java.lang)定义了Java中的大多数基本类,由Java语言自动调用,不需要显示声明。该包中包含了Object类,Object类是整个类层次结构的根结点,同时还定义了基本数据类型的类,如:String、Boolean、Byter、Short等。这些类支持数字类型的转换和字符串的操作等,下面将进行简单介绍。Math类Math类提供了常用的数学运算方法以及Math.PI和
2.Object类 java.lang 包中定义的 Object 类是所有 Java 类的根父类,其中定义了一些实现和支持面向对象机制的重要方法。任何 Java 对象,如果没有父类,就默认它继承了 Object 类。因此, 实际上,以前的定义是下面的简略: public class Employee extends Object public class Manager extends Emp
1.Java基础类库 Java 的类库是 Java 语言提供的已经实现的标准类的集合,是 Java 编程的 API(Application Program Interface),它可以帮助开发者方便、快捷地开发 Java 程序。这些类根据实现的功能不同,可以划分为不同的集合,每个集合组成一个包,称为类库。Java 类库中大部分都是由Sun 公司提供的,这些类库称为基础类库。Java 语言中提供了大量的类库共
8.文件的压缩处理 Java.util.zip 包中提供了可对文件的压缩和解压缩进行处理的类,它们继承自字节流类OutputSteam 和 InputStream。其中 GZIPOutputStream 和 ZipOutputStream 可分别把数据压缩成 GZIP 和 Zip 格式,GZIPInpputStream 和 ZipInputStream 又可将压缩的数据进行还原。将文件写入压缩文件的一般步
7.文件的随机读写 Java.io 包提供了 RandomAccessFile 类用于随机文件的创建和访问。使用这个类,可以跳转到文件的任意位置读写数据。程序可以在随机文件中插入数据,而不会破坏该文件的其他数据。此外,程序也可以更新或删除先前存储的数据,而不用重写整个文件。RandomAccessFile类是Object类的直接子类,包含两个主要的构造方法用来创 建RandomAccessFile 的对象,如
6.文件与目录管理 目录是管理文件的特殊机制,同类文件保存在同一个目录下不仅可以简化文件管理,而且还可以提高工作效率。Java 语言在 java.io 包中定义了一个 File 类专门用来管理磁盘文件和目录。每个 File 类对象表示一个磁盘文件或目录,其对象属性中包含了文件或目录的相关信息。通过调用 File 类提供的各种方法,能够创建、删除、重名名文件、判断文件的读写权限以及是否存在,设置和查询文件的最近
5.面向字节流的应用 文件输入输出流文件输入输出流 FileInputStream 和 FileOutputStream 负责完成对本地磁盘文件的顺序输入输出操作。【例 10-5】通过程序创建一个文件,从键盘输入字符,当遇到字符“#”时结束,在屏幕上显示该文件的所有内容(查看源代码)。运行后在程序目录建立一个名称为 ep10_5 的文件,运行结果如图 10-8 所示:图 10-8 例
4.面向字节的输入输出流 字节流以字节为传输单位,用来读写8位的数据,除了能够处理纯文本文件之外,还能用来处理二进制文件的数据。InputStream类和OutputStream类是所有字节流的父类。InputStream类面向字节的输入流都是InputStream类的子类,其类层次结构如图10-6所示。图10-6 InputStream的类层次结构图表 10-5 列出了 InputStre
3.面向字符的输出流 面向字符的输出流都是类 Writer 的子类,其类层次结构如图 10-5 所示。图10-5 Writer的类层次结构图表 10-3 列出了 Writer 的主要子类及说明。表 10-3 Writer 的主要子类类名功能说明CharArrayWriter写到字符数组的输出流BufferedWriter缓冲输出字符流
2.面向字符的输入流 字符流是针对字符数据的特点进行过优化的,因而提供一些面向字符的有用特性,字符流的源或目标通常是文本文件。 Reader和Writer是java.io包中所有字符流的父类。由于它们都是抽象类,所以应使用它们的子类来创建实体对象,利用对象来处理相关的读写操作。Reader和Writer的子类又可以分为两大类:一类用来从数据源读入数据或往目的地写出数据(称为节点流),另一类对数据执行某种处理(称为处理流
1.输入输出基本概念 输入输出(I/O)是指程序与外部设备或其他计算机进行交互的操作。几乎所有的程序都具有输入与输出操作,如从键盘上读取数据,从本地或网络上的文件读取数据或写入数据等。通过输入和输出操作可以从外界接收信息,或者是把信息传递给外界。Java把这些输入与输出操作用流来实现,通过统一的接口来表示,从而使程序设计更为简单。Java流的概念流(Stream)是指在计算机的输入输出操作中各部件之间的数据
11.线程的挂起、恢复和终止 有时,线程的挂起是很有用的。例如,一个独立的线程可以用来显示当日的时间。如果用户不希望用时钟,线程被挂起。在任何情形下,挂起线程是很简单的,一旦挂起,重新启动线程也是一件简单的事。挂起,终止和恢复线程机制在Java 2和早期版本中有所不同。尽管你运用Java 2的途径编写代码,你仍需了解这些操作在早期Java环境下是如何完成的。例如,你也许需要更新或维护老的代码。你也需要了解为什么Java
10.线程死锁 需要避免的与多任务处理有关的特殊错误类型是死锁(deadlock)。死锁发生在当两个线程对一对同步对象有循环依赖关系时。例如,假定一个线程进入了对象X的管程而另一个线程进入了对象Y的管程。如果X的线程试图调用Y的同步方法,它将像预料的一样被锁定。而Y的线程同样希望调用X的一些同步方法,线程永远等待,因为为到达X,必须释放自己的Y的锁定以使第一个线程可以完成。死锁是很难调试的错误,因为:通常
9.线程间通信 上述例题无条件的阻塞了其他线程异步访问某个方法。Java对象中隐式管程的应用是很强大的,但是你可以通过进程间通信达到更微妙的境界。这在Java中是尤为简单的。像前面所讨论过的,多线程通过把任务分成离散的和合乎逻辑的单元代替了事件循环程序。线程还有第二优点:它远离了轮询。轮询通常由重复监测条件的循环实现。一旦条件成立,就要采取适当的行动。这浪费了CPU时间。举例来说,考虑经典的序列问题,当一
8.线程同步 当两个或两个以上的线程需要共享资源,它们需要某种方法来确定资源在某一刻仅被一个线程占用。达到此目的的过程叫做同步(synchronization)。像你所看到的,Java为此提供了独特的,语言水平上的支持。同步的关键是管程(也叫信号量semaphore)的概念。管程是一个互斥独占锁定的对象,或称互斥体(mutex)。在给定的时间,仅有一个线程可以获得管程。当一个线程需要锁定,它必须进入管程
7.线程优先级 线程优先级被线程调度用来判定何时每个线程允许运行。理论上,优先级高的线程比优先级低的线程获得更多的CPU时间。实际上,线程获得的CPU时间通常由包括优先级在内的多个因素决定(例如,一个实行多任务处理的操作系统如何更有效的利用CPU时间)。一个优先级高的线程自然比优先级低的线程优先。举例来说,当低优先级线程正在运行,而一个高优先级的线程被恢复(例如从沉睡中或等待I/O中),它将抢占低优先级线
6.isAlive()和join()的使用 如前所述,通常你希望主线程最后结束。在前面的例子中,这点是通过在main()中调用sleep()来实现的,经过足够长时间的延迟以确保所有子线程都先于主线程结束。然而,这不是一个令人满意的解决方法,它也带来一个大问题:一个线程如何知道另一线程已经结束?幸运的是,Thread类提供了回答此问题的方法。有两种方法可以判定一个线程是否结束。第一,可以在线程中调用isAlive()。这种方法由Thr
5.创建多线程 到目前为止,我们仅用到两个线程:主线程和一个子线程。然而,你的程序可以创建所需的更多线程。例如,下面的程序创建了三个子线程:// Create multiple threads.class NewThread implements Runnable { String name; // name of thread Thread t; NewThread(Str
4.创建线程 大多数情况,通过实例化一个Thread对象来创建一个线程。Java定义了两种方式:实现Runnable 接口;可以继承Thread类。下面的两小节依次介绍了每一种方式。实现Runnable接口创建线程的最简单的方法就是创建一个实现Runnable 接口的类。Runnable抽象了一个执行代码单元。你可以通过实现Runnable接口的方法创建每一个对象的线程。为实现Run
5.创建多线程 到目前为止,我们仅用到两个线程:主线程和一个子线程。然而,你的程序可以创建所需的更多线程。例如,下面的程序创建了三个子线程:// Create multiple threads.class NewThread implements Runnable { String name; // name of thread Thread t; NewThread(Str
3.主线程 当Java程序启动时,一个线程立刻运行,该线程通常叫做程序的主线程(main thread),因为它是程序开始时就执行的。主线程的重要性体现在两方面:它是产生其他子线程的线程;通常它必须最后完成执行,因为它执行各种关闭动作。尽管主线程在程序启动时自动创建,但它可以由一个Thread对象控制。为此,你必须调用方法currentThread()获得它的一个引用,currentThrea
2.Java线程模型 Java运行系统在很多方面依赖于线程,所有的类库设计都考虑到多线程。实际上,Java使用线程来使整个环境异步。这有利于通过防止CPU循环的浪费来减少无效部分。为更好的理解多线程环境的优势可以将它与它的对照物相比较。单线程系统的处理途径是使用一种叫作轮询的事件循环方法。在该模型中,单线程控制在一无限循环中运行,轮询一个事件序列来决定下一步做什么。一旦轮询装置返回信号表明,已准备好读取网络文件
1.线程的概念 和其他多数计算机语言不同,Java内置支持多线程编程(multithreaded programming)。多线程程序包含两条或两条以上并发运行的部分。程序中每个这样的部分都叫一个线程(thread),每个线程都有独立的执行路径。因此,多线程是多任务处理的一种特殊形式。你一定知道多任务处理,因为它实际上被所有的现代操作系统所支持。然而,多任务处理有两种截然不同的类型:基于进程的和基
12.断言 断言的概念断言用于证明和测试程序的假设,比如“这里的值大于 5”。断言可以在运行时从代码中完全删除,所以对代码的运行速度没有影响。断言的使用断言有两种方法:一种是 assert> ;另一种是 assert> :>。如果布尔表达式的值为false , 将抛出AssertionError 异常; 细节描述是AssertionError异常的描述文本使用 javac –s
11.创建自己的异常子类 尽管Java的内置异常处理大多数常见错误,你也许希望建立你自己的异常类型来处理你所应用的特殊情况。这是非常简单的:只要定义Exception的一个子类就可以了(Exception当然是Throwable的一个子类)。你的子类不需要实际执行什么——它们在类型系统中的存在允许你把它们当成异常使用。Exception类自己没有定义任何方法。当然,它继承了Throwable提供的一些方法。因此,所
10.Java的内置异常 在标准包java.lang中,Java定义了若干个异常类。前面的例子曾用到其中一些。这些异常一般是标准类RuntimeException的子类。因为java.lang实际上被所有的Java程序引入,多数从RuntimeException派生的异常都自动可用。而且,它们不需要被包含在任何方法的throws列表中。Java语言中,这被叫做未经检查的异常(unchecked exceptions )
9.finally块 当异常被抛出,通常方法的执行将作一个陡峭的非线性的转向。依赖于方法是怎样编码的,异常甚至可以导致方法过早返回。这在一些方法中是一个问题。例如,如果一个方法打开一个文件项并关闭,然后退出,你不希望关闭文件的代码被异常处理机制旁路。finally关键字为处理这种意外而设计。finally创建一个代码块。该代码块在一个try/catch 块完成之后另一个try/catch出现之前执行。final
8.throws子句 如果一个方法可以导致一个异常但不处理它,它必须指定这种行为以使方法的调用者可以保护它们自己而不发生异常。做到这点你可以在方法声明中包含一个throws子句。一个 throws 子句列举了一个方法可能抛出的所有异常类型。这对于除Error或RuntimeException及它们子类以外类型的所有异常是必要的。一个方法可以抛出的所有其他类型的异常必须在throws子句中声明。如果不这样做,将会导致
7.throw:异常的抛出 到目前为止,你只是获取了被Java运行时系统抛出的异常。然而,程序可以用throw语句抛出明确的异常。Throw语句的通常形式如下: throw ThrowableInstance;这里,ThrowableInstance一定是Throwable类类型或Throwable子类类型的一个对象。简单类型,例如int或char,以及非Throwable类,例如String或Object,不
6.try语句的嵌套 Try语句可以被嵌套。也就是说,一个try语句可以在另一个try块内部。每次进入try语句,异常的前后关系都会被推入堆栈。如果一个内部的try语句不含特殊异常的catch处理程序,堆栈将弹出,下一个try语句的catch处理程序将检查是否与之匹配。这个过程将继续直到一个catch语句匹配成功,或者是直到所有的嵌套try语句被检查耗尽。如果没有catch语句匹配,Java的运行时系统将处理这个异常。
5.多重catch语句的使用 某些情况,由单个代码段可能引起多个异常。处理这种情况,你可以定义两个或更多的catch子句,每个子句捕获一种类型的异常。当异常被引发时,每一个catch子句被依次检查,第一个匹配异常类型的子句执行。当一个catch语句执行以后,其他的子句被旁路,执行从try/catch块以后的代码开始继续。下面的例子设计了两种不同的异常类型:// Demonstrate multiple catch stat
4.try和catch的使用 尽管由Java运行时系统提供的默认异常处理程序对于调试是很有用的,但通常你希望自己处理异常。这样做有两个好处。第一,它允许你修正错误。第二,它防止程序自动终止。大多数用户对于在程序终止运行和在无论何时错误发生都会打印堆栈轨迹感到很烦恼(至少可以这么说)。幸运的是,这很容易避免。为防止和处理一个运行时错误,只需要把你所要监控的代码放进一个try块就可以了。紧跟着try块的,包括一个说明你希望
3.未被捕获的异常 在你学习在程序中处理异常之前,看一看如果你不处理它们会有什么情况发生是很有好处的。下面的小程序包括一个故意导致被零除错误的表达式。class Exc0 { public static void main(String args[]) { int d = 0; int a = 42 / d; }}当Java运行时系统检查到被零除
2.异常类型 所有异常类型都是内置类Throwable的子类。因此,Throwable在异常类层次结构的顶层。紧接着Throwable下面的是两个把异常分成两个不同分支的子类。一个分支是Exception。该类用于用户程序可能捕捉的异常情况。它也是你可以用来创建你自己用户异常类型子类的类。在Exception分支中有一个重要子类RuntimeException。该类型的异常自动为你所编写的程序定义并且包
1.异常处理基础 Java异常是一个描述在代码段中发生的异常(也就是出错)情况的对象。当异常情况发生,一个代表该异常的对象被创建并且在导致该错误的方法中被抛出(throw)。该方法可以选择自己处理异常或传递该异常。两种情况下,该异常被捕获(caught)并处理。异常可能是由Java运行时系统产生,或者是由你的手工代码产生。被Java抛出的异常与违反语言规范或超出Java执行环境限制的基本错误有关。手工编码产生的异常
6.接口和抽象类的选择 由于从某种角度讲,接口是一种特殊的抽象类,它们的渊源颇深,有很大的相似之处,所以在选择使用谁的问题上很容易迷糊。我们首先分析它们具有的相同点。➢ 都代表类树形结构的抽象层。在使用引用变量时,尽量使用类结构的抽象层,使方法的定义和实现分离,这样做对于代码有松散耦合的好处。➢ 都不能被实例化。➢ 都能包含抽象方法。抽象方法用来描述系统提供哪些功能,而不必关心具体的实现。抽象类和接口的主
5.接口的使用 接口的一般使用接口的使用与类的使用有些不同。在需要使用类的地方,会直接使用new关键字来构建一个类的实例进行应用: ClassA a =new ClassA();这是正确的 但接口不可以这样用,因为接口不能直接使用 new 关键字来构建实例。 SataHdd sh = new SataHdd();这是错误的,接口在使用的时候要实例化相应的实现类。实现类的格式如下:
4.接口概念以及使用接口的原因 接口概念Java 可以创建一种称作接口(interface)的类,在这个类中,所有的成员方法都是抽象的,也就是说它们都只有定义而没有具体实现,接口是抽象方法和常量值的定义的集合。从本质上讲,接口是一种特殊的抽象类,用interface,可以指定一个类必须做什么,而不是规定它如何去做。定义接口的语法格式如下:访问修饰符 interface 接口名称 { 抽象属性集 抽象方
3.抽象类的概念和使用 什么是抽象类有时在开发中,要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该行为,而是在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。这种只给出方法定义而不具体实现的方法被称为抽象方法,抽象方法是没有方法体的,在代码的表达上就是没有“{}”。怎么表示一个方法是抽象的呢?使用 abstract 修饰符来表达抽象。abstract 修饰符可
2.内部类的分类 内部类按照使用上可以分为四种情形:类级:成员式,有 static 修饰对象级:成员式,普通,无 static 修饰本地内部类:局部式匿名级:局部式成员式内部类内部类可以作为外部类的成员,示例如下:public class Outer1 { private int size; public class Inner { public voi
1.内部类的概念和特点 什么是内部类内部类(Inner Classes)的概念是在 JDK1.1 版本中开始引入的。在 Java 中,允许在一个类(或方法、语句块)的内部定义另一个类,称为内部类,有时也称为嵌套类(Nested Classes)。内部类和外层封装它的类之间存在逻辑上的所属关系,一般只用在定义它的类或语句块之内,实现一些没有通用意义的功能逻辑,在外部引用它时必须给出完整的名称。 引入内部类的好处
11.类与类之间的关系 类与类之间最常见的关系主要有以下三种:依赖(或uses–a)聚合(或has–a)继承(或is–a)下面使用在线书店订单系统为例,来详细的讲述这三种关系的概念:这个系统的主要功能是:注册用户可以登录到网上书店并选购图书。在线填写订单,并支付购书款。书店确认已经收到购书款时,按用户留下的地址邮寄图书。可以在这个系统中建立几个类,有图书(book)、账户(account)、订单(orde
10.final关键字 在 Java 中声明类、属性和方法时,可使用关键字 final 来修饰。final 所标记的成分具有“终态”的特征,表示“最终的”意思。其具体规定如下:final 标记的类不能被继承。final 标记的方法不能被子类重写。final 标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。final 标记的成员变量必须在声明的同时赋值,如果在声明的时候没有赋值,那么只有 一次赋值的机会,
9.static关键字与静态块 一.static修饰符static 修饰符能够与属性、方法和内部类一起使用,表示是“静态”的。类中的静态变量和静态方法能够与“类名”一起使用,不需要创建一个类的对象来访问该类的静态成员。所以static修饰的变量又称作“类变量”。这与实例变量不同。实例变量总是用对象来访问,因为它们的值在对象和对象之间有所不同。下列示例展示了如何访问一个类的静态变量:class Static
8.多态对象的类型转换 在你接收父类的一个引用时,你可以通过使用 instanceof 运算符判定该对象实际上是你所要的子类,并可以用类型转换该引用的办法来恢复对象的全部功能。public void method(Employee e) { if (e instanceof Manager) { Manager m = (Manager)e; System.out.pri
加强计算机软件设计可维护性的措施探究 加强计算机软件设计可维护性的措施探究近年来,我国的忘了通信技术及计算机应用技术已经在我们的生产生活各个方面进行了广泛的应用,为我国的经济发展及生活水平的提升起到了极大的作用,随之而来的就是计算机软件的迅猛发展,由于生产模式的转变,人们工作、生活习惯的改变,各种各样的新需求,就必须要不断的创新,以顺应目前的计算机软件不断变化的需要。在这种情况背景下,计算机软件的分析师及设计师要采用一些高效的
基于因特网的大型Intranet广域网构建 基于因特网的大型Intranet广域网构建1引言 随着因特网的高速发展和公司及各大型组织规模的不断壮大,传统的公司间的数据传输模式已远不能满足公司及组织发展的需要。在公司及其各分部之间建立一条跨越地区乃至国家的网络线路就成了各大型公司及组织的当务之急。而在网络线路的设计过程中伴随而来的是组织内部间的数据安全性及传输可靠性的问题。本文通过实际案例说明了组织内部的通信网络的设计方案。In
7.instanceof 运算符 多态性带来了一个问题 :如何判断一个变量所实际引用的对象的类型 。 C++使用runtime-type information(RTTI),Java 使用 instanceof 操作符。instanceof 运算符功能:用来判断某个实例变量是否属于某种类的类型。一旦确定了变量所引用的对象的类型后,可以将对象恢复给对应的子类变量,以获取对象的完整功能。 示例如下: publ
6.多态的概念 什么是多态多态是同一个行为具有多个不同表现形式或形态的能力。比如我们说“宠物”这个对象,它就有很多不同的表达或实现,比如有小猫、小狗、蜥蜴等等。那么我到宠物店说“请给我一只宠物”,服务员给我小猫、小狗或者蜥蜴都可以,我们就说“宠物”这个对象就具备多态性。再回想一下经理和职员的关系,经理类具有父类职员类的所有属性、成员和方法。这就是说,任何在Employee上的合法操作在Mana
5.方法的覆盖和重载 方法的覆盖什么是方法的覆盖(Overridden Methods)在类继承中,子类可以修改从父类继承来的行为,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的:名称、返回类型、参数列表。如果在新类中定义一个方法,其名称、返回类型及参数表正好与父类中方法的名称、返回类型及参数相匹配,那么,新方法被称做覆盖旧方法。示例:如下在 Employee 和 Manager 类
4.super关键字 关键字 super 可被用来引用该类的父类,它被用来引用父类的成员变量或方法。父类行为被调用,就好象该行为是本类的行为一样,而且调用行为不必发生在父类中,它能自动向上层类追溯。super 关键字的功能:点取父类中被子类隐藏了的数据成员。点取已经覆盖了的方法。作为方法名表示父类构造方法。点取父类中被子类隐藏了的数据成员或方法public class Employee {
3.父类与子类的初始化顺序 在 Java 编程语言中,对象的初始化是非常结构化的,这样做是为了保证安全。在前面的模块中,看到了当一个特定对象被创建时发生了什么。由于继承性,对象被完成,而且下述行为按顺序发生:存储空间被分配并初始化到 0 值进行显式初始化调用构造方法层次中的每个类都会发生最后两个步骤,是从最上层开始。Java 技术安全模式要求在子类执行任何东西之前,描述父类的一个对象的各个方面都必须初始化。因
2.继承的概念与实现 提示,类与类之间最常见的关系主要有三种:依赖(uses–a)、聚合(has–a)、继承(is–a)。详情请查看:Java类与类之间的关系。在面向对象世界里面,常常要创建某对象(如:一个职员对象),然后需要一个该基本对象的更专业化的版本,比如,可能需要一个经理的对象。显然经理实际上是一个职员,经理和职员具有 is-a 的关系,经理只是一个带有附加特征的职员。因此,需要有一种办法从现有对象
1.封装 封装这个词听起来好象是将什么东西包裹起来不要别人看见一样,就好象是把东西装进箱子里面,这样别人就不知道箱子里面装的是什么东西了。其实 JAVA 中的封装这个概念也就和这个是差不多的意思。封装是 JAVA 面向对象的特点的表现,封装是一种信息隐蔽技术。它有两个含义:即把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位;以及尽可能隐藏对象的内部结构。也就是说,如果我们使用了封装技
10.包装类 虽然 Java 语言是典型的面向对象编程语言,但其中的 8 种基本数据类型并不支持面向对象的编程机制,基本类型的数据不具备“对象”的特性----不携带属性、没有方法可调用。 沿用它们只是为了迎合人类根深蒂固的习惯,并的确能简单、有效地进行常规数据处理。这种借助于非面向对象技术的做法有时也会带来不便,比如引用类型数据均继承了 Object类的特性,要转换为 String 类型(经常有这种需要
9.方法重载 在 Java 中,同一个类中的 2 个或 2 个以上的方法可以有同一个名字,只要它们的参数声明不同即可,这种方法就被称为重载(overloaded),此过程称为方法重载( method overloading)。下面看一个详细的实例。class overload{ ///一个普通的方法,不带参数 void test(){ System.out.pr
8.this关键字 关键字 this 是用来指向当前对象或类实例的,可以用来点取成员。this.day 指的是调用当前对象的 day 字段,示例如下:public class MyDate { private int day, month, year; public void tomorrow() { this.day = this.day + 1;
7.构造方法和析构方法 Java构造方法类有一个特殊的成员方法叫作构造方法,它的作用是创建对象并初始化成员变量。在创建对象时,会自动调用类的构造方法。构造方法定义规则:Java 中的构造方法必须与该类具有相同的名字,并且没有方法的返回类型(包括没有void)。另外,构造方法一般都应用 public 类型来说明,这样才能在程序任意的位置创建类的实例--对象。示例:下面是一个 Rectangle 类的构造
6.再谈变量的作用范围 前面的章节,在讲变量的时候,曾经提到过变量的作用范围(作用域)(请查看:http://www.weixueyuan.net/view/5951.html),但是由于我们的准备知识不够充分,仅仅对全局变量和局部变量进行了说明,在学习了类和对象以后,我们有必要进一步了解变量的作用范围。Java 变量的作用范围有四个级别:类级、对象实例级、方法级、块级。类级变量又称全局级变量,在对象产生
5.类的基本运行顺序 作为程序员,应该对自己写的程序具备充分的掌控能力,应该清楚程序的基本运行过程,否则糊里糊涂的,不利于对程序的理解和控制,也不利于技术上的发展。 我们以下面的类来说明一个基本的 Java 类的运行顺序:1. public class Test {2. private String name;3. private int age;4.5. public
4.成员变量和成员方法 成员变量成员变量是指类的一些属性定义,标志类的静态特征,它的基本格式如下: 访问修饰符 修饰符 类型 属性名称=初始值;访问修饰符:可以使用四种不同的访问修饰符中的一种,包括public(公共的)、protected(受保护的),无修饰符和 private(私有的)。public 访问修饰符表示属性可以从任何其它代码调用。private 表示属性只可以由该类中的其它方法来
3.包的概念 包”机制是 Java 中特有的,也是 Java 中最基础的知识之一。一些初学 Java 的朋友,通常像学其他语言一样从教材上“copy”一些程序来运行,可是却常常遇到莫名其妙的错误提示,这些问题事实上都是对“包”的原理不理解。本节将就此问题进行深入阐述。什么是 Java 中的包在 Java 程序语言中,为了开发方便,会将多个功能相似的类放到一个组内,而这个组就是“包”,包就像一个目录结
2.访问控制符 在 Java 程序设计中,有一个很重要的知识点,就是访问控制符。不要看它的内容简单,但其重要性决定了程序可运行性。一.什么是访问控制符访问控制符在 Java 程序语言中,有着举足轻重的作用。那什么是访问控制符呢?所谓的访问控制符就是能够在控制访问权限的关键字。在 Java 程序语言中的访问控制符有好几种,但是它又被分为不同的类别,具体的划分情况如下:(1)出现在类之前的访问控制符:
1.类的定义与实例化(创建对象) 本节着重讲解Java语法,不再对类和对象的概念进行深入阐述,如果你不了解类与对象的基本概念,请查看这里:类与对象的基本概念、面向对象编程(OOP)的概念。Java类的定义在Java中,类的定义语法为:[public][abstract|final] class className [extends superclassName] [implements interfaceNameL
9.Java字符串概述 字符串从表面上看,就是引号之间的数据,如“www.weixueyuan.net”、“微学苑”、“c++入门教程”等。在Java中,字符串处理类库使用最多的是两种:“String”类和“StringBuffer”类。注意:如果是处理一些小的文本,建议使用“String”类,它会特别方便。如果使用 String 类来处理大型文本,会很消耗系统资源,所以 Java 程序语言特别引进了“Strin
8.二维数组的声明和初始化 二维数组的声明、初始化和引用与一维数组相似,这里不再详讲。二维数组的定义 type arrayName[ ][ ]; type [ ][ ]arrayName;只是形式上的差别,大家可以根据自己的习惯来选择。二维数组的初始化1.静态初始化 int intArray[ ][ ]={{1,2},{2,3},{3,4,5}};Java语言中,由于把二维数
7.一维数组的声明和初始化 一维数组的声明使用一个数据时,必须要对其进行声明,这个道理对于数组来说也一样,数组在使用之前也必须先声明。先看下面的代码,是如何声明一个变量的。 int a;仔细分析一下:int 是指变量的数据类型,a 是指变量名,由变量的声明可以联系到数组的声明。 int a[];仔细分析一下:int 是指数组中所有数据的数据类型,也可以说是这个数组的数据类型,a[]表示数组名。
6.强调一下编程风格 讲完了Java的流程控制,大家就可以编写简单的程序代码了,但是,有一点必须强调,那就是编程风格的问题,虽然其不影响程序代码段的运行,但对于程序的可读性起着重要的作用。自己编出的程序要让别人看懂,首先在排版方面要非常注意,下面将探讨编程风格的问题。其实每个人的编程风格、每个软件开发公司的编程风格都不一样。一个人编写的程序代码,就应该能让别人看懂,甚至是过了很长时间,自己也要看的懂,否则这个程
5.返回语句-return 返回语句就是在执行程序的过程中,跳转到另一个程序。一般返回语句用在子程序或程序中的函数方法中。返回语句使用关键字“return”来表示。下面通过一个简单实例,了解返回语句的用法。public void set(int a,int b){ i=a*b return;}以上是一个小程序段,在程序中出现了 return 关键字,说明这个小程序结束了,返回到主运行程序中
4.开关语句-switch 在条件判断语句(if语句)过多时,可以使用开关语句来编写。开关语句的基本结构是:switch(整数){ case 整数值 1: 语句; break; case 整数值 2: 语句; break; case 整数值 3: 语句; break; …………………….. default: 语句;}当“整数”的值等于“整数值1”、“整数值2”
2.循环结构-for和while语句 Java程序设计中引入了循环语句。循环语句总共有三种常见的形式:for 语句、while 语句、do/while语句。下面将逐个进行详细的介绍。一.for 语句for 语句的基本结构如下所示:for(初始化表达式;判断表达式;递增(递减)表达式){ 执行语句; //一段代码}初始化表达式:初始化表达式的意义,在于定义循环之前变量的值是多少,如果没有这一
3.跳出循环-break和continue 在实际编程中,有时需要在条件语句匹配的时候跳出循环。在Java里,由break和continue语句控制。“break”语句“break”语句用来结束循环,即不再执行后边的所有循环。示例:计算1+2+3+4......+100的结果。public class example1{ public static void main(String[] args){
1.分支结构-if语句 在Java程序设计中,分支结构由条件语句(if语句)来完成。if语句既可以单独使用,也可以与else一起使用。以下是使用方法:if语句单独使用if(条件表达式){ 目的; //这里是一段代码}与else一起使用if(条件表达式){ 目的一; //这里是一段代码}else{ 目的二; 这里是一段代码}注意:条件表达
10.运算符的优先级 当多个运算符出现在一个表达式中,谁先谁后呢?这就涉及到运算符的优先级别的问题。在一个多运算符的表达式中,运算符优先级不同会导致最后得出的结果差别甚大,例如,(1+3)+(3+2)*2,这个表达式如果按加号最优先计算,答案就是 18,如果按照乘号最优先,答案则是 14。下面将详细介绍在 Java 程序设计中,各个运算符的优先级别,如表 3-1 所示。如表 3-1 运算符优先级表
交换机端口隔离技术的应用 实际案例分析某公司,由于业务要求,为了保障服务器高可用性,对服务器实现了NLB群集技术。万事有利就有弊,由于NLB群集在实际环境中一般采用多播技术,交 换机同一出口下的节点均为收到大量广播,一些网络延时要求较小(如做网络电话、短信群发业务)的用户网络性能将会受到很大影响。面对这种情况我们首先想到的是子网划分或者是划为VLAN,划分子网后问题依然存在,这个时候一般只能考虑划分VLAN
9.数据类型转换 数据类型的转换,分为自动转换和强制转换。自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换;强制类型转换则必须在代码中声明,转换顺序不受限制。一.自动类型转换自动转换按从低到高的顺序转换。不同类型数据间的优先关系如下: 低------------------------------------------->高
8.三目运算符和逗号运算符 一.三目运算符三元运算符一般用的很少,因为它在程序段中的可读性很差,所以笔者建议不要经常使用三元运算符,但很少使用并不代表不使用,所以还是要掌握好它的用法,三元运算符的表达形式如下: 布尔表达式?值 0 :值 1它的运算过程是:如果布尔表达式的结果是 true,就返回值 0,如果布尔表达式的结果是 false,就返回值 1,例如下面的程序段。public class da
7.移位运算符和赋值运算符 一.移位运算符移位运算符也针对二进制的“位”,它主要包括:左移位运算符(>>)、带符号的右移位运算符(>>)。其中:左移运算符用“右移运算符用符号“>>>”表示,是将运算符左边的对象向右移动运算符右边指定的位数,并且在高位补 0,其实右移 n 位,就相当于除上 2 的 n 次方。带符号的右移运算符用符号“>>”表示,是将运算符左边的运算对象,向右移动运算符右边指定的位数。如果是正数,在
6.逻辑运算符和位运算符 一.逻辑运算符逻辑运算符共有三种,即“非”、“和”、“或”,分别用 " ! "、“&&”、“||”表示。其中:非运算(!)表示否定,如:!true等于false、!false等于true、!2等于false、!0等于true。和运算(&&)前后两个条件都为真时,才返回true,否则返回false。或运算(||)前后两个条件有一个为真是,返回true,都为假时,返回false。
Java算术运算符和关系运算符详解 运算符就是在用变量或常量进行运算时,经常需要用到的符号,目前常用的总共有十种:算术运算符、关系运算符、逻辑运算符、位运算符、移位运算符、赋值运算符、三元运算符、逗号运算符、字符串运算符、转型运算符。下面将会对每种运算符结合实例作详细的讲述。一.算术运算符算术运算符总共有 7 种:“+”、“ - ”、“*”、“/”、“%”(余数)、“++”(自加)、“――”(自减)。运算符的精度
Java常量的申明和使用 一.Java变量的声明在 Java 程序设计中,每个声明的变量都必须分配一个类型。声明一个变量时,应该先声明变量的类型,随后再声明变量的名字。下面演示了变量的声明方式。 double salary; int age; Boolean op;其中第一项称为变量类型,第二项称为变量名。分号是必须的,这是 Java 语句的结束符号。同一类型的不同变量,可以声
100G光纤网络革命:纠错编码技术 基于数字相干接收PM-QPSK调制的100G光传输技术在长距离光传输技术史上具有里程碑意义。在调制、检测、均衡以及复用技术无法满足系统传输性能要求的情况下,可采用纠错编码技术进一步改善系统性能。要在现有线路上达到目前10G OOK的传输误码率性能,100G收发机至少需要提高10dB 增益,而相干检测PM-QPSK调制结合目前的电均衡补偿技术最多能提供7dB增益,额外3dB增益需借助FEC提供。这要
锁定四种方法进行两台笔记本无线连接 很多朋友都会咨询如何让两台笔记本无线连接呢?为此,小编特地总结了几个前人的方法,在此罗列出来,看看哪一种适合您所使用呢?以为内每一种都有自己的硬件特点,所以在配置中也有所不同,还希望大家能仔细浏览? (一) 双机无线对联,也就是所谓的HOC方式?XPSp2对无线这块的设置包括界面有了比较大的改变,虽然不难尝试,但是还有几个要点,需要掌握? 我的环境是T42p做主,配I
网络新技术是2012年的焦点 【IT168 评论】IT架构转变促使2012年出现全新的网络技术。事实上,基础路由与交换技术的读者仅仅只占SearchNetworking读者的少数。同时,关于软件定义网络和支持BYOD的无线LAN最吸引读者。在本文中,我们将按读者阅读数量介绍2012年的十大网络热点。 网络供应商裁员:思科与瞻博 顶级网络供应商裁员仍然占据今年的新闻头条。在2011年裁员10,000名员工之后
博科助力Megaport推出100 GBPS网络服务 【IT168 资讯】2013年10月16日,Megaport是澳大利亚电信市场的新进公司,其目标是采用Brocade MLXe核心路由器成为亚太区领先的网络互联运营商。博科合作伙伴ASI Solutions为Megaport实施的网络平台是博科首次在该地区提供100 Gbps网络服务。该解决方案基于博科100 GbE网络产品,提供基于大规模路由容量的经济的解决方案。Megaport坚信该解决方
Java变量的声明、初始化和作用域 一.Java变量的声明在 Java 程序设计中,每个声明的变量都必须分配一个类型。声明一个变量时,应该先声明变量的类型,随后再声明变量的名字。下面演示了变量的声明方式。 double salary; int age; Boolean op;其中第一项称为变量类型,第二项称为变量名。分号是必须的,这是 Java 语句的结束符号。同一类型的不同变量,可以声
Java数据类型详解 Java 语言是一个“强类型”的语言,在声明任何变量时,必须将该变量定义为一种数据类型。Java中的数据类型包括:基本数据类型和对象类型。对象类型不属于本章所讲述的内容,本节主要介绍数据的基本类型。Java 程序中,总共有 8 大基本类型,其中 4 种整型、1 种字符型、2 种浮点型、1 种布尔型,除了这几种基本类型外,其他都属于对象类型的数据。一.整型整型就是整数类型,也就是没有