java语言和www技术-专题讨论作业
- 格式:doc
- 大小:69.00 KB
- 文档页数:7
第1,2章面向对象软件开发概述一、要点解析1.教学内容面向对象问题求解的提出;面向对象问题求解的概述;对象、类与实体;对象的属性与相互关系;面向对象的软件开发过程;面向对象程序设计方法的优点。
2.教学要求本章作为了解内容,要求学生通过文字教材、网络课件/zy/java-new/index.htm自学。
二、典型例题1: import java.io.*;2: public class MyJavaApplication3: {4: public static void main(string args [ ])5: {6: System.Out.println(“Hello,java World!”);7: }8: }以下从程序编辑、编译、解释执行三个方面来分析这个Java Application程序。
1.源程序的编辑⑴程序每行语句前面的行号是为了便于分析程序而附加的。
⑵程序第1行语句的关键字import 是用来加载系统已经定义好的类或包,以能够在本程序运行中使用所需要的系统类或包。
它的作用类似于C++语言程序中以#号打头的包含命令#include 。
Java .io.* 是表示把系统的Java .io包中的所有类都引入到当前程。
包的说明系统的类库是Java语言的重要组成部分,Java语言由语法规则和系统类库两部分组成,语法规则规定Java程序的书写规范;系统类库是由Java软件开发人员或软件供应商事先编写好的若干具有一定功能的Java程序模块,并根据它们功能的不同组成不同的集合,每个集合称为一个包,合称“类库”。
系统“类库”的提供为程序设计人员的编程带来极大的方便,只需用关键字import便可把需要的类或包引入当前程序。
⑶程序第2行中的关键字class 说明程序中首先定义了一个名称为MyJavaApplication 的类,该行语句称为这个类的类头。
⑷程序的第3行语句到第8行语句用两个大括号“{ }” 括起来的部分称为这个类的类体部分。
《Java语言与WWW技术》形成性考核第四次作业一、选择题1、以下关于线程和进程的描述中,错误的是()。
A. 进程是操作系统中正在运行的程序的实例,线程是进程中一个执行序列B. 进程分享系统CPU的时间单元,线程分享进程的时间单元C. 进程拥有自己独立的数据空间和系统资源,线程则是多个线程共享某个进程中的数据空间和系统资源D.线程和进程是程序在计算机上运行的两种不同的形式2、以下()不属于线程的状态。
A. 初始态B.运行C.中断D.死亡3、Thread类的()方法实现线程的暂时停止操作。
A.destroy ( )B.stop ( )C.sleep ( )D.suspend ( )4、运行下列程序,会产生()结果。
public class X extends Thread implements Runable{public void run ( ){System.out.println(“this is run ( )”);}public static void main (String args [ ] ){Thread t = new Thread ( new X( ));t.start ( );}}A.第一行会产生编译错误B.第三行会产生编译错误C.第十行会产生运行错误D、程序会运行和启动5、创建一个File类对象的构造方法不正确的是()A、File( Srting filename);B、File(Srting directorPath , Srting filename);C、File( File f , Srting filename);D、File( Srting filename,int Filesize );二、填空题1. 一个线程执行完run()方法后,进入运行状态。
2、在线程没有结束run()方法之前,再让线程调用start()方法,系统将发生__异常______3、创建线程的方法有:定义Thread类的子类和使用Runnable接口4、Java中的流中分别由四个抽象类来表示:InputStream,OutputStream,Reader,Writer。
《JA V A语言与WWW技术》形考作业参考答案注:本答案仅供参考,如有错误敬请指正作业一一、选择题1、D2、B3、B4、B5、C6、B7、D8、A9、D 10、D11、C 12、B 13、A 14、D 15、B16、A 17、ABE 18、CDE 19、D 20、B二、简答题1、JA V A是由SUN Microsystem公司推出的。
其特点如下:A、语法简单,功能强大B、分布式与安全性C、与平台无关D、解释运行,高效率E、多线程,可并行执行F、动态执行G、丰富的API文档和类库2、JA V A虚拟机即JVM:是在一台真正的机器上用软件方式实现的一台假想机,是编译后的JA V A程序和硬件系统之间的接口,可以将其看作一个虚拟的处理器,编译后的JA V A程序由JVM解释执行,而不是由CPU。
JVM的具体实现包括:指令集、寄存器组、类文件格式、栈、垃圾收集堆、内存区等几部分。
3、JVM是运行JA V A程序必不可少的机制,编译后的JA V A程序指令并不直接在硬件系统的CPU上执行,而是由JVM执行,JVM是编译后的JA V A程序和硬件系统之间的接口,程序员可把JVM看作一个虚拟的处理器,它不仅解释执行编译后的JA V A指令,而且还进行安全检查,它是JA V A程序能在多平台之间进行无缝移植的可靠保证,也是JA V A程序的安全检查引擎,JVM使用的代码是存在编译生成的.class文件中。
4、(略)5、(略)6、抽象:是指通过抽取具体事物的本质特征来描述事物的一种思想封装:是将数据及对数据类型的操作捆绑在一起成为类,形成一个不可分割的整体,并尽可能对外隐藏它的细节,只呈现少量接口的技术。
继承:是指在一个类中将另一个已有类中的数据和方法保留供自己用,再加上自己特殊的数据和方法而形成一个新类的技术。
多态:是指在一个类或多个类中让多个方法使用同一名字的技术,如方法的重载和覆盖等。
7、面向对象的程序设计方法:把问题看成是相互作用的事物集合,用属性来描述事物,把它的操作定义为方法,其中把事物称为对象,把属性称为数据,对象就是数据加方法。
《Java语言和WWW技术》课程实验报告四姓名:学号:实验题1-1[实验要求]•在选择“兴趣爱好”的窗体中,有旅游、运动、阅读等选项,编写小程序,完成兴趣爱好的选择,并输出到文本框中。
•记录调试过程、步骤、程序和运行结果。
[实验程序]import java.awt.*;import java.awt.event.*;class Test3 extends WindowAdapter implements ItemListener{ Frame f;Panel p;Checkbox c1,c2,c3;TextField tf;public void go(){f=new Frame("Test3-3");p=new Panel();c1=new Checkbox("旅游");c2=new Checkbox("运动");c3=new Checkbox("阅读");c1.addItemListener(this);c2.addItemListener(this);c3.addItemListener(this);p.add(c1); p.add(c2);p.add(c3); f.add(p,"Center");tf=new TextField();f.add(tf,"South");f.addWindowListener(this);MenuBar mb = new MenuBar();f.setMenuBar(mb);Menu m1 = new Menu("File");Menu m2 = new Menu("Edit");Menu m3 = new Menu("Help");mb.add(m1); mb.add(m2); mb.add(m3);Menu m4 = new Menu("Open");MenuItem mi1 = new MenuItem("New");MenuItem mi2 = new MenuItem("Save");CheckboxMenuItem mi3 = new CheckboxMenuItem("Show");MenuItem mi4 = new MenuItem("Quit");m1.add(m4);m1.add(mi1);m1.add(mi2);m1.add(mi3);m1.addSeparator();m1.add(mi4);MenuItem mi41 = new MenuItem("Open word");MenuItem mi42 = new MenuItem("Open excel");m4.add(mi41);m4.add(mi42);f.setSize(300,400);f.setVisible(true);}public static void main(String args[]){Test3 t=new Test3();t.go();}public void itemStateChanged(ItemEvent e){String st="you selected : ";if(c1.getState()==true){st=st + c1.getLabel() +" ";}if(c2.getState()==true){st=st + c2.getLabel() +" ";}if(c3.getState()==true){st=st + c3.getLabel() +" ";}tf.setText(st);}public void windowClosing(WindowEvent e){System.exit(0);}}[运行结果]实验题1-2[实验要求]•在实验1-1程序上添加菜单,如下图所示•调试并记录结果[实验程序]import java.awt.*;import java.awt.event.*;public class Test4_1 extends WindowAdapter implements ItemListener{ private Frame f;private Checkbox c1,c2,c3;private Panel p;private TextField tf;private MenuBar mb;private Menu mfile,mselect,mhelp;private MenuItem mf1,mf2,mf3,mf4,mf5;private CheckboxMenuItem ms1,ms2,ms3;public Test4_1() {f = new Frame("兴趣爱好窗口");c1 = new Checkbox("旅游");c2 = new Checkbox("运动");c3 = new Checkbox("阅读");p = new Panel();tf = new TextField(20);mb = new MenuBar();mfile = new Menu("File");mselect = new Menu("Select");mhelp = new Menu("Help");mf1 = new MenuItem("Open");mf2 = new MenuItem("New");mf3 = new MenuItem("Save");mf4 = new MenuItem("Show");mf5 = new MenuItem("Quit");ms1 = new CheckboxMenuItem("旅游");ms2 = new CheckboxMenuItem("运动");ms3 = new CheckboxMenuItem("阅读");}public void lanchFrame(){f.setMenuBar(mb);mb.add(mfile); mb.add(mselect); mb.add(mhelp);mfile.add(mf1); mfile.add(mf2); mfile.add(mf3); mfile.add(mf4);mfile.addSeparator(); mfile.add(mf5);mselect.add(ms1); mselect.add(ms2); mselect.add(ms3);f.add(tf,BorderLayout.SOUTH);p.add(c1); p.add(c2); p.add(c3);f.add(p,BorderLayout.CENTER);f.addWindowListener(this);c1.addItemListener(this);c2.addItemListener(this);c3.addItemListener(this);ms1.addItemListener(this);f.setSize(300,200);f.setVisible(true);}public void windowClosing(WindowEvent e){System.exit(0);}public void itemStateChanged(ItemEvent e){String st = "您选择的兴趣爱好是:";if (c1.getState()==true || ms1.getState()==true){st = st +c1.getLabel() + " ";c1.setState(true);ms1.setState(true);}if (c2.getState()==true){st = st +c2.getLabel() + " ";}if (c3.getState()==true){st = st +c3.getLabel() + " ";}if (c1.getState()==false &&c2.getState()==false&&c3.getState()==false){ st = "";}tf.setText(st);}public static void main(String[] args) {Test4_1 t = new Test4_1();nchFrame();}}[运行结果]实验题2[实验要求]•运行弹出式菜单程序,调试并记录结果。
《Java语言与WWW技术》形成性考核第二次作业一、选择题1、下列( )说法是错误的。
AJava语言只允许单一继承 B.Java语言允许实现多个接口C.Java语言不允许同时继承一个类并实现一个接口D.Java语言的单一继承使得代码更加可靠2、下述()说法是正确的。
A、实例变量是类的成员变量E、实例变量是用static关键字声明的C、方法变量在方法执行时创建D、方法变量在使用之前可以不用初始化3、为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB作为前缀就可以调用它,该方法头的形式为( )。
A.static void metliod ()B.public void method ()C.filial void metliod QD.abstract void metliod ()4、下列关于修饰符混用的说法,错误的是( )。
A.abstract不能与filial并列修饰同一个类B.abstiact类中不可以W private的成员C.abstiact方法必须在abstract类中D.static方法中能处理非static的属性5、接口的实现所用的关键字是()。
A. interfaceB.unplementsC.extendsD.tluows6、卞面的类定义中,()成员变量或者成员方法是可以被同一包内的其他非子类所引用的。
package oig;public class myClass {private mt x;private double v;public boolean var;private mt getX(){}protected double getY() {}public boolean getVai* (){}}A. x,y B vai\ getVai() C・ getX () D. getY()7、.以下的类(接口)定义中正确的是( )。
A-public class a {private iiit x;public getX(){return x;}E・public abstract class a {private iiit x;public abstract int getX();public iiit aMethod() {return 0;}}c.public class a {private iiit x;public abstract int getX();}D・public interface iiiterfaceA {private iiit x;public iiit getX (){return x;}}8、已知A类被打包在packageA, E类被打包在packageB,且E类被声明为public,且有一个成员变量x被声明为protected控制方式,C类也位于packageA包,且继承了E类,则以下说法中正确的是( )。
《Java语言与WWW技术》形成性考核第三次作业一、选择题1、创建一个标识有”关闭”按扭的语句是()。
A.TextField b = new TextField(“关闭”);B.Label b = new Label(“关闭”);C.Checkbox b = new Button(“关闭”);D.Button b = new Button(”关闭”);2、在Java中,开发图形用户界面的程序需要使用一个系统提供的类库,这个类库就是()包A.java.io B. java.awt C.java.applet D. java.awt.event3.在Java图形用户界面编程中,若显示一些不需要修改的文本信息,一般是使用()类的对象来实现。
A. LabelB.ButtonC. TextAreaD. TextField4.在编写Java Applet程序时,若需要对发生的事件作出响应和处理,一般需要在程序的开头写上()语句。
A.import java.awt.*;B.import java.applet.*;C.import java.io.*;D. import java.awt.event.*;5、AWT库中最基础的类是()。
A. ponentB. ng.ObjectC. java.awt.ContainerD. java.awt.Panel6.在Applet中,创建一个具有10行45列的多行文本区域对象ta的语句为:()A、TextEvent ta = new TextEvent(10 , 45 );B、TextArea ta = new TextArea( 10 , 45 );C、Lable ta =new Lable ( 10 , 45 );D、TextField ta = new TextField ( 10 , 45 )7、以下代码完成画线功能,所画线的颜色是()。
1.g.setColor(Color.red.green.yello.cyan);2.g.drawLine(0,0,100,100);A.redB.greenC.yelloD.cyan8、以下()可能包含菜单条。
JA V A语言与WWW技术练习与解答1-1简述面向过程问题求解和面向对象问题求解的异同。
试列举出面向对象和面向过程的编程语言各两种。
答:面向过程的程序遵循面向过程的问题求解方法。
其中心思想是用计算机能够理解的逻辑来描述和表达待解决的问题及其具体的解决过程。
数据结构、算法是面向过程问题求解的核心组成。
其中数据结构利用计算机的离散逻辑来量化表达需要解决的问题,而算法则研究如何快捷、高效地组织解决问题的具体过程。
面向过程的问题求解可以精确、完备地描述具体的求解过程(这里的过程通常是指操作),但却不足以把一个包含了多个相互关联的过程的复杂系统表述清楚,而面向对象的问题求解则可以胜任这件工作。
面向对象问题求解关心的不仅仅是孤立的单个过程,而是孕育所有这些过程的母体系统,它能够使计算机逻辑来模拟描述系统本身,包括系统的组成,系统的各种可能状态,以及系统中可能产生的各种过程与过程引起的系统状态切换。
不同于面向过程的程序设计中以具体的解题过程为研究和实现的主体,面向对象的程序设计是以需解决的问题中所涉及到的各种对象为主要矛盾。
面向过程的程序有FORTRAN语言、C语言等;面向对象的程序有C++、Java等。
1-2简述对象、类和实体及他们之间的相互关系。
尝试从日常接触到的人或物中抽象出对象的概念。
答:面向对象技术中的对象就是现实世界中某个具体的物理实体在计算机逻辑中的映射和体现。
比如,电视机是一个具体存在的,拥有外形、尺寸、颜色等外部特性和开、关、频道设置等实在功能的实体;而这样一个实体,在面向对象的程序中,就可以表达成一个计算机可理解、可操纵、具有一定属性和行为的对象。
类是同种对象的集合与抽象。
图表示了类、对象、实体的相互关系和面向对象的问题求解的思维方式。
在用面向对象的软件方法解决现实世界的问题时,首先将物理存在的实体抽象成概念世界的抽象数据类型,这个抽象数据类型里面包括了实体中与需要解决的问题相关的数据和属性;然后再用面向对象的工具,将这个抽象数据类型用计算机逻辑表达出来,即构造计算机能够理解和处理的类;最后将类实例化就得到了现实世界实体的面向对象的映射——对象,在程序中对对象进行操作,就可以模拟现实世界中的实体上的问题并解决之。
电大Java语言与WWW技术形成性考核程序题一、写出下列程序完成的功能1、public class Sum{public static void main(String args[]){int sum =0;for ( int i=1;i<=100;i++)sum+=i;System.out.println("sum="+sum);}}上面这段程序所完成的功能是:求 1至100之间的整数的和,并在屏幕上显示出来。
2、import java.io.*;public class Class1{public static void main(String args[]){int i,Max,Min;int a[ ]={ 12,67,8,98,23,56,124,55,99,100 };Max=Min=a[0];for (i=1;i<a.length;i++){if(a[i]<min)Min=a [i];if(a[i]>Max)Max=a [i];}System.out.println(Max+" "Min);System.out.println();}}上面这段程序所完成的功能是:在数组中查找并输出最大值和最小值,并输出显示。
3、import java.io.*;public class Class1{public static void main(String args[] ){Fact N=new Fact(4);System.out.println(N.fact() );}}class Fact{int n;Fact(int nn){n=nn;}int fact(){int i,f=1;for(i=1;i<=1;i++ )f=f*i;return f ;}}上面这段程序所完成的功能是:定义一个计算n!(n阶阶乘)的类Fact,然后主类中创建一个对象求解4!的值。
Java语言与WWW技术
形成性考核作业册
总成绩_____________
学生姓名:
学生学号:
所属电大:福建省(自治区、直辖市)
市县福建省广播电视大学编制
实验报告(作业3)
成绩:实验教师签名:实验名称(作业3实验___):
实验时间:
实验目的:
实验步骤(算法步骤):
实验结果分析(程序运行结果)
输入:
输出:
附录程序清单
上网学习记录表(第三次)
《Java语言与WWW技术》课程作业三
第六章工具类与算法
1.设x,y是整型变量,d是双精度变量,试书写表达式完成下面的操作:1)求x的y次方;2)求x和y的最小值;3)求d取整后的结果;4)求d的四舍五入后的结果;求atan(d) 的数值。
2.编程求一个整数数组的最大值、最小值、平均值和所有元素的和。
3.编写一个Applet程序,接受用户输入的一个字符串和一个字符,把字符串中所有指定的字符删除后输出。
4.编写一个递归程序求一个一维数组所有元素的乘积。
5.编写一个Applet程序,接受用户输入的若干个字符串,并按字典序排序输出。
要求使用2种以上的排序算法。
1:请简述Java常用的修饰符及其应用举例
类
访问修饰符修饰符class 类名称 extends 父类名称 implement 接口名称(访问修饰符与修饰符的位置可以互换)
2:请简述Applet程序运行原理
Applet(小应用程序)采用Java创建的基于HTML的程序。
浏览器将其暂时下载到用户的硬盘上,并在Web页打开时在本地运行。
一般的Applet只能通过appletviewer或者浏览器来运行,一般的Java程序通过继承Applet类也可以嵌入网页运行。
编译好的字节码文件保存在特定的WWW服务器上,同一个或另一个服务器上保存着嵌入了该字节码文件名的HTML文件。
当某一个浏览器向服务器请求下载嵌入了Applet的HTML文件时,该文件从WWW服务器上下载到客户端,由WWW 浏览器解释HTML中的各种标记,按其约定将文件中的信息以一定的格式显示在用户屏幕上。
当浏览器遇到HTML文件中的特殊标记,表明它嵌有一个Applet 时,浏览器会根据这个Applet的名字和位置自动把字节码从WWW服务器上下载到本地,并利用浏览器本身拥有的Java解释器直接执行该字节码。
3:请简述Java图事件处理机制
java事件机制包括三个部分:事件、事件监听器、事件源。
1、事件。
一般继承自java.util.EventObject类,封装了事件源对象及跟事件相关的信息。
2、事件监听器。
实现java.util.EventListener接口,注册在事件源上,当事件源的属性或状态改变时,取得相应的监听器调用其内部的回调方法。
3、事件源。
事件发生的地方,由于事件源的某项属性或状态发生了改变(比如BUTTON被单击、TEXTBOX的值发生改变等等)导致某项事件发生。
换句话说就是生成了相应的事件对象。
因为事件监听器要注册在事件源上,所以事件源类中应该要有盛装监听器的容器(List,Set等等)。
swing是目前java中不可缺少的窗口工具组,是用户建立图形化用户界面(gui)程序的强大工具。
java swing组件自动产生各种事件来响应用户行为。
如当用户点击按钮或选择菜单项目时,swing组件会产生一个actionevent。
swing组件会产生许多事件,如actionevents,changeevents,itemevents等,来响应用
户的鼠标点击行为,列表框中值的改变,计时器的开始计时等行为。
在java swing 编程中,通过注册监听器,可以监听事件源产生的事件,从而在事件处理程序中处理所需要处理的用户行为。
java swing中处理各组件事件的一般步骤是:
1.新建一个组件(如jbutton)。
2.将该组件添加到相应的面板(如jpanel)。
3.注册监听器以监听事件源产生的事件(如通过actionlistener来响应用户点击按钮)。
4.定义处理事件的方法(如在actionlistener中的actionperformed中定义相应方法)。
以上步骤可以用多种方法实现。
但人们通常用二种方法。
第一种方法是只利用一个监听器以及多个if语句来决定是哪个组件产生的事件;第二种方法是使用多个内部类来响应不同组件产生的各种事件,其具体实现又分两种方式,一种是匿名内部类,一种是一般内部类。
通常每个事件类都有一个监听器接口与之相对应,而事件类中的每个具体事件类型都有一个具体的抽象方法与之相对应,当具体事件发生时,这个事件将被封装成一个事件类的对象作为实际参数传递给与之对应的具体方法,由这个具体方法负责响应并处理发生的事件。
4:请简述IO程序设计中节点流与处理流间的关系
按照流是否直接与特定的地方(如磁盘、内存、设备等)相连,分为节点流和处理流两类。
节点流:可以从或向一个特定的地方(节点)读写数据。
如FileReader.处理流:是对一个已存在的流的
按照流是否直接与特定的地方(如磁盘、内存、设备等)相连,分为节点流和处理流两类。
节点流:可以从或向一个特定的地方(节点)读写数据。
如FileReader
处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。
如BufferedReader。
处理流的构造方法总是要带一个其他的流对象做参数。
一个流对象经过其他流的多次包装,称为流的链接。
常用的节点流
父类 InputStream OutputStream Reader Writer
文件 *FileInputStream FileOutputStrean FileReader FileWriter 文件进行处理的节点流
数组 *ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter 对数组进行处理的节点流(对应的不再是文件,而是内存中的一个数组)
字符串 *无无 StringReader StringWriter 对字符串进行处理的节点流
管道 *PipedInputStream PipedOutputStream PipedReader PipedWriter 对管道进行处理的节点流
常用处理流(关闭处理流使用关闭里面的节点流)
父类 InputStream OutputStream Reader Writer
缓冲流 *BufferedImputStrean BufferedOutputStream BufferedReader BufferedWriter ----需要父类作为参数构造,增加缓冲功能,避免频繁读写硬盘,可以初始化缓冲数据的大小,由于带了缓冲功能,所以就写数据的时候需要使用flush方法咯
转换流 *InputStreamReader OutputStreamWriter- 要inputStream或OutputStream作为参数,实现从字节流到字符流的转换
数据流 *DataInputStream DataOutputStream -提供将基础数据类型写入到文件中,或者读取出来,为什么要有这个流呢?看这样的分析,如果没有这种流的话,有一个long,本身只占8个字节,如果我要写入到文件,需要转成字符串,然后在转成字符数组,那空间会占用很多,但是有了这种流之后就很方便了,直接将这8个字节写到文件就完了。
是不是既节约了内存空间有让程序写起来更加方便简单了呐。
写倒是很简单,但是读取的时候就注意了,根据读取的数据类型,指针会往下移,所以你写的顺序必须要和读的顺序一致才能完成你正确的需求。
*ObjectInputStream ObjectOutputStream
*顺便研究序列化---将对象所在的类型全部转换成二进制,然后写入到介质中去
*transient关键字--修饰成员变量,不写入该成员变量
*Serializable接口--表示接口,怎样实现的呢,在序列化之前,首先判断(对象 instanceof Serializable)如果返回true则执行序列化,否者抛出异常,并且里面有一个ID,是用来快速查找某个对象的时候使用的
*Externalizable接口--外部化接口;他是Serializable接口的子接口,能手动控制序列化的方式
为什么要用writeUTF()--因为这种方式是按照utf-8来写入的,而默认方式是utf-16只是节省空间而已
--字节流读取中文的问题
*由于java使用的是unicode编码,每一个中文字符是占用两个字节的,所以没有只读出其中一个字节并使用的话当然是乱码咯,虽然普通的英文字符也是两个字节的,但是读取的时候将高8位去掉也能回去正确的英文字符,所以没有问题,所以最好还是使用字符流的方式读取好点
--java.io中专门提供用于打印的流(这类流在写入的时候有自动flush的功能,所以你不需要每打印一个东西都flush一次)--------注意他们也是属于处理流,只不过这里单独列出来分析而已
*PrintStream--继承自-->FilterOutputStream--继承自-->OutputStream,(它的构造函数需要OutputStream对象)
*PrintWriter---继承自-->Writer(它的构造函数需要Writer对象)
System.In====InputStream
System.Out===PrintStream
这种流的print方法不会抛出异常,这是JSP技术中常用的流,如果在JSP 页面的打印会抛出异常的话,那JSP也太难写了点!注意理解这样的设计思路
--看这样的代码
PrintStream ps=new PrintStream(new OutputStream("c://..."));
System.setOut(ps);
System.Out.println("jfdajsflkajdf");//这样将不会在打印到命令行窗口,而是指定的PrintStream目标文件里面去。