Java程序设计基础_第1页
Java程序设计基础_第2页
Java程序设计基础_第3页
Java程序设计基础_第4页
Java程序设计基础_第5页
已阅读5页,还剩99页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

内容提要Java语言简介Java的数据类型Java的面向对象特性Java常用内置包Java集合元素Java异常处理Java的流编程Java网络编程Java的多线程Java的图形界面编程Java小应用程序编程。Java语言简介Java完全面向对象的编程语言。Java可用来生成两类程序:应用程序小应用程序(Applet)Java既是一种解释执行的语言,也是一种编译执行的语言。Java的发展历史1990年Sun公司的JamesGosling等人开始开发名称为Oak的语言。希望用于控制嵌入在有线电视交换盒、PDA等的微处理器。1993年交互式电视和PDA市场开始滑坡,而Internet正处于增长时期,因此Sun公司将目标市场转向Internet应用程序。1994年将Oak语言更名为Java。1995年Sun公司的HotJava浏览器问世,从1998.12开始,发布JDK1.2,并使用名称"Java2"

Java的基本特点Java的基本特点包括9个方面1、简单,Java的风格类似于C++,因而对C++程序员而言非常容易掌握Java编程技术;Java摒弃了C++中容易引发程序错误的地方,如指针操作和内存管理。2、面向对象,在Java中任何东西都是对象,因此,重点集中在数据以及应用程序中的数据操作方法。3、分布式,Java提供了包容广泛的例程库,可处理像HTTP和FTP这样的TCP/IP协议。Java应用程序可通过一个特定的URL来打开并访问对象,就像访问本地文件系统那样简单。4、健壮性,Java在编译和运行程序时都要对可能出现的问题进行检查,它提供自动垃圾收集来进行内存管理,面向对象的异常处理机制。5、体系结构中立,Java程序被编译成一种与体系结构无关的字节代码,只要安装了Java运行时系统Java程序可以在任意的处理器上运行。6、解释执行,编译器javac

将处理.java源文件生成类文件,类文件可通过名称为java的加载实用程序解释执行,将Java字节码转换为机器可执行代码。7、高性能,通过JIT编译器首先将字节码编译成固有代码,将结果缓存下来,然后在需要时调用它们。8、多线程,Java语言内置支持多线程的功能,Java类库提供了Thread类。9、动态,Java自身的设计使它适合于一个不断发展的环境。在Java类库中可以自由地加入新的方法和实例变量而不会影响用户程序的执行。Java相关开发人员的状况北美地区,Java软件开发人员44%。北美以外地区:Java软件开发人员43%。美国Java程序开发人员的平均年薪7万美元,到2010年我国对Java技术人员的需求量高达100万。Java语言的核心机制Java语言包含三种核心机制:Java虚拟机垃圾收集机制代码安全检测Java虚拟机(JavaVirtualMachine,JVM)

