版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
...wd......wd......wd...第1章Java概述Java语言的特特点一种面向对象的语言;一种平台无关的语言;一种强健的语言,吸收了C/C++的优点,但去掉了其影响程序强健性的局部〔如:指针、内存的申请与释放等〕Java的两种核心机制Java虚拟机〔JavaVirtualMachine〕垃圾回收机制〔GarbageCollection〕源程序〔*.java文件〕→Java编译器→字节码〔*.class文件〕→类装载器→字节码校验器→解释器→操作系统平台一次编译,随处运行Java是一种解释型语言JDK(JavaDevelopmentKit)软件开发工具包JRE(JavaRuntimeEnvironment)运行时环境开发需要JDK;用户只需JREPATH:WINDOWS系统执行命令时要搜寻的路径〔如javac.exe,java.exe〕CLASSPATH:Java在编译和运行时要找的class所在路径〔“.〞代表当前路径〕java:运行java程序javac:编译java程序java–version一个源文件最多只能有一个public类,其他类数量不限,源文件名必须与public类名一致Java应用程序的执行入口时main〔〕方法:publicstaticvoidmain(String[]args){…}Java语言中严格区分大小写编译后,每一个类都对应一个class文件第2章根基语法标示符由字母、下划线〞_〞、美元符〞$〞或数字组成标示符应以字母、下划线、美元符开头Java标示符对大小写敏感,长度无限制,注意“见名知意〞且不能与Java语言关键字重名abstractdefaultifprivatethisbooleandoimplementsprotectedthrowbreakdoubleimportpublicthrowsbyteelseinstanceofreturntransientcaseextendsintshorttrycatchfinalinterfacestaticvoidcharfinallylongstrctfpvolatileclassfloatnativesuperwhileconstfornewswitchnullcontinuegotopackagesynchronizedgoto和const虽然未使用,但也被作为Java的关键字保存程序执行过程:内存硬盘内存硬盘heap堆new出来的东西代码操作系统heap堆new出来的东西代码操作系统代码程序程序stack栈stack栈局部变量datadatasegment静态变量字符串常量codesegmentcodesegment存放代码1.load到内存区2.找到main方法开场执行3.执行过程中的内存管理整数类型〔byte、short、int、long整数类型〔byte、short、int、longJava数据类型的划分数值型数值型浮点类型〔float、double〕浮点类型〔float、double〕字符型〔char〕基本数据类型字符型〔char〕基本数据类型数组接口〔interface〕布尔型〔boolean〕引用数据类型数据类型类〔class〕数组接口〔interface〕布尔型〔boolean〕引用数据类型数据类型类〔class〕boolean类型数据只允许取值true或false,不可以使用0或非0的整数值取代true和false,这点和c语言不同Java字符采用Unicode编码,每个字符占两个字节,因而可以用十六进制编码形式表示,例:charc=‘\u0061’;Java语言的整型常量默认为int类型,声明long型常量可以后加l或L类型占用存储空间数值范围byte1字节-27~27-1short2字节-215~215-1int4字节-231~231-1long8字节-263~263-1Java浮点型常量默认为double型,声明float型需在数字后面加f或F类型占用存储空间数值范围float4字节-3.403E38~3.403E38double8字节-1.798E308~1.798E308基本数据类型转换boolean类型不可以转换为其他的数据类型整型,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原那么:容量小的类型自动转换为容量大的类型:byte,short,char->int->long->float->doublebyte,short,char之间不需要相互转换,他们三者在计算时首先会转换为int类型可以将整型常量直接赋值给byte,short,char等类型变量,而不需要进展强制类型转换,只要不超过其表数范围“+〞除用于算术加法外,还可用于对字符串进展连接操作,“+〞运算符两侧的操作数中只要有一个是字符串〔String〕类型,系统会自动将另一个操作数转换为字符串然后再进展连接,当进展打印时,无论任何类型,都自动转换为字符串进展打印break&continuebreak语句用于终止某个语句块的执行。用在循环语句中,可以强行退出循环continue语句用在循环语句体中,用于终止某次循环过程,跳过循环体中continue语句下面未执行的循环,开场下一次循环过程switch小心case穿透,推荐使用break语句多个case可以合并到一起default可以省略,但不推荐java中switch语句只能探测int类型值方法形参、实参、返回值、返回值类型Java中进展函数调用中传递参数时,遵循值传递的原那么:基本类型传递的是该数据值本身,引用类型传递的是对象的引用,而非对象本身递归调用递归调用指在方法执行过程中出现该方法本身的调用第3章面向对象编程类是用来创立同一类型的对象的“模板〞,在一个类中定义了该类对象所应具有的成员变量和方法,对象可以看成是静态属性〔成员变量〕和动态属性〔方法〕的封装体,是该类的一个具体实例,在Java中“一切皆为对象〞继承、组合、实现、多态类=成员变量+方法成员变量系统可以对其自动初始化,局部变量不初始化会报错引用Java语言中除基本类型之外的变量类型都称之为引用类型〔基本类型占一块内存,引用类型占两块内存〕Java中的对象时通过引用对其操作的类时静态的概念,代码区对象是new出来的,位于堆内存〔动态分配内存用的〕,类的每个成员变量在不同的对象中都有不同的值〔除了静态变量〕,而方法只有一份,执行的时候才占内存对象必须使用new关键字创立对象同一类的每个对象有不同的成员变量存储空间〔除了静态变量〕同一类的每个对象共享该类的方法非静态方法时针对每个对象进展调用的〔必须创立对象〕构造方法使用new+构造方法创立一个新的对象构造方法是定义在Java类中的一个用来初始化对象的函数构造方法与类同名且没有返回值当没有指定构造方法时,编译器为类自动添加形如类名〔〕{}的构造方法命名规那么类名的首字母大写变量名和方法名的首字母小写运用驼峰标识方法重载〔overload〕方法的重载是指一个类中可以定义有一样的名字,但参数不同的多个方法。调用时根据不同的参数列表选择对应的方法this在类的方法定义中使用this关键字代表使用该类的对象的引用有时使用this可以处理方法中成员变量和方法参数重名的问题This可以看做是一个变量,它的值时当前对象的引用publicclassLeaf{ intI=0; Leaf(inti){this.i=i}; Leafincreament(){ i++; returnthis;}voidprint(){System.out.println(“i=〞+i);}publicstaticvoidmain(String[]args){ Leafleaf=newLeaf(100); leaf.increament().increament().print();}}static在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static的成员静态方法不再是针对某个对象调用,所以不能访问非静态成员可以通过对象引用或类名〔不需要实例化〕访问静态成员或方法package&import为了解决类的命名冲突问题,Java引入的包〔package〕机制,提供类的多重类命名空间package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包〔假设缺省该语句,那么指定为无名包,裸体类〕Java编译器把包对应于文件系统的目录管理,package语句中,用“.〞来指明包〔目录〕的层次,例:packagecom.yao;那么该文件中的类位于.\com\yao目录下如果将一个类打包,那么使用该类时,必须使用该类的全名〔例如:com.yao.MyClass〕,Java编译器才会找到该类也可以使用import在文件的开头引入要使用的类,例:importcom.yao.MyClass可以不需要用import语句直接使用java.lang包中的类访问位于同一个包中的类不需要引入class文件的最上层包的父目录必须位于classpath下JDK中主要的包介绍java.lang-包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能,使用时不需要引入〔lang-language〕java.awt-包含了构成抽象窗口工具集〔abstractwindowtoolkits〕的多个类,这些类被用来构建和管理应用程序的图形用户界面〔GUI〕java.applet-包含了applet运行所需的一些类-包含了与网络相关的操作的类java.io-包含能提供多种输入/输出功能的类java.util-包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数java运行时所需的类位于jdk\jre\lib\rt.jar打jar包,定位到需要打包的最上层的父路径jar–cvfxxx.jar*.*(*.*指目录中所有文件夹打包)jar包也可设为classpath变量继承extends通过继承,子类自动拥有了基类〔superclass〕的所有成员〔成员变量和方法〕〔包括private成员,拥有私有变量的所有权,但无使用权〕Java只支持单继承,不允许多继承,一个子类只能有一个基类,一个基类可以派生多个子类访问控制权限修饰符public、protected、private、default(包访问权限)修饰符类内部同一个包子类任何地方private√XXXdefault√√XXprotected√√√Xpublic√√√√对于class的权限修饰符只可以用public和defaultpublic类可以在任意地方被访问default类只可以被同一个包内的类访问方法重写overwrite/override在子类中可以根据需要对从基类中继承来的方法进展重写重写方法必须和被重写方法具有一样方法名称、参数列表和返回类型重写方法不能使用比被重写方法更严格的访问权限super在Java类中使用super来引用基类的成分继承中的构造方法子类的构造过程中必须调用其基类的构造方法子类可以再自己的构造方法中使用super〔argument_list〕调用基类的构造方法使用this〔argument_list〕调用本类的另外的构造方法如果调用super,必须写在子类构造方法的第一行如果子类的构造方法中没有显式地调用基类构造方法,那么系统默认调用调用基类无参数的构造方法如果子类构造方法中既没有显式调用基类构造方法,而基类中又没有无参的构造方法,那么编译出错Object类Object类是所有Java类的根基类如果在类的声明中未使用extends关键字指明其基类,那么默认基类为Object类publicclassPerson{…}等价于:publicclassPersonextendsObject{…}toString〔〕Object类中定义有publicStringtoString〔〕方法,其返回值时String类型,描述当前对象的有关信息,返回一个字符串,该字符串由类名〔对象是该类的一个实例〕+“@〞+此对象哈希码的无符号十六进制表示组成,即getClass〔〕.getName〔〕+‘@’+Integer.toHexString〔hashCode〔〕〕在进展String与其他类型数据的连接操作时〔如:System.out.println(“info〞+person)〕,将自动调用该对象类的toString〔〕方法可以根据需要在用户自定义类型中重写toString〔〕方法,建议所有子类都重新此方法equals〔〕publicbooleanequals(Objectobj)x.equals(y)对于任何非空引用值,当且仅当x和y引用同一个对象时,此方法返回true〔x==y具有值true〕JDK提供了一些类,如String,Date等,重写了Object的equals〔〕方法,调用这些类的equals〔〕方法,x.equals〔y〕,当x和y所引用的对象时同一类对象且属性内容相等时〔并不一定时同一对象〕,返回true,否那么返回false建议重写例子:Strings1=newString(“Hello〞);Strings2=newString(“Hello〞);System.out.println(s1==s2);//falseSystem.out.println(s1.equals(s2));//true对象转型〔casting〕一个基类的引用类型变量可以“指向〞其子类的对象一个基类的引用不可以访问其子类对象新增加的成员〔属性和方法〕可以使用引用变量+instanceof+类名,来判断该引用变量所“指向〞的对象是否属于该类或该类的子类子类的对象可以当作基类的对象来使用称作向上转型〔upcasting〕,反之称为乡下转型〔downcasting〕,需强制转换动态绑定和多态动态绑定是指在执行期间〔而非编译期间〕判断所引用对象的实际类型,根据其实际类型调用其相应的方法1.要有继承2.要有重写3.父类引用指向子类对象抽象类用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写抽象类不能被实例化抽象方法只需声明,而不需实现finalfinal的变量的值不能被改变final的方法不能被重写final的类不能被继承接口interface实现implements接口是抽象方法和常量值得定义的集合从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含了常量和方法的定义,而没有变量和方法的实现多个无关的类可以实现同一个接口一个类可以实现多个无关的接口与继承关系类似,接口与实现类之间存在多态性接口中声明属性默认为publicstaticfinal的,也只能是publicstaticfinal的接口中只能定义抽象方法,而且这些方法默认为public的,也只能是public的接口可以继承其他的接口,并添加新的属性和抽象方法第4章异常处理异常指运行期出现的错误所谓错误是指在程序运行的过程中发生的一些异常事件〔如:除0溢出、数组下标越界、所要读取的文件不存在〕Java程序的执行过程中如出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息并将被提交给Java运行时系统,这个过程称为抛出〔throw〕异常声明该方法可能抛出的异常当Java运行时系统接收到异常对象时,会寻找处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获〔catch〕异常声明该方法可能抛出的异常异常的概念publicvoidsomeMethodpublicvoidsomeMethod〔〕throwssomeException{ if(someCondition()){ thrownewsomeException(“错误原因〞);}………}构造并抛出异常对象构造并抛出异常对象调用该方法时试图捕获异常调用该方法时试图捕获异常RuntimeExceptionExceptionErrorThrowable定义处理异常的代码try{ someMethod();}catch(SomeExceptione){ //异常处理代码;}RuntimeExceptionExceptionErrorThrowable定义处理异常的代码try{ someMethod();}catch(SomeExceptione){ //异常处理代码;}Error:称为错误,由Java虚拟机生成并抛出,包括动态链接失败、虚拟机错误等,程序对其不做处理Exception:所有异常类的父类,其子类对应了各种各样可能出现的异常事件,一般需要用户显式的声明或捕获RuntimeException:特殊的异常,如被0除、数组下标越界等,其产生比较频繁,处理麻烦,如果显式的声明或捕获将会对程序可读性和运行效率影响很大,因此由系统自动检测并将它们交给缺省的异常处理程序〔用户可不必对其处理〕·Exception〔injava.lang〕·ClassNotFoundException·IOException·InterruptedException·RuntimeException·ArithmeticException〔当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零〞时,抛出此类的一个实例〕·NullPointerException·IndexOutOfBoundsException〔指示某排序索引〔例如对数组、字符串或向量的排序〕超出范围时抛出。〕·ArrayIndexOutOfBoundsException〔用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,那么该索引为非法索引。〕·StringIndexOutOfBoundsException〔此异常由String方法抛出,指示索引或者为负,或者超出字符串的大小。对诸如charAt的一些方法,当索引等于字符串的大小时,也会抛出该异常。〕finallytry代码段后跟有一个或多个catch代码段每个catch代码段声明其能处理的一种特定类型的异常并提供处理的方法try代码段后跟有一个或多个catch代码段每个catch代码段声明其能处理的一种特定类型的异常并提供处理的方法当异常发生时,程序会终止当前的流程,根据获取异常的类型去执行相应的catch代码段如果没有异常产生,所有的catch代码段都被略过不执行finally段的代码无论是否发生异常都会执行通常在finally语句中可以进展资源的去除工作,如:关闭翻开的文件,删除临时文件等try{//可能抛出异常的语句}catch(SomeException1e){ ……}catch(SomeException2e){ ……}finally{ ……}捕获SomeException2时try{捕获SomeException2时try{ 语句1; 语句2;}catch〔SomeException1e〕{……}catch〔SomeException2e〕{……}finally{……}后面的语句;没有捕获到异常时try{ 语句1; 语句2;}catch〔SomeException1e〕{……}catch〔SomeException2e〕{……}finally{……}后面的语句;getMessage〔〕方法,用来得到有关异常事件的信息printStackTrace〔〕方法,用来跟踪异常事件发生时执行堆栈的内容在一个try语句块中,基类异常的捕获语句不可以写在子类异常捕获语句的上面,否那么会有编译错误,子类异常不会被捕获先逮小的,再逮大的在一个try语句块中,基类异常的捕获语句不可以写在子类异常捕获语句的上面,否那么会有编译错误,子类异常不会被捕获先逮小的,再逮大的readFile〔〕throwsIOException{……}抛出抛出抛出publicstaticmain〔Strings〕{ try{method2〔〕}catch〔IOExceptione〕{…抛出抛出抛出publicstaticmain〔Strings〕{ try{method2〔〕}catch〔IOExceptione〕{…} }method2〔〕throwsIOException{ method2〔〕}method1〔〕throwsIOException{ readFile〔〕}使用自定义的异常1.通过继承java.lang.Exception类声明自己的异常类2.在方法适当的位置生成自定义异常的实例,并用throw语句抛出3.在方法的声明局部用throws语句声明该方法可能抛出的异常classMyExceptionextendsException{ privateintid; publicMyException(Stringmessage,intid){ super(message);this.id=id; } publicitgetId(){ returnid; }}注意:重写方法需要抛出与原方法所抛出异常类型一致的异常货不抛出异常第5章数组数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变,因此数组分配空间后,每个元素也被按照成员变量的规那么被隐式初始化typevar[];或type[]var;Java语言中声明数组时不能指定其长度〔数组中元素的个数〕例:inta[5];//非法Java中使用关键字new创立数组对象,格式为:数组名=new数组元素的类型[数组元素的个数]注意:元素为引用数据类型的数组中的每一个元素都需要实例化动态初始化:数组定义与为数组元素分配空间和赋值的操作分开进展静态初始化:在定义数组的同时就为数组元素分配空间并赋值每一个数组都有一个属性length指明它的长度,例:a.length的值为数组a的长度〔元素个数〕Java中多维数组的声明和初始化应按从高维到低维的顺序进展例如:inta[][]=newint[3][];a[0]=newint[2];a[1]=newint[4];a[2]=newint[3];//interror[][]=newint[][4];是错误的数组的拷贝使用java.lang.System类的静态方法publicstaticvoidarraycopy(Objectsrc,intsrcPos,Objectdest,intdestPos,intlength)可以用于数组src从第srcPos项元素开场的length个元素拷贝到目标数组dest从destPos项开场的length个位置如果源数据数目超出目标数组边界会抛出IndexOutOfBoundsException异常第6章常用类StringJava.lang.String类代表不可变的字符序列字符串是常量;它们的值在创立之后不能更改。字符串缓冲区支持可变的字符串。因为String对象是不可变的,所以可以共享。例如:Stringstr="abc";等效于chardata[]={'a','b','c'};Stringstr=newString(data);Java语言提供对字符串串联符号〔"+"〕以及将其他对象转换为字符串的特殊支持。字符串串联是通过StringBuilder〔或StringBuffer〕类及其append方法实现的。字符串转换是通过toString方法实现的,该方法由Object类定义,并可被Java中的所有类继承。“xxxx〞为该类的一个对象String类的常见构造方法:String〔Stringoriginal〕:创立一个String对象为original的拷贝String〔char[]value〕:用一个字符数组创立一个String对象String〔char[]value,intoffset,intcount〕:用一个字符数组从offset项开场的count个字符序列创立一个String对象publicclassTest{publicstaticvoidmain(String[]args){Strings1=“hello〞;Strings2=“hello〞;System.out.println(s1==s2);//trues1=newString(“hello〞);s2=newString(“hello〞);System.out.println(s1==s2);//falseSystem.out.println(s1.equals(s2));//truechar[]c={‘s’,’u’,’n’,’‘,‘j’,‘a’,‘v’,‘a’};Strings4=newString(c);Strings5=newString(c,4,4);System.out.println(s4);//sunjavaSystem.out.println(s5);//java}}String类常用方法〔1〕publiccharcharAt(intindex):返回字符创中的第index个字符publicintlength():返回字符串的长度publicintindexOf(Stringstr):返回字符串中出现str的第一个位置publicintindexOf(Stringstr,intfromIndex):返回字符串中从fromIndex开场出现str的第一个位置publicbooleanequalsIgnoreCase(Stringanother):比较字符串与another是否一样〔忽略大小写〕publicStringreplace(charoldChar,charnewChar):在字符串中用newChar字符替换oldChar字符publicclassTest{publicstaticvoidmain(String[]args){Strings1=“sunjava〞;s2=“SunJava〞;System.out.println(s1.charAt(1));//u System.out.println(s2.length());//8System.out.println(s1.indexOf(“java〞));//4System.out.println(s1.indexOf(“Java〞));//-1System.out.println(s1.equals(s2));//falseSystem.out.println(s1.equalsIngoreCase(s2));//trueStrings=“我是程序员,我在学java〞;Stringsr=s.replace(‘我’,’你’);System.out.println(sr);//你是程序员,你在学java}}String类常用方法〔2〕publicbooleanstartsWith(Stringprefix):判断字符串是否以prefix字符串开头publicbooleanendsWith(Stringsuffix):判断字符串是否以suffix字符串结尾publicStringtoUpperCase():返回一个字符串为该字符串的大写形式publicStringtoLowerCase():返回一个字符串为该字符串的小写形式publicStringsubstring(intbeginIndex):返回该字符串从beginIndex开场到结尾的子字符串publicStringsubstring(intbeginIndex,intendIndex):返回该字符串从beginIndex开场到endIndex结尾的子字符串publicStringtrim():返回将该字符串去掉开头和结尾空格后的字符串publicclassTest{publicstaticvoidmain(String[]args){Strings=“WelcometoJavaWorld!〞;Strings1=“sunjava〞;System.out.println(s.startWith(“Welcome〞));//trueSystem.out.println(s.endWith(“World〞));//falseStringsL=s.toLowerCase();StringsU=s.toUpperCase();System.out.println(sL);//welcometojavaworldSystem.out.println(sU);//WELCOMETOJAVAWORLDStringsubS=s.substring(11);System.out.println(subS);//JavaWorldStringsp=s1.trim();System.out.println(sp);//sunjava}}String类常用方法〔3〕静态重载方法publicstaticStringvalueOf(…)可以将基本类型数据转换为字符串,例:publicstaticStringvalueOf(doubled)publicstaticStringvalueOf(inti)……publicString[]split(Stringregex)可以将一个字符串按照指定的分隔符〔regex〕分隔,返回分隔后的字符串数组publicclassTest{publicstaticvoidmain(String[]args){intj=1234567;StringsNum=String.valueOf(j);System.out.println(“j是〞+sNum.length()+“位数〞);//j是7位数Strings=“Mary,F,1988〞;String[]sPlit=s.split(“,〞);for(inti=0;i<sPlit.length;i++)System.out.println(sPlit[i]);//Mary/nF/n/1976}}StringBuffer类java.lang.StringBuffer代表可变的字符序列StringBuffer和String类似,但StringBuffer可以对其字符串进展改变Strings1=“hello〞;Strings2=“world〞;s2s1helloworldhelloworlds1=s1+s2;s2s1helloworldhelloworldStringBuffer类常见的构造方法StringBuffer〔〕:创立一个不包含字符序列的“空〞的StringBuffer对象StringBuffer〔Stringstr〕:创立一个StringBuffer对象,包含与String对象一样的字符序列StringBuffer常用方法重载方法publicStringBufferappend(…):可以为该StringBuffer对象添加字符序列,返回添加后的该StringBuffer对象引用,例如:publicStringBufferappend(Stringstr)publicStringBufferappend(StringBuffersbuf)publicStringBufferappend(char[]str)publicStringBufferappend(char[]str,intoffset,intlen)publicStringBufferappend(doubled)publicStringBufferappend(Objectobj)重载方法publicStringBufferinsert(…)可以为该StringBuffer对象在指定位置插入字符序列,返回修改后的该StringBuffer对象引用,例:publicStringBufferinsert(intoffset,Stringstr)publicStringBufferinsert(intoffset,doubled)…方法publicStringBufferdelete(intstart,intend)可以删除从start开场到end-1为止的一段字符序列,返回修改后的该StringBuffer对象引用和String类含义类似的方法;publicintindexOf(Stringstr)publicintindexOf(Stringstr,intfromIndex)publicStringsubstring(intstart)publicStringsubstring(intstart,intend)publicintlength()publicStringBufferreverse()用于将字符序列逆序,返回修改后的该StringBuffer对象的引用publicclassTest{publicstaticvoidmain(String[]args){Strings=“Mircosoft〞;char[]a={‘a’,’b’,’c’};StringBuffersb1=newStringBuffer(s);sb1.append(‘/’).append(“IBM〞).append(‘/’).append(“Sun〞);System.out.println(sb1);//Mircosoft/IBM/SunStringBuffersb2=newStringBuffer(“数字〞);for(inti=0;i<=9;i++)sb2.append(i);System.out.priintln(sb2);//数字0123456789sb2.delete(8,sb2.length()).insert(0,a);System.out.println(sb2);//abc数字012345System.out.println(sb2.reverse());//54321字数cba}}基本数据类型包装类包装类〔如:Integer,Double等〕这些类封装了一个相应的基本数据类型值,并为其提供了一系列操作以java.lang.Integer类为例,构造方法:Integer(intvalue)Integer(Strings)常见方法publicstaticfinalintMAX_VALUE最大的int型数〔231-1〕publicstaticfinalintMIN_VALUE最小的int型数〔-231〕publiclonglongValue():返回封装数据的long型值publicdoubledoubleValue():返回封装数据的double型值publicintintValue():返回封装数据的int型值publicstaticintparseInt(Strings)throwsNumberFormatException:将字符串解析成int型数据,返回该数据publicstaticIntegervalueOf(Strings)throwsNumberFormatException:返回Integer对象,其中封装的整型数据为字符串s所表示Math类java.lang.Math提供了一系列静态方法用于科学计算,其方法的参数和返回值类型一般为double型abs:绝对值acos,asin,atan,cos,sin,tansqrt:平方根pow(doublea,doubleb):a的b次幂log:自然对数exp:e为底指数max(doublea,doubleb)min(doublea,doubleb)random():返回0.0到1.0〔不包含〕的随机数longround(doublea):double型的数据a转换为long型〔四舍五入〕toDegrees(doubleangrad):弧度->角度toRadians〔doubleangdeg〕:角度->弧度File类java.io.File类代表系统文件名〔路径和文件名〕常见构造方法:publicFile(Stringpathname):以pathname为路径创立File对象,如果pathname是相对路径,那么默认的当前路径在系统属性user.dir中存储publicFile(Stringparent,Stringchild):以parent为父路径,child为子路径创立File对象File的静态属性Stringseparator存储了当前系统的路径分隔符常用方法通过File对象可以访问文件的属性publicbooleancanRead()publicbooleancanWrite()publicbooleanexists()publicbooleanisDirectory()publicbooleanisFile()publicbooleanisHidden()publiclonglastModified():返回此抽象路径名表示的文件最后一次被修改的时间publiclonglength():返回此抽象路径名表示的文件的长度。如果此路径表示一个目录,那么返回值不确定publicStringgetName():返回由此抽象路径名表示的文件或目录的名称publicStringgetPath():将此抽象路径名转换为一个路径名字符串通过File对象创立空文件或目录〔在该对象所指的文件或目录不存在的情况下〕publicbooleancreateNewFile()throwsIOExceptionpublicbooleandelete()publicbooleanmkdir():创立此抽象路径名指定的目录publicbooleanmkdirs():创立此抽象路径名指定的目录,包括所有必需但不存在的父目录importjava.io.*;publicclassTestFile{publicstaticvoidmain(String[]args){Stringseparator=File.separator;Stringfilename="myfile.txt";Stringdirectory="mydir1"+separator+"mydir2";//Stringdirectory="mydir1/mydir2";//Stringdirectory="mydir1\\mydir2";Filef=newFile(directory,filename);if(f.exists()){System.out.println("文件名:"+f.getAbsolutePath());System.out.println("文件大小:"+f.length());}else{f.getParentFile().mkdirs();try{f.createNewFile();}catch(IOExceptione){e.printStackTrace();}}}}第7章容器JDK所提供的容器API位于java.utilCollection接口-定义可存取一组对象的方法,其子接口Set和List分别定义了存储方式Set中的数据对象没有顺序且不可以重复List中的数据对象有顺序且可以重复Map接口定义了存储“键〔key〕—值〔value〕映射对〞的方法HashMap<interface>MapArrayListLinkedListHashSet<interface>List<interface>Set<interface>CollectionHashMap<interface>MapArrayListLinkedListHashSet<interface>List<interface>Set<interface>CollectionCollection接口中所定义的方法:intsize()booleanisEmpty()voidclear()booleancontains(Objectelement)booleanadd(Objectelement):只能添加对象,不能添加根基类型,添加根基类型包装类对象〔根基类型一般存放在栈上,站上的内容随时有可能被清空,不能保存〕booleanremove(Objectelement):调用对象的equals〔〕方法Iteratoriterator()booleancontainAll(Collectionc)booleanaddAll(Collectionc);booleanremoveAll(Collectionc)booleanretainAll(Collectionc):交集Object[]toArray()容器类对象在调用remove、contains等方法时需要比较对象是否相等,这时会涉及到对象类型的equals〔〕方法和hashCode〔〕方法;对于自定义的类型,需要重写equals()和hashCode()方法以实现自定义的对象相等规那么,重写equals()方法的同时,必须重写hashCode()方法注意:相等的对象应该具有相等的hashcodesIterator接口所有实现了Collection接口的容器类都有一个iterator()方法用以返回一个实现了Iterator接口的对象Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作Iterator接口定义了以下方法:booleanhasNext():判断游标右边是否有元素Objectnext():返回游标右边的元素并将游标移动到下一个位置(next()的返回值为Object类型,需要转换为相应类型)voidremove():删除游标左面的元素,在执行完next之后该操作只能执行一次游标元素next()Iterator对象的remove()方法时在迭代过程中删除元素的唯一的安全方法foreach语句foreach对于遍历array或Collection相当方便for(:)…;缺陷:数组:不能方便的访问下标值集合:与使用Iterator相比,不能方便的删除集合中的内容总结:除了简单遍历并阅读出其中的内容外,不建议使用foreachSet接口Set接口是Collection的子接口,Set接口没有提供额外的方法,但实现Set接口的容器类中的元素师没有顺序的,而且不可以重复〔即一样的元素不会被参加〕,有HashSet,TreeSet等List接口List接口是Collection的子接口,实现List接口的容器类中的元素师有顺序的,而且可以重复List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素,有ArraryList,LinkedList等List接口常用方法Objectget(intindex)Objectset(intindex,Objectelement):替换voidadd(intindex,Objectelement):插入booleanremove(intindex)intindexOf(Objecto):返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,那么返回-1intlastIndexOf(Objecto)Lists常用算法类java.util.Collections提供了一些静态方法实现了基于List容器的一些常用算法voidsort(List):对List容器内的元素排序voidshuffle(List):对List容器内的对象进展随机排序voidreverse(List):对List容器内的对象进展逆序排序voidfill(List,Object):用一个特定的对象重写整个List容器voidcopy(Listdest,Listsrc):将srcList容器内容拷贝到destList容器内intbinarySearch(List,Object):对于顺序的List容器,采用折半查找法查找特定对象所有可以“排序〞的类都实现了java.lang.Comparable接口,Comparable接口中只有一个方法:publicintcompareTo(Objectobj),该方法:返回0表示this==obj;返回正数表示this>obj;返回负数表示this<obj实现Comparable接口的类通过实现comparaTo方法从而确定该类对象的排序方式若何选择数据构造衡量标准:读的效率和改的效率Array读快改慢Linked读慢改快Hash介于上两者之间Map接口实现Map接口的类用来存储键-值对Map接口的实现类有HashMap和TreeMapMap类中存储的键-值对通过键来标识,所以键值不能重复Map类常用方法:Objectput(Objectkey,Objectvakue)Objectget(Objectkey)Objectremove(Objectkey)booleancontainKey(Objectkey)booleancontainValue(Objectvalue)intsize()booleanisEmpty()voidputAll(Mapt):从指定映射中将所有映射关系复制到此映射中voidclear()importjava.util.*;publicclassTest{privatestaticfinalIntegerONE=newInteger(1);//privatestaticfinalintONE=1;publicstaticvoidmain(String[]args){Mapm=newHashMap();for(inti=0;i<args.length;i++){Integerfreq=(Integer)m.get(args[i]);//intfreq=(Integer)m.get(args[i])==null?0:(Integer)m.get(args[i]);m.put(args[i],(freq==null?ONE:newInteger(Value()+1)));//m.put(args[i],freq==0?ONE:freq+1);}System.out.println(m.size()+“distinctwordsdetected:〞);System.out.println(m);}}Auto_boxing/unboxing在适宜的时机自动打包、解包自动将根基类型装换成对象自动将对象装换为根基类型起因:JDK1.4以前类型不明确:起因:JDK1.4以前类型不明确:装入集合的类型都被当做Object对待,从而失去自己的实际类型从集合中取出时往往需要转型,效率低,容易产生错误解决方法:在定义集合的时候同时定义集合中对象的类型可以在定义Conllection的时候指定也可以在循环时用Iterator指定好处:增强程序的可读性和稳定性importjava.util.*;publicclassBasicGeneric{publicstaticvoidmain(String[]args){List<String>c=newArrayList<String>();c.add("aaa");c.add("bbb");c.add("ccc");for(inti=0;i<c.size();i++){Strings=c.get(i);System.out.println(s);} Collection<String>c2=newHashSet<String>();c2.add("aaa");c2.add("bbb");c2.add("ccc");for(Iterator<String>it=c2.iterator();it.hasNext();){Strings=it.next();System.out.println(s);}}}第8章流java.io按数据流的方向的不同可以分为:输入流和输出流〔站在程序的角度上〕按处理数据单位不同可以分为字节流和字符流按功能不同可以分为节点流和处理流字节流字符流输入流InputStreamReader输出流OutputStreamWriter节点流为可以从一个特定的数据源〔节点〕读写数据〔如:文件,内存〕程序数据源 节点流程序数据源数据源处理流是“连接〞在已存在的流〔节点流或处理流〕之上,通过对数据的处理为程序提供更为强大的读写功能数据源数据源程序程序数据源程序程序InputStream继承自InputStream的流都是用于向程序中输入数据,且数据的单位为字节〔8bit〕;以以下图中深色的为节点流,浅色的为处理流PushbackInputStreamBufferdInputStreamDataInputStreamLineNumberInputStreamInputStreamObjectInputStreamStringBufferInputStreamSequenceInputStreamByteArrayInputStreamFilterInputStreamPipedInputStreamFileInputStreamPushbackInputStreamBufferdInputStreamDataInputStreamLineNumberInputStreamInputStreamObjectInputStreamStringBufferInputStreamSequenceInputStreamByteArrayInputStreamFilterInputStreamPipedInputStreamFileInputStreamInputStream的基本方法intread()throwsIOException//读一个字节并以整数的形式返回〔0~255〕,如果返回-1表示已到输入流的末尾intread(byte[]buffer)throwsIOException//读取一系列字节并存储到一个数组buffer,返回实际读取的字节数,如果读取前已到输入//流的末尾返回-1intread(byte[]buffer,intoffset,intlength)throwsIOException//读取length个字节,并存储到一个字节数组buffer,从offset位置开场,返回实际读取的//字节数,如果读取前已到输入流的末尾返回-1voidclose()throwsIOException//关闭流释放内存资源longslip(longn)throwsIOException//跳过n个字节不读,返回实际跳过的字节数OutputStream继承自OutputStream的流时用于程序中的输入数据,且数据的单位为字节〔8bit〕;以以下图中深色的为节点流,浅色的为处理流FileOutputStreamFileOutputStreamOutputStreamPrintStreamBufferdOutputStreamDataOutputStreamObjectOutputStreamByteArrayOutputStreamFilterOutputStreamPipedOutputStreamOutputStreamPrintStreamBufferdOutputStreamDataOutputStreamObjectOutputStreamByteArrayOutputStreamFilterOutputStreamPipedOutputStreamOutputStream的基本方法voidwrite(intb)throwsIOException//向输出流中写入一个字节的数据,该字节数据位为参数b的低8位voidwrite(byte[]b)throwsIOException//将一个字节类型的数组中的数据写入输出流voidwrite(byte[]b,intoff,intlen)throwsIOException//将一个字节类型的数组中的从指定位置〔off〕开场的len个字节写入到输出流voidclose()throwsIOException//关闭流释放内存资源voidflush()throwsIOException//将输出流中缓冲的数据全部写出到目的地Reader继承自Reader的流都是用于向程序中输入数据,且数据的单位为字符〔16bit〕;以以下图中深色为节点流,浅色为处理流LineNumberReaderBufferedReaderLineNumberReaderBufferedReaderReaderPushBackReaderFileReaderStringReaderPipedReaderFilterReaderInputStreamReaderCharArrayReaderReaderPushBackReaderFileReaderStringReaderPipedReaderFilterReaderInputStreamReaderCharArrayReaderReader的基本方法intread()throwsIOException//读取一个字符并以整数的形式返回〔0~255〕,如果返回-1已到输入流的末尾intread(char[]cbuf)throwsIOException//读取一系列字符并存储到一个数组buffer,返回实际读取的字符数,如果读取前已到输入流的末尾返回-1intread(char[]cbuf,intoffset,intlength)throwsIOException//读取length个字符,并存储到一个数组buffer,从offset位置开场,返回实际读取的字符数,如果读取前已到输入流的末尾返回-1voidclose()throwsIOException//关闭流释放内存资源longslip(longn)throwsIOException//跳过n个字符不读,返回实际跳过的字符数Write继承自Write的流都是用于程序中输出数据,且数据的单位为字符〔16bit〕;以以下图中深色的为节点流,浅色的为处理流BufferedWriterBufferedWriterWriteFileWriterFilterWriterStringWriterPipedWriterFilterWriterOutputStreamWriterCharArrayWriterWriteFileWriterFilterWriterStringWriterPipedWriterFilterWriterOutputStreamWriterCharArrayWriterWrite的基本方法voidwrite(intc)throwsIOException//向输出流中写入一个字符数据,该字符数据为参数c的低16位voidwrie(char[]cbuf)throwsIOException//将一个字符类型的数组中的数据写入输出流voidwrite(char[]cbuf,intoffset,intlength)throwsIOException//将一个字符类型的数组中的从指定位置〔offset〕开场的length个字符写入到输出流voidwrite(Stringstring)throwsIOException//将一个字符串中的字符写入到输出流voidwrite(Stringstring,intoffset,iintlength)throwsIOException//将一个字符串从offset开场的length个字符写入到输出流voidclose()throwsIOException//关闭流释放内存资源voidflush()throwsIOException//将输出流中缓冲的数据全部写出到目的地节点流类型类型字符流字节流File〔文件〕FileReaderFileWriterFileInputStreamFileOutputStreamMemoryArrayCharArrayReaderCharArrayWriterByteArrayInputStreamByteArrayOutputStreamMemoryStringStringReaderStringWriter-Pipe〔管道〕PipedReaderPipedWriterPipedInputStreamPipedOutputStream访问文件FileInputStream和FileOutputStream分别继承自InputStream和OutputStream,用于向文件中输入和输出字节FileInputStream和FileOutputStream的常用构造方法:FileInputStream(Stringname)throwsFileNotFoundExceptionFileInputStream(Filefile)throwsFileNotFoundExceptionFileOutputStream(Stringname)throwsFileNotFoundExceptionFileOutputStream(Filefile)throwsFileNotFoundExceptionFileOutputStream(Filefile,booleanappend)throwsFileNotFoundException:创立一个向具有指定name的文件中写入数据的输出文件流。如果第二个参数为true,那么将字节写入文件末尾处,而不是写入文件开场处importjava.io.*;publicclassTestFileInputStream{publicstaticvoidmain(String[]args){intb=0;FileInputStreamin=null;try{in=newFileInputStream("d:\\java\\io\\TestFileInputStream.java");}catch(FileNotFoundExceptione){System.out.println("找不到指定文件");System.exit(-1);}try{longnum=0;while((b=in.read())!=-1){System.out.print((char)b);num++;}in.close();System.out.println();System.out.println("共读取了"+num+"个字节");}catch(IOExceptione1){System.out.println("文件读取错误");System.exit(-1);}}}importjava.io.*;publicclassTestFileOutputStream{publicstaticvoidmain(String[]args){ intb=0; FileInputStreamin=null; FileOutputStreamout=null; try{ in=newFileInputStream("d:/java/HelloWorld.java"); out=newFileOutputStream("d:/java/io/HW.java"); while((b=in.read())!=-1){ out.write(b); } in.close(); out.close(); }catch(FileNotFoundExceptione2){ System.out.println("找不到指定文件");System.exit(-1); }catch(IOExceptione1){ System.out.println("文件复制错误");System.exit(-1); } System.out.println("文件已复制");}}FileReader和FileWriter与FileInputStream和FileOutputStream类似,只是读取写出字节和字符的差异处理流类型处理类型字符流字节流BufferingBufferedReaderBufferedWriterBufferedInputStreamBufferedOutputStreamFilteringFilterReaderFilterWriterFilterInputStreamFilterOutputStreamConvertingbetweenbytesandcharacterInputStreamReaderOutputStreamWriterObjectSerialization-ObjectInputStreamObjectOutputStreamDataconversion-DataInputStreamDataOutputStreamCountingLineNumberReaderLineNumberInputStreamPeekingaheadPushbackReaderPushbackInputStreamPrintingP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 兽用原料药制造工达标评优考核试卷含答案
- 丁苯胶乳装置操作工班组协作模拟考核试卷含答案
- 甲酸装置操作工创新方法考核试卷含答案
- 插花花艺师成果水平考核试卷含答案
- 电子竞技运营师岗前理论水平考核试卷含答案
- 护理教育学第九章:护理教育与国际交流
- 护理团队团队发展与合作精神
- 莫达非尼抗癫痫作用及其机制的实验与理论探究
- 药用植物牛大力种子萌发:多因素影响与生理生化特性解析
- 荧光探针:开启肿瘤精准诊疗新时代
- JJF 1375-2024机动车发动机转速测量仪校准规范
- 医药生产企业质量手册
- 河南省注册税务师协会财务预决算管理制度
- 2024年河北石家庄市市属国有企业招聘笔试参考题库附带答案详解
- 上海市住宅物业管理规定实施细则
- 2023非水反应型双组分聚氨酯灌浆材料
- 中小学计算机教室学生上机登记表
- 旅馆业突发事件应急处置预案
- 某钢厂热风炉炉体及框架结构安装施工方案
- GB/T 5269-2008传动与输送用双节距精密滚子链、附件和链轮
- GB/T 20145-2006灯和灯系统的光生物安全性
评论
0/150
提交评论