`
hanlingbo2008
  • 浏览: 80189 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
转自:http://www.blogjava.net/cherishchen/archive/2007/07/10/129313.html     所有类的根接口:InputStream/OutputStream 一、底层的还是装饰的 1、底层的直接与文件系统或者硬件打交道的类(充当数据源的类): 包括InputStream和OutPutStream两大类,分别用于输入和输出,数据源可以是bytes array,String对象,file文件,stream序列等: FileInputStream/FileOutputStream ByteArrayInputStream/ByteArr ...

java.io包学习

1.  java.io 包中定义了多个流类型来实现输入和输出功能;     从不同的角度对其进行分类: 按数据流的方向可以分为输入流和输出流 按处理数据单位的不同可以分为字节流和字符流 按功能的不同可以分为节点流和处理流     节点流:直接从一个数据源读写数据;     处理流:连接在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更强大的读写功能;   2. java所提供的流类型位于包java.io 内都分别继承自以下四种抽象流类型     InputStream, OutputStream(字节流), Reader,Writer(字符流).  这四个类全是抽象的。
装饰模式(Decorator)使用原来被装饰的类的一个子类的实例,把客户端的调用委派到被装饰的类。装饰模式的关键在于这种扩展是透明的。   装饰模式(Decorator)的角色: 抽象构件(Component)角色:给出一个抽象接口,以规范准备接受附加责任的对象。 具体构件(Concrete Component)角色:定义一个附加责任类。 装饰(Decorator)角色:持有一个构件对象的实例。并定义一个与抽象构件一样的的接口 具体装饰(Concrete Decorator)角色:负责给构件对象贴上附加责任。 在什么情况使用装饰模式? 需要扩展一个类的功能,或给一个类增加附加责任。 需要动 ...
安全合成模式代码: public interface Component { Composite getComposite(); void sampleOperation(); }   public class Leaf implements Component { public Composite getComposite(){ // Write your code here return null; } public void sampleOperation(){ // Write your code ...
合成模式(composite)把部分和整体的关系用树结构表示出来。合成模式使的客户端把一个个单独的成分对象和由他们复合而成的合成对象等同看待。   合成模式(composite)的角色: 抽象构件(Component)角色:这是一个抽象角色,它给参加组合的对象规定一个接口,这个角色给出共有的接口及其默认行为 树叶构件(Leaf)角色:代表参加组合的树叶对象,树叶没有下级子对象 树枝(Composite)角色:代表参加组合的有子对象的对象,并给出树枝构件对象的行为。 合成模式分安全合成模式和透明合成模式。   透明合成模式: 在Component对象里面声明所有的用来管理子类对象的方法,包括a ...
Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。 1、整数:包括int,short,byte,long 2、浮点型:float,double 3、字符:char 4、布尔:boolean 基本型别 大小 最小值 最大值 boolean ----- ----- ------ char 16-bit Unicode 0 Unicode 2^16-1 byte 8-bit -128 +127 short 16-bit -2^15 +2^15-1 int 32-bit -2^31 +2^31-1 long 64-bit ...
1. 复合赋值操作符要求两个操作数都是原生类型的。例如,Integer等 2. 复合表达式有一个例外,如果左面是String类型,那么右边操作数是任意类型。 3. 简单赋值操作符允许左侧是对象引用类型,这就更宽松了,只要表达式左侧和右侧的变量是赋值兼容的即可。   代码: public class BaLiang { /** * 八两 */ public static void main(String[] args) { Object x = "buy"; String i = "Effective java"; x = x + i ...
简单赋值操作符 = 复合赋值操作符 += , -=, *= ,/= , %= ,<<=,>>=,>>>=, &=,等   1. 复合赋值表达式自动将所执行计算的结果转型为其左侧变量类型。复合表达式会悄悄产生一个转型。 2. 不要将复合赋值操作符作用与byte,short,char类型变量。同样int型数的右边要确保不是long、float、double类型   代码: public class Banjin { /** * 半斤 */ public static void main(String[] args) { short ...
1. 如果最初的数值类型是有符号的,那么执行符号扩展;如果它是char,那么不管被转换为什么类型都执行零扩展。 2. 如果你通过观察不能确定程序将要做什么,那么它做的就很有可能不是你想要的。   代码: public class Multicast { /** * 多重转型 */ public static void main(String[] args) { System.out.println((int)(char)(byte)-1); } }   结果:65535   转型问题还不是很清楚!
1. 要避免使用l(小写字母l)作为变量名,因为,l 和1容易混淆。 2. 在long型字面常量中,一定要大写L,千万不要用小写。   代码: public class Elementary { /** * 初级问题 */ public static void main(String[] args) { System.out.println(12345+5432l); } }   结果: 17777,
1. 当你的操作数是很大的数字时,千万要提防溢出,这是个缄默的杀手。 2. 可以用更大范围的long类型。   代码 public class LongDivision { /** * 长整除 */ public static void main(String[] args) { final long MICRO_PER_DAY = 24*60*60*1000*1000; final long MILLS_PER_DAY = 24*60*60*1000; System.out.println(MICRO_PER_DAY/MILLS_PER_DAY); } }   输出 ...
1. 二进制浮点对于货币计算非常不合适。 2. 在需要精确答案的地方,要避免使用float和double;对于货币计算,要使用int,lang,BigDecimal。   代码: public class Change { /** * 找零时刻 */ public static void main(String[] args) { System.out.println(2.00-1.10); } }   输出:0.8999999999999999  问题在于:1.10这个数字不能被精确表示为一个double,只能被表示为最 接近他的double值。浮点运算在一个范围很广的值 ...
1. 当取余操作返回一个非零结果时它与左操作数具有相同的正负号。 2. 要测试你的方法在为每个数值型参数传递负数,零和正数时,其行为是否正确。   代码: public class Odd { /** * 奇数性 */ public static void main(String[] args) { System.out.println(Odd.isOdd(-11)); } private static boolean isOdd(int i){ return i%2==1; } }   当 i 为负数时, 判断失效。
1. 混合类型计算会引起混乱,在条件表达式中更为明显 2. 最好在条件表达式中使用相同类型的第二和第三操作数   确定条件表达式结果类型的规则: 如果第二和第三操作数具有相同的类型,那么它就是条件表达式类型。 如果第一个操作数类型是T,T表示byte,short,char,而另一个操作数是一个int常量表达式,那么条件表达式的类型就是T 否则,将对操作数类型进行二进制提升,条件表达式就是第二个和第三个操作数被提升之后的类型 代码如下: public class DosEquis { /** * Dos Equis * */ public static void mai ...
命令模式(Command)例子2增加宏命令   为julia的录音机增加一个记忆功能,可以把命令记录下来,在任何需要时重新把这些记录下来的命令一次性执行,这就所谓的宏命令。这时,julia的录音机就多了一个新按钮用于执行宏命令。   增加宏命令后的代码如下: /** 在Julia中加入的宏命令代码*/ public static void test2() { Command play = new PlayCommand(myAudio); Command stop = new StopCommand(myAudio); Command r ...
Global site tag (gtag.js) - Google Analytics