在一台计算机上由软件或硬件模拟的计算机。Java虚拟机读取并处理经编译过的平台无关的字节码class文件。Java编译器针对Java虚拟机产生class文件,因此是独立于平台的。Java解释器负责将Java虚拟机的代码在特定的平台上运行。运行原理如图。垃圾收集机制(Garbagecollection)在C/C++等语言中,由程序员负责回收无用内存。Java语言解除了程序员回收无用内存空间的责任。它提供一种系统级线程跟踪存储空间的分配情况。并在JVM的空闲时,检查并释放那些可被释放的存储器空间。垃圾收集在Java程序运行过程中自动进行,程序员无法精确控制和干预。代码安全性检测(CodeSecurity)Java执行代码的时候,由JVM对运行的代码进行安全性检测,当进行一些非法操作的时候,比如修改一些系统设置的时候,JVM会发出警告。Java程序分类基本的Java程序分成两大类:JavaApplication和JavaApplet小程序。JavaApplication,以main()方法作为程序入口,由Java解释器加载执行。JavaApplet,没有main()方法作为程序入口,由浏览器或appletviewer加载执行。JavaApplication程序案例名称:JavaApplication程序程序名称:j3_01.javapublicclassj3_01{publicstaticvoidmain(Stringargs[]){

System.out.println("HelloWorld!");}}JavaApplet程序案例名称:JavaApplet程序程序名称:j3_02.javaimportjava.awt.Graphics;importjava.applet.Applet;publicclassj3_02extendsApplet{ Stringhw_text; publicvoidinit(){

hw_text="HelloWorld"; } publicvoidpaint(Graphicsg){

g.drawString(hw_text,25,25); }}案例名称:调用JavaApplet的HTML程序程序名称:j3_03.html<HTML><appletcode=“j3_02.class”width=300height=50></applet></HTML>JavaApplet程序用JDK自带的命令行工具appletviewer打开HTML文件,语法是“appletviewerj3_03.html”,将j3_03.html文件拷贝到C盘根目录标识符与注释Java语言标识符的组成规则为:标识符必须以字母、下划线(_)或美元符($)开头,后面可以跟任意数目的字母、数字、下划线(_)或美元符($)。标识符的长度没有限制。在定义和使用标识符时需要注意,Java语言是大小写敏感的。比如,string和String是两个不同的标识符。另外,标识符的命名应遵循Java编码惯例,并且应使标识符能从字面上反映出它所代表的变量或类型的用途。注释Java语言提供三种类型的注释:单行注释:以//开始,并以换行符结束多行注释:以/*开始,并以*/结束文档注释:以/**开始,并以*/结束,注释中的每一行都必须以*开始。使用javadoc工具从源代码和文档注释中将信息取出,然后转换为HTML文件。关键字所有Java关键字都是小写的,TURE、FALSE、NULL等都不是Java关键字;goto和const虽然从未使用,但也作被为Java关键字保留;true、false、null虽用做专门用途,但不是Java关键字。Java语言的关键字包括9大类:1、原始数据类型:byte、short、int、long、float、double、char、boolean2、循环关键字:do、while、for、break、continue3、分支关键字:if、else、switch、case、default、break4、方法、变量和类修饰符:private、public、protected、final、static、abstract、synchronized、volatile、strictfp5、异常处理:try、catch、finally、throw、throws6、对象相关关键字:new、extends、implements、class、instanceof、this、super7、字面值常量:false、true、null8、方法相关关键字:return、void9、包相关关键字:package、import基本数据类型总体上Java语言包括简单数据类型和引用数据类型,提供7大类数据类型。如图

Java语言整数类型类型占用存储空间表数范围

byte

1字节-128~127

short

2字节-215~215-1

int

4字节-231~231-1

long

8字节-263~263-1Java语言整型常量Java语言整型常量有三种表示形式:十进制整数、八进制整数和十六进制整数。十进制整数,如123,-314,0。八进制整数,要求以0开头,如012表示十进制数10、-021表示十进制数-17。其开头的0表示这是一个八进制数。十六进制数,要求0x或0X开头,如0x12表示十进制数18、-0X1a表示十进制数-26。其开头的0X或0x表示这是一个十六进制数。Java浮点类型类型占用存储空间表数范围float

4字节-3.403E38~3.403E38double

8字节-1.798E308~1.798E308Java语言浮点类型Java语言浮点类型常量有两种表示形式:十进制数形式和科学记数法形式十进制数形式,必须含有小数点,例如3.14、314.0、.314。否则将被当作int型常量处理,例如314。科学记数法形式,如3.14e2、3.14E2、314E2。只有浮点类型才能采用科学记数法表示,因此314E2也是浮点型常量,而不是int型。Java语言转义字符用法字符序列字符含义对应Unicode值\b退格\u0008\tTab(制表符)\u0009\n换行\u000a\r回车\u000d\"双引号\u0022\'单引号\u0027\\反斜杠\u005c基本数据类型的使用案例名称:基本数据类型的使用程序名称:j3_04.javapublicclassj3_04{publicstaticvoidmain(Stringargs[]){

booleanb=true; //声明boolean型变量并赋值

intx,y=8; //声明int型变量

floatf=4.5f; //声明float型变量并赋值

doubled=3.1415; //声明double型变量并赋值

charc; //声明char型变量

c='\u0031'; //为char型变量赋值

x=12; //为int型变量赋值

System.out.print(c+"\n");charz='中';

System.out.print(z);}}引用数据类型Java语言中除8种基本数据类型以外的数据类型称为引用类型,也叫做复合数据类型。在程序中声明的引用类型变量只是为该对象起的一个名字,或者说是对该对象的引用,变量的值是对象在内存空间中的存储地址而不是对象本身,这就是称之为引用类型的原因。数组的使用案例名称:数组的使用程序名称:j3_05.javapublicclassj3_05{publicstaticvoidmain(String

args[]){

int[]s; s=newint[10];

for(inti=0;i<10;i++){ s[i]=2*i+1;

System.out.println(s[i]); }}}默认初始化的使用案例名称:默认初始化的使用程序名称:j3_06.javapublicclassj3_06{publicstaticvoidmain(String

argv[]){inta[]=newint[5];

System.out.println(a[3]);}}使用String提供的方法案例名称:使用String提供的方法程序名称:j3_07.javapublicclassj3_07{publicstaticvoidmain(String

argv[]){Stringstr="abcdefg";System.out.print(str.charAt(2));System.out.print(str.substring(1,2));

System.out.print(str.indexOf("bc"));if(str.equals("abcdefg")){

System.out.print("相等\n");} }}使用自定义的类案例名称:使用自定义的类程序名称:j3_08.javapublicclassj3_08{privateintday=12;privateintmonth=6;privateintyear=1900;publicj3_08(intd,intm,inty){ year=y; month=m; day=d; } publicvoiddisplay(){

System.out.print(year+"/"+month+"/"+day); } publicstaticvoidmain(String[]args){j3_08m; m=newj3_08(22,9,2005);

m.display();}}运算符按照运算符的功能来划分,Java语言中运算符可分为下述几类:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和字符串连接运算符等。算术运算符包括:+,-,*,/,%,+/-,++,--,分别实现通常的加、减、乘、除、取模(求余)、改变符号、加1、减1等算术运算。算术运算符只适用于java基本数据类型中的数值型(byte,short,char,int,long,float,double)数据。与其它语言不同,对于取模运算符来说,其操作数可以是浮点数,例如:10.6%3的结果为1.6,10%3.5的结果为3.0。逻辑运算符用法ab!aa&ba|ba^ba&&ba||btruetruefalsetruetruefalsetruetruetruefalsefalsefalsetruetruefalsetruefalsetruetruefalsetruetruefalsetruefalsefalsetruefalsefalsefalsefalsefalse扩展赋值运算符用法赋值运算符用法举例等效的表达式+=a+=ba=a+b-=a-=ba=a-b*=a*=ba=a*b/=a/=ba=a/bInstanceof

运算符案例名称:Instanceof

运算符程序名称:j3_09.javaclassInstanceOfDemo{publicstaticvoidmain(Stringargs[]){

InstanceOfDemot=newInstanceOfDemo(); if(tinstanceof

InstanceOfDemo){

System.out.println("T是InstanceOfDemo

的实例"); } else{

System.out.println("T不是InstanceOfDemo

的实例!"); }}}流程控制语句和C语系下的其他语言一样,Java支持下列控制结构:选择、循环和跳转语句,使用方法和JavaScript一致。选择:if-else、switch循环:while、do-while、for跳转:break、continue选择控制语句包括if-else和switch两种形式。if-else结构的语法有两种基本使用方法,如果if和else块中只有一条语句,可以将大括号省略,其格式为:if(条件)

语句1;else

语句2;选择控制语句如果块中有多条语句,大括号不能省略,其格式为if(条件){

语句组;

}else{

语句组;}switch结构的基本语法为其中表达式必须为byte,short,int或char类型,常量值必须是与表达式类型兼容的特定的一个常量,不允许有重复的case值switch(表达式){case'常量值1':

语句(组);break;case'常量值2':

语句(组);break;default:

语句(组);}循环控制语句包含while、do-while和for三种基本结构while循环的基本语法为while(条件){语句组;}do-while循环do{

语句组;}while(条件);for循环

for(变量初始化;条件;递增或递减变量的值){语句组;}break和continue语句break语句在循环中用于立即从当前循环终止控制。遇到break语句时,将跳出当前循环。continue语句则是从其调用处跳至循环的开始处。continue语句之后的语句将不再执行。

Java面向对象编程基础面向对象的编程技术正逐渐成为当今计算机软件开发的主要趋势面向对象的技术基于一种先进、高效的分析、描述、处理问题的思想。类的定义类和对象是面向对象的编程技术中的核心概念。类的概念和实际生活中“事物种类”完全一致,面向对象编程技术中的“类”是根据分析和处理问题的需要,对某一类现实事物的抽象概括。构造函数构造函数也叫构造方法,是Java类中的一种特殊方法其功能是创建其所属类型的一个新的对象。声明构造方法的语法规则如下:<modifiers><class_name>([<argu_list>]){[<statements>]}使用构造函数

classMyClass{ privateintday; privateintmonth; privateintyear; publicMyClass(){ day=1; month=1; year=1900; } publicMyClass(int

d,int

m,inty){ day=d; month=m; year=y; } publicvoiddisplay(){

System.out.println(day+"-"+month+"-"+year); } publicstaticvoidmain(String

args[]){

MyClassm1=newMyClass();

MyClassm2=newMyClass(25,12,2005); m1.display(); m2.display(); }}

Java文件的层次结构Java源文件结构的层次上有一些特殊的规定:package语句 //0或1个,必须放在文件开始import语句 //0或多个,必须放在所有类定义之前publicclassDefinition //0或1个,定义公有类,类名同文件名classDefinition //0或多个,定义普通类interfaceDefinition //0或多个,定义接口使用包案例名称:使用包程序名称:j3_12.javapackagecom.sun;classhello{publicstaticvoidmain(Stringargs[]){

System.out.println("HelloWorld!");}}类的继承importjava.util.*;classPerson{publicStringname;publicintage;publicDatebirthDate;publicStringgetInfo(){return"name:"+name+"\nage:"+age;}}classStudentextendsPerson{ publicStringschool;}classTest{ publicstaticvoidmain(String

args[]){ Students=newStudent();

="bily";

s.age=18;

System.out.println(s.getInfo());}}访问控制修饰(重点掌握)Java语言为对类中的属性和方法进行有效的访问控制,将他们分为四个等级:private,default,protected和public修饰符Java类成员的访问控制

可否直接访问控制等级同一个类中同一个包中不同包中的子类中任何场合privateYesdefaultYesYesprotectedYesYesYespublicYesYesYesYes方法的重写classPerson{ protectedStringname; protectedintage; publicStringgetInfo(){ return"Name:"+name+"\n"+"age:"+age; }}classStudentextendsPerson{ protectedStringschool; publicStringgetInfo(){ return"name:"+name+"\nage:"+age +"\nschool:"+school; }}classTest{ publicstaticvoidmain(String

args[]){ Personp=newPerson();

="Tom";

p.age=22;

System.out.println(p.getInfo()); Students=newStudent();

="bily";

s.age=18;

s.school="Tsinghuauniversity";

System.out.println(s.getInfo());}}案例名称:方法的重写程序名称:j3_14.java关键字super如果子类中发生了方法重写,那么子类对象能调用父类中重写前的方法,Java语言允许在子类中使用关键字super来引用父类的方法。关键字super可用于访问父类中定义的属性,调用父类中定义的成员方法,在子类构造方法中调用父类的构造方法。方法的重写案例名称:方法的重写程序名称:j3_15.javaclassA{

intvalue=3;

int

getValue(){returnvalue;}}classBextendsA{

intvalue=6;

int

getValue(){returnvalue;}intgetValue2(){returnsuper.value;}intgetValue3(){returngetValue();}intgetValue4(){returnsuper.getValue();}}classTest{ publicstaticvoidmain(String

args[]){ Bb=newB();

System.out.println(b.getValue()); System.out.println(b.getValue2()); System.out.println(b.getValue3()); System.out.println(b.getValue4());}}关键字static案例名称:使用static关键字程序名称:j3_16.javaclassPerson{ privateintid; publicstaticinttotal=0; publicPerson(){ total++; id=total; }}classOtherClass{ publicstaticvoidmain(String

args[]){

Person.total=100;

System.out.println(Person.total); Personc=newPerson();

System.out.println(Person.total); }}使用静态方法

案例名称:使用静态方法程序名称:j3_17.javaclassPerson{ privateintid; privatestaticinttotal=0; publicstaticint

getTotalPerson(){ returntotal; } publicPerson(){ total++; id=total; }}classTestPerson{ publicstaticvoidmain(String[]args){

System.out.println(Person.getTotalPerson()); Personp1=newPerson();

System.out.println(Person.getTotalPerson()); }}关键字final在Java中声明类、属性和方法时,可使用关键字final来修饰。final所标记的成分具有“终态”的特征,其具体规定如下:final标记的类不能被继承。final标记的方法不能被子类重写。final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。使用final关键字案例名称:使用final关键字程序名称:j3_18.javafinalclassTest{ publicstaticint

totalNumber=5; publicfinalintid; publicTest(){ id=++totalNumber; } publicstaticvoidmain(String[]args){ finalTestt=newTest(); finalinti=10; finalintj; j=20; j=30;//非法,对final变量进行二次赋值

}}抽象类对于那些只须声明,而不需要实现的方法,可以声明为抽象方法,用abstract来修饰。抽象方法没有方法体。用abstract关键字来修饰的类叫做抽象类,含有抽象方法的类必须被声明为抽象类。抽象类不能被实例化,因此抽象类只能在继承中发挥作用,抽象方法也只能在被重写后由子类的对象调用使用抽象类案例名称:使用抽象类程序名称:j3_19.javaabstractclassA{ abstractvoidm1(); publicvoidm2(){

System.out.println("A类中定义的m2方法"); }}classBextendsA{ voidm1(){

System.out.println("B类中定义的m1方法"); }}classTest{ publicstaticvoidmain(Stringargs[]){ Ac=newB(); c.m1(); c.m2(); }}接口定义接口的语法格式如下。<modifer>interface<interface_name>{ [<attribute_declarations>] [<abstrct

method_declarations>]}案例名称:使用接口实现多重继承程序名称:j3_20.java常用集合元素常用的集合元素有:向量(Vector)枚举(Enumeration)散列表(Hashtable)属性(Properties)向量Vector不要求每个元素的类型相同,向量中可以混合多种数据类型。向量可以在增加元素时动态增大。案例名称:使用向量程序名称:j3_21.javaimportjava.util.*;classTest{ publicstaticvoidmain(String

args[]) { Stringnames[]={"Mercury","Venus","Earth","Mars"};

int

namesLen=names.length; Vectorplanets=newVector();

for(inti=0;i<namesLen;i++){

planets.addElement(names[i]); }

int

planetsLen=planets.size();

for(inti=0;i<planetsLen;i++){

System.out.println(planets.elementAt(i)); } }}枚举Enumeration枚举也可以存放许多元素,两个常用的方法为,hasMoreElements()和nextElement()案例名称:使用枚举程序名称:j3_22.javaimportjava.util.*;classTest{ publicstaticvoidmain(String

args[]) { Stringnames[]={"Mercury","Venus","Earth","Mars"};

int

namesLen=names.length; Vectorplanets=newVector();

for(inti=0;i<namesLen;i++){

planets.addElement(names[i]); } Enumerationenum=planets.elements(); Stringname=null;

while(enum.hasMoreElements()) { name=(String)enum.nextElement();

System.out.println(name); } }}散列表Hashtable

数组,向量提供了集合内容的顺序访问,散列表可以对集合内容进行随机访问,散列表提供的主要方法及其说明为。用put(Object

key,Objectvalue)加进关键字/数值对用get(Objectkey)取得一个关键字的值用remove(Objectkey)删除一个元素用size()检查长度用empty()检查长度是否为0用keys()或elements()取得所有关键字或数值的设置,两者都返回Enumeration使用散列表案例名称:使用散列表程序名称:j3_23.javaimportjava.util.*;classTest{ publicstaticvoidmain(String

args[]) { Stringnames[]={"beijing","shanghai","nanchang","sichuan"}; Stringperson[]={"北方","南部沿海","中部","西部"};

Hashtablehash=newHashtable();

for(inti=0;i<names.length;i++){

hash.put(names[i],person[i]); } Enumerationenum=hash.keys(); Objectobj;

while(enum.hasMoreElements()){

obj=enum.nextElement();

System.out.println(obj+":"+hash.get(obj)); } }}Set接口一种不含重复元素的、无序的收集,也称集合,是数学集合的抽象模型。Set集合接口中的元素不重复,且至多包含一个null元素。案例名称:使用Set接口程序名称:j3_24.javaimportjava.util.*;classTestSet{ publicstaticvoidmain(String[]args){

HashSeth=newHashSet(); h.add("1st"); h.add("2nd");

h.add(newInteger(3));

h.add(newDouble(4.0)); h.add("2nd");//重复元素,未被加入

h.add(newInteger(3));//重复元素,未被加入

m1(h); } publicstaticvoidm1(Sets){

System.out.println(s); }}

List接口一种可含有重复元素的、有序的收集,也称序列。用户可以控制向序列中插入元素的位置,并可以按元素的位序(就是加入顺序)来访问他们,位序从0开始。使用List接口案例名称:使用List接口程序名称:j3_25.javaimportjava.util.*;classTestList{ publicstaticvoidmain(String[]args){

ArrayListh=newArrayList(); h.add("1st"); h.add("2nd");

h.add(newInteger(3));

h.add(newDouble(4.0)); h.add("2nd");//重复元素,加入

h.add(newInteger(3));//重复元素,加入

m1(h); } publicstaticvoidm1(Lists){

System.out.println(s); }}Iterator接口可以通过Collection接口中定义的iterator()方法获得一个对应的Iterator对象。Set对象对应的Iterator仍然是无序的

案例名称:使用Iterator接口程序名称:j3_26.javaimportjava.util.*;classTestIterator{ publicstaticvoidmain(String[]args){

ArrayListh=newArrayList(); h.add("1st"); h.add("2nd");

h.add(newInteger(3));

h.add(newDouble(4.0));

Iteratorit=h.iterator(); while(it.hasNext()){

System.out.println(it.next()); } }}异常处理异常就是Java程序在运行过程中出错、异常终止的情况。可能导致异常发生的原因有许多例如:数组下标越界、空指针访问、试图读取不存在的文件、网络连接中断等数组下标越界异常案例名称:数组下标越界异常程序名称:j3_27.javaclassTest{ publicstaticvoidmain(String[]args){ Stringfriends[]={"lisa","bily","kessy"};

for(inti=0;i<5;i++){

System.out.println(friends[i]); }

System.out.println("\nthisistheend"); }}Java中的异常可分为两大类错误(Error):JVM系统内部错误、资源耗尽等严重情况;违例(Exception):其它因编程错误或偶然的外在因素导致的一般性问题,例如:对负数开平方根、空指针访问、试图读取不存在的文件、网络连接中断。Java中的异常当发生Error时,程序员根本无能为力,只能让程序终止。比如说内存溢出,不可能指望程序能处理这样的情况。而对于Exception,而有补救或控制的可能,程序员也可以预先防范。异常的层次关系如图捕捉异常案例名称:捕捉异常程序名称:j3_28.javaclassTest{ publicstaticvoidmain(String[]args){ try{ Stringfriends[]={"lisa","bily","kessy"};

for(inti=0;i<5;i++){

System.out.println(friends[i]); } }catch(Exceptione){

System.out.println(e); }finally{

System.out.println("It'sok!"); }

System.out.println("OutofTry!"); }}声明抛出异常案例名称:声明抛出异常程序名称:j3_29.javaimportjava.io.*;classTest{ publicstaticvoidmain(String[]args){ Testt=newTest(); try{

t.readFile(); }catch(IOExceptione){

System.out.println(e);

System.out.println("退出!"); } } publicvoidreadFile()throws

IOException{

FileInputStreamin=newFileInputStream("myfile.txt");

intb; b=in.read();

while(b!=-1){

System.out.print((char)b); b=in.read(); }

in.close(); }}声明抛出异常案例名称:声明抛出异常程序名称:j3_30.javaclassMyExceptionextendsException{ privateint

idnumber; publicMyException(Stringmessage,intid){

super(message);

this.idnumber=id; } publicint

getId(){ returnidnumber; }}classTest{ publicvoidregist(intnum)throwsMyException{ if(num<0){ thrownewMyException("人数为负值,不合理",3); }

System.out.println("登记人数"+num); } publicvoidmanager(){ try{ regist(-100); }catch(MyExceptione){

System.out.print("登记失败,出错种类:"+e.getId()); }

System.out.print("本次登记操作结束"); } publicstaticvoidmain(String

args[]){ Testt=newTest();

t.manager(); }}标准I/O操作多数应用程序在运行过程中要与用户进行交互通常的交互方式是:用户使用键盘作为标准输入设备向程序中输入数据,程序利用计算机终端窗口做为标准输出设备显示输出数据。这种的程序被称为控制台应用程序,这种输入/输出被称为标准I/O或控制台I/O。标准的IO操作案例名称:标准的IO操作程序名称:j3_31.javaimportjava.io.*;classTest{ publicstaticvoidmain(Stringargs[]){ Strings; //创建一个BufferedReader对象从键盘逐行读入数据

InputStreamReader

isr=newInputStreamReader(System.in);

BufferedReader

br=newBufferedReader(isr); try{//每读入一行后向显示器输出

s=br.readLine(); while(!s.equals("")){

System.out.println("Read:"+s); s=br.readLine(); }

br.close();//关闭输入流

}catch(IOExceptione){//捕获可能的IOException.

e.printStackTrace(); } }}文件I/O操作java.io包中定义多个与数据输入、输出功能有关的类,其中的File类提供文件操作功能。File类是对计算机文件和目录路径的一种抽象表示。可以使用多种格式创建File类对象,例如:Filef;f=newFile("Test.java");f=newFile("E:\\ex\\","Test.java");f=newFile("E:\\ex\\Test.java");Filepath=newFile("E:\\ex\\");Filefile=newFile(path,"Test.java");其他与文件I/O有关的类还有四个对象:FileReader:以字符为单位从文件中读入数据FileWriter:以字符为单位向文件中写出数据BufferedReader:提供readLine方法以行为单位读入一行字符PrintWriter:提供print和println方法以行为单位写出数据读取文件案例名称:读取文件程序名称:j3_32.javaimportjava.io.*;classReadFile{ publicstaticvoidmain(String[]args){ Stringfname="j3_32.java"; Filef=newFile(fname); try{

FileReader

fr=newFileReader(f);

BufferedReader

br=newBufferedReader(fr); Strings=br.readLine(); while(s!=null){

System.out.println("读入:"+s); s=br.readLine(); }

br.close();//关闭缓冲读入流及文件读入流的连接. }catch(FileNotFoundExceptione1){

System.err.println("Filenotfound:"+fname); }catch(IOExceptione2){ e2.printStackTrace(); } }}写入文件案例名称:写入文件程序名称:j3_33.javaimportjava.io.*;classWriteFile{ publicstaticvoidmain(String[]args){ Filefile=newFile("tt.txt"); try{

InputStreamReaderis=newInputStreamReader(System.in);

BufferedReaderin=newBufferedReader(is);

FileWriter

fw=newFileWriter(file);

PrintWriterout=newPrintWriter(fw); Strings=in.readLine(); //从键盘逐行读入数据输出到文件

while(!s.equals("")){

out.println(s); s=in.readLine(); }

in.close();//关闭BufferedReader输入流.

out.close();//关闭连接文件的PrintWriter输出流. }catch(IOExceptione){

System.out.println(e); } }}网络编程基础Java中常用的网络编程包括两个方面:URL编程Socket编程URL编程URL(统一资源定位器,UniformResourceLocator)用于表示Internet上资源的地址。这里所说的资源,可以是文件、目录或更为复杂的对象的引用。包定义了对应的URL类。其常用构造方法及用法举例如下:publicURL(Stringspec);比如:URLu1=newURL("/home/");publicURL(URLcontext,Stringspec);比如:URLu2=newURL(u1,"welcome.html");publicURL(String

protocol,String

host,Stringfile);比如:URLu3=newURL("http","","index.html");publicURL(Stringprotocol,String

host,int

port,Stringfile);比如:URLu4=newURL("http","",80,"index.html");写入文件案例名称:写入文件程序名称:j3_34.javaimportjava.io.*;import.*;classURLReader{ publicstaticvoidmain(String

args[]){ try{ URLtirc=newURL("/");

BufferedReaderin=newBufferedReader(new

InputStreamReader(tirc.openStream())); Strings;

while((s=in.readLine())!=null)

System.out.println(s);

in.close(); }catch(MalformedURLExceptione){

System.out.println(e); }catch(IOExceptione){

System.out.println(e); } }}Socket编程包中定义的两个类Socket和ServerSocket,分别用来实现双向连接的client和server端。当进程通过网络进行通信时,Java技术仍使用它的流模型。每个socket对象都包含相应的一个输入流和一个输出流对象。如果一个进程要通过网络向另一个进程发送数据,只需简单地写入与socket相关联的输出流。而一个进程通过从与socket相关联的输入流读来读取另一个进程所写的数据。建立网络连接之后,使用与socket相关联的I/O流和使用其他I/O流完全相同。Socket通信模型包包中定义了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务器端。其常用的构造方法有:Socket(InetAddressaddress,intport);Socket(InetAddressaddress,intport,booleanstream);Socket(Stringhost,intport);Socket(Stringhost,intport,booleanstream);ServerSocket(intport);ServerSocket(intport,intcount);网络编程的四个基本步骤网络编程的四个基本步骤为:1、创建socket;2、打开连接到socket的输入/输出流;3、按照一定的协议对socket进行读/写操作;4、关闭socket。服务器端程序案例名称:服务器端程序程序名称:j3_35.javaimport.*;importjava.io.*;classTestServer{ publicstaticvoidmain(String

args[]){ try{

ServerSockets=newServerSocket(8888); while(true){ Sockets1=s.accept();

OutputStream

os=s1.getOutputStream();

DataOutputStreamdos=newDataOutputStream(os);

dos.writeUTF("Hello,"+s1.getInetAddress()+"port#"+s1.getPort()+"\nbye!");

dos.close(); s1.close(); } }catch(IOExceptione){

System.out.println("程序运行出错:"+e); } }}客户器端程序案例名称:客户器端程序程序名称:j3_36.javaimport.*;importjava.io.*;classTestClient{ publicstaticvoidmain(String

args[]){ try{ Sockets1=newSocket("",8888);

InputStreamis=s1.getInputStream();

DataInputStream

dis=newDataInputStream(is);

System.out.println(dis.readUTF());

dis.close(); s1.close(); }catch(ConnectException

connExc){

System.err.println("服务器连接失败!"); }catch(IOExceptione){ } }}多线程根据多任务的原理,在一个程序内部实现多个任务(顺序控制流)的并发执行。其中的每个任务被称为线程(Thread),线程是一个程序内部的顺序控制流。线程的基本概念每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体。线程的创建和使用案例名称:线程的创建和使用程序名称:j3_37.javaclassTestThread1{ publicstaticvoidmain(String

args[]){ Runner1r=newRunner1(); Threadt=newThread(r);

t.start(); }}classRunner1implementsRunnable{ publicvoidrun(){

for(inti=0;i<30;i++){

System.out.println("No."+i); } }}线程的创建和启动过程程序中创建Thread对象并调用其start()方法的过程就是一个新的线程的创建和启动过程。其一般步骤为:1、定义一个类实现Runnable接口,重写其中的run()方法;2、创建Runnable接口实现类的对象;3、创建Thread类的对象(以先前Runnable类型对象为构造方法实参);4、调用Thread对象的start()方法,启动线程。多线程案例名称:多线程程序名称:j3_38.javaclassTestThread2{ publicstaticvoidmain(String

args[]){ Runner2r=newRunner2(); Threadt1=newThread(r); Threadt2=newThread(r); t1.start(); t2.start(); }}classRunner2implementsRunnable{ publicvoidrun(){

for(inti=0;i<20;i++){ Strings=Thread.currentThread().getName();

System.out.println(s+":"+i); } }}创建线程的第二种方式案例名称:多线程程序名

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论