




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java SE第五讲:1.关系运算符:大于()、小于(=)、小于等于(=),关系运算的结果是个boolean值。2.逻辑运算符:重点讲解两个,逻辑运算符本身也返回一个boolean值。1)逻辑与:使用&表示,逻辑与是个双目运算符(即有两个操作数的运算符),只有当两个操作数都为真的时候,结果才为真;其余情况结果均为假。逻辑与表示的并且的意思。2)逻辑或:使用|表示,逻辑或也是个双目运算符,只有当两个操作数都为假的时候,结果才为假;其余情况结果均为真。逻辑或表示或者的意思。3.关于逻辑运算符的短路特性。1)逻辑与:如果第一个操作数为false,那么结果肯定就是false,所以在这种情况下,将不会执行逻辑与后面的运算了,即发生了短路。2)逻辑或:如果第一个操作数为true,那么结果肯定就是true,所在在这种情况下,将不会执行逻辑或后面的运算了,即发生了短路。4.关于变量的自增与自减运算。1)关于int b=a+,作用是将a的值先赋给b,然后再让a自增1.2)关于int b=+a,作用是将a的值先自增1,然后将自增后的结果赋给b。Java SE第六节1.条件运算符(三元表达式),其形式为:type d=a?b:c;具体化形式为:int d=21?3:4;2.轻量级的文本编辑器:UltraEdit、Editplus、vi、vim、gvim3.流程控制语句if的用法为:第一种形式:if(布尔表达式)/待执行的代码第二种形式:if(布尔表达式)/待执行的代码else/待执行的代码第三种形式:if(布尔表达式)/待执行的代码else if(布尔表达式)/待执行的代码else if(布尔表达式)/待执行的代码else/待执行的代码4.switch语句,使用形式为:switch(变量)/此处的变量类型就目前所学内容来看,只能为4种类型:byte,short,int,char。case常量1:/待执行的代码break;case常量2:/待执行的代码break;case常量3:/待执行的代码break;default:/待执行的代码虽然case语句中的break是可选的,但在绝大多数情况下,如果没有break,程序的逻辑就会发生错误,因此,通常情况下都需要加上break。Java SE第七讲1.Java中的循环控制语句一共有3种,分别是while,dowhile以及for循环。2.while循环,形式为:while(布尔表达式)/待执行的代码3.dowhile循环,新式为:do/待执行的代码while(布尔表达式);4.while与dowhile之间的区别:如果布尔表达式的第一次判断就为false,那么while循环一次也不执行;dowhile循环则会执行一次。如果布尔表达式第一次判断为true,那么while循环与dowhile循环等价。5.for循环(使用最多的一种循环),形式为:for(变量初始化;条件判断;步进)/待执行的代码for循环的执行过程:1)执行变量初始化。2)执行条件判断。如果条件判断结果为假,那么退出for循环,开始执行循环后面的代码;如果条件判断为真,执行for循环里面的代码。3)执行步进。4)重复步骤2。Java SE第八讲1.break语句:经常用在循环语句中,用于跳出整个循环,执行循环后面的代码。2.continue语句:经常用在循环语句中,用于跳出当前的这个循环(或者是跳出本次循环),开始下一次循环的执行。3.break与continue可以搭配标签使用,在实际开发中,根本没有人会将break与continue搭配标签来使用。4.面向对象程序设计(Object Oriented Programming,OOP;Object Oriented Design,OOD)。什么是面向对象?在面向对象程序设计中有两个重要的概念:类(class)与对象(object)。5.类:类是一种抽象的概念,类中包含了数据(通常使用名词来表示)与对数据的操纵(通常使用动词来表示)。比如说人就是一种抽象的概念,人具有姓名、年龄、身高等数据,还有吃饭、跑步等操纵数据的动作。6.对象:对象是一种具体的概念,是类的一种具体表示方式。比如说人是一个类,而张三、李四、王五等具体的人就是对象。7.类所包含的内容,类一共包含两部分内容:1)数据,数据在类中称作属性(Property或者Attribute)或者叫成员变量(Member variable)。2)对数据的操纵,这种操纵在类中称作方法(method)。Java SE第九讲1.面向对象程序设计的三大基本特征:继承(Inheritence)、封装(Encapsulation)、多态(Polymorphism)2.封装:类包含了数据与方法,将数据与方法放在一个类中就构成了封装。3.如何定义类?修饰符class类的名字/类的内容(包含了属性与方法)4.方法。如何定义方法?修饰符返回类型方法名称(参数1,参数2,参数3)/方法体5.main方法是整个Java程序的入口点,如果类的定义中没有main方法,则程序无法执行。6.方法定义不能嵌套,也就说不能在一个方法中定义另外一个方法。方法只能定义在类中。7.关于方法的执行:首先需要定义方法,接下来就可以使用方法(调用方法),当方法调用完毕后,方法可以返回值。方法到底是否返回值是由方法的定义决定的。8.如何生成对象?通过类来生成对象(通常使用new关键字来生成对象)。public class Person类名变量名=new类名();Person person=new Person();Person person2=new Person();Person person3=new Person();9.方法调用需要通过对象来完成,方法调用的形式是:对象变量.方法名(参数值1,参数值2,参数值3.);10.关于方法的注意事项:1)在方法定义中,方法的返回类型与return后面的变量或常量类型保持一致。2)在方法调用时,给方法传递的参数需要与方法定义时的参数保持一致(参数个数一致,参数类型一致)。3)方法定义时的返回类型与接收方法返回值的变量类型保持一致。11.public int add(int a,int b)return a+b;方法定义时的参数叫做形式参数。int a=test.add(8,3);方法调用时所赋予的具体值叫做实际参数。12.关键字void表示方法不返回值。13.如果方法不返回值,那么声明方法的时候使用void关键字,在方法定义中可以有两种情况实现不返回值:1)不使用return语句。2)使用return,但return后面没有任何值或者变量,return后面只有一个分号,表示退出方法,返回到方法的调用端。使用方式:return;Java SE第十讲1.类中的属性又叫做成员变量(member variable),属性用英文表示为property或者attribute。2.对象(Object)又叫做实例(Instance)。生成一个对象的过程又叫做实例化。3.命名约定1)类:首字母大写,如果一个类名由多个单词构成,那么每个单词的首字母都大写,中间不使用任何的连接符。比如Person类,MemberTest类。2)方法:首字母小写。如果一个方法由多个单词构成,那么第一个单词的所有字母全都小写,从第二个单词开始,每个单词的首字母大写。比如add,addThreeInt。3)属性:命名约定与方法相同。比如age,ageOfPerson。4.属性需要定义在类中,又叫做成员变量;而定义在方法中的变量叫做局部变量。5.如何定义属性?public class Person修饰符类型属性名称;如何使用属性?与方法一样,使用.运算符。首先需要生成类的实例,然后使用实例+”.”的方式来使用属性。比如:Person person=new Person();person.age6.局部变量使用前必须要声明并赋初值;成员变量使用前必须要声明,但可以不赋初值。7.成员变量与局部变量的联系与区别:1)无论是成员变量还是局部变量,使用前都需要声明(定义)。2)对于局部变量来说,使用前必须要初始化;对于成员变量来说,使用前可以不初始化。如果没有初始化成员变量就开始使用,那么每个类型的成员变量都有一个默认的初始值i.byte、short、int、long类型的初始值为0ii.float、double类型的初始值为0.0iii.char类型的初始值u0000iv.boolean类型的初始值为false8.引用类型(reference type):引用类型是用在对象上的。一个对象可以被多个引用所指向,但同一时刻,每个引用只能指向唯一的一个对象。如果一个对象被多个引用所指向,那么无论哪个引用对对象的属性进行了修改,都会反映到其他的引用当中。Java SE第十一讲1.如果一个类包含了属性与方法,那么该类的每一个对象都具有自己的属性,但无论一个类有多少个对象,这些对象共享同一个方法。2.关于方法参数传递的总结:对于Java中的方法参数传递,无论传递的是原生数据类型还是引用类型,统一是传值(pass by value)。3.什么类型的引用就能指向什么类型的对象,比如People类型的引用就能指向People类型的对象,但不能指向Student类型的对象。比如:People people=new People();/正确People people=new Student();/错误4.构造方法(Constructor):构造方法用于完成对象属性的初始化工作,构造方法的特点:1)构造方法的名字必须与类名完全一致(包含大小写)2)构造方法没有返回值,连void也不能出现。3)如果在定义一个类的时候,没有为类声明构造方法,那么Java编译器会自动为类添加一个没有参数且方法体为空的构造方法(默认的构造方法)4)如果在定义一个类的时候,为类声明了构造方法,那么Java编译器就不会再为类添加构造方法了。5)不能显式调用类的构造方法,构造方法通常是通过new关键字隐式调用。5.new关键字在生成对象时完成了三件事情:1)为对象开辟内存空间。2)调用类的构造方法。3)将生成的对象的地址返回。6.默认的构造方法:构造方法没有参数且方法体为空。7.使用new来生成对象的时候,后面的小括号()表示构造方法的参数列表,如果构造方法不接收参数,那么小括号中的内容为空;如果构造方法接收参数,那么小括号中的实际参数就需要与构造方法定义中的形式参数保持一致(参数数量一致、参数类型一致、按照顺序逐一赋值)。JAVA SE Lesson 11.类是一种抽象的概念,对象是类的一种具体表示形式,是具体的概念。先有类,然后由类来生成对象(Object)。对象又叫做实例(Instance)。2.类由两大部分构成:属性以及方法。属性一般用名词来表示,方法一般用动词来表示。3.如果一个java源文件中定义了多个类,那么这些类中最多只能有一个类是public的,换句话说,定义的多个类可以都不是public的。4.在Java中进行方法的参数传递时,无论传递的是原生数据类型还是引用类型,参数传递方式统一是传值(pass by value)。Java中没有传引用(pass by reference)的概念。5.方法重载(Overload)。表示两个或多个方法名字相同,但方法参数不同。方法参数不同有两层含义:1)参数个数不同。2)参数类型不同。注意:方法的返回值对重载没有任何影响。6.构造方法重载:只需看参数即可。如果想在一个构造方法中调用另外一个构造方法,那么可以使用this()的方式调用,this()括号中的参数表示目标构造方法的参数。this()必须要作为构造方法的第一条语句,换句话说,this()之前不能有任何可执行的代码。7.继承(Inheritence):Java是单继承的,意味着一个类只能从另一个类继承(被继承的类叫做父类【基类,base class】,继承的类叫做子类),Java中的继承使用extends关键字。8.当生成子类对象时,Java默认首先调用父类的不带参数的构造方法,然后执行该构造方法,生成父类的对象。接下来,再去调用子类的构造方法,生成子类的对象。【要想生成子类的对象,首先需要生成父类的对象,没有父类对象就没有子类对象。比如说:没有父亲,就没有孩子】。9.super关键字:super表示对父类对象的引用。10.如果子类使用super()显式调用父类的某个构造方法,那么在执行的时候就会寻找与super()所对应的构造方法而不会再去寻找父类的不带参数的构造方法。与this一样,super也必须要作为构造方法的第一条执行语句,前面不能有其他可执行语句。11.关于继承的3点:1)父类有的,子类也有2)父类没有的,子类可以增加3)父类有的,子类可以改变12.关于继承的注意事项1)构造方法不能被继承2)方法和属性可以被继承3)子类的构造方法隐式地调用父类的不带参数的构造方法4)当父类没有不带参数的构造方法时,子类需要使用super来显式地调用父类的构造方法,super指的是对父类的引用。5)super关键字必须是构造方法中的第一行语句。13.方法重写(Override):又叫做覆写,子类与父类的方法返回类型一样、方法名称一样,参数一样,这样我们说子类与父类的方法构成了重写关系。14.方法重写与方法重载之间的关系:重载发生在同一个类内部的两个或多个方法。重写发生在父类与子类之间。15.当两个方法形成重写关系时,可以在子类方法中通过super.run()形式调用父类的run()方法,其中super.run()不必放在第一行语句,因此此时父类对象已经构造完毕,先调用父类的run()方法还是先调用子类的run()方法是根据程序的逻辑决定的。16.在定义一个类的时候,如果没有显式指定该类的父类,那么该类就会继承于java.lang.Object类(JDK提供的一个类,Object类是Java中所有类的直接或间接父类)。17.多态(Polymorphism):我们说子类就是父类(玫瑰是花,男人是人),因此多态的意思就是:父类型的引用可以指向子类的对象。Java SE Lesson 21.多态:父类型的引用可以指向子类型的对象。2.Parent p=new Child();当使用多态方式调用方法时,首先检查父类中是否有sing()方法,如果没有则编译错误;如果有,再去调用子类的sing()方法。3.一共有两种类型的强制类型转换:1)向上类型转换(upcast):比如说将Cat类型转换为Animal类型,即将子类型转换为父类型。对于向上类型转换,不需要显式指定。2)向下类型转换(downcast):比如将Animal类型转换为Cat类型。即将父类型转换为子类型。对于向下类型转换,必须要显式指定(必须要使用强制类型转换)。4.抽象类(abstract class):使用了abstract关键字所修饰的类叫做抽象类。抽象类无法实例化,也就是说,不能new出来一个抽象类的对象(实例)。5.抽象方法(abstract method):使用abstract关键字所修饰的方法叫做抽象方法。抽象方法需要定义在抽象类中。相对于抽象方法,之前所定义的方法叫做具体方法(有声明,有实现)。6.如果一个类包含了抽象方法,那么这个类一定是抽象类。7.如果某个类是抽象类,那么该类可以包含具体方法(有声明、有实现)。8.如果一个类中包含了抽象方法,那么这个类一定要声明成abstract class,也就是说,该类一定是抽象类;反之,如果某个类是抽象类,那么该类既可以包含抽象方法,也可以包含具体方法。9.无论何种情况,只要一个类是抽象类,那么这个类就无法实例化。10.在子类继承父类(父类是个抽象类)的情况下,那么该子类必须要实现父类中所定义的所有抽象方法;否则,该子类需要声明成一个abstract class。11.接口(interface):接口的地位等同于class,接口中的所有方法都是抽象方法。在声明接口中的方法时,可以使用abstract关键字,也可以不使用。通常情况下,都会省略掉abstract关键字。12.可以将接口看作是特殊的抽象类(抽象类中可以有具体方法,也可以有抽象方法,而接口中只能有抽象方法,不能有具体方法)。13.类可以实现接口。实现使用关键字implements表示,代表了某个类实现了某个接口。14.一个类实现了某个接口,那么该类必须要实现接口中声明的所有方法。如果该类是个抽象类,那么就无需实现接口中的方法了。15.Java是单继承的,也就是说某个类只能有唯一一个父类;一个类可以实现多个接口,多个接口之间使用逗号分隔。16.多态:所谓多态,就是父类型的引用可以指向子类型的对象,或者接口类型的引用可以指向实现该接口的类的实例。关于接口与实现接口的类之间的强制类型转换方式与父类和子类之间的强制类型转换方式完全一样。17.static关键字:可以用于修饰属性,也可以用于修饰方法,还可以用于修饰类(后面的课程讲)18.static修饰属性:无论一个类生成了多少个对象,所有这些对象共同使用唯一一份静态的成员变量;一个对象对该静态成员变量进行了修改,其他对象的该静态成员变量的值也会随之发生变化。如果一个成员变量是static的,那么我们可以通过类名.成员变量名的方式来使用它(推荐使用这种方式)。19.static修饰方法:static修饰的方法叫做静态方法。对于静态方法来说,可以使用类名.方法名的方式来访问。20.静态方法只能继承,不能重写(Override)。21.final关键字:final可以修饰属性、方法、类。22.final修饰类:当一个类被final所修饰时,表示该类是一个终态类,即不能被继承。23.final修饰方法:当一个方法被final所修饰时,表示该方法是一个终态方法,即不能被重写(Override)。24.final修饰属性:当一个属性被final所修饰时,表示该属性不能被改写。25.当final修饰一个原生数据类型时,表示该原生数据类型的值不能发生变化(比如说不能从10变为20);如果final修饰一个引用类型时,表示该引用类型不能再指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。26.对于final类型成员变量,一般来说有两种赋初值方式:1)在声明final类型的成员变量时就赋上初值2)在声明final类型的成员变量时不赋初值,但在类的所有构造方法中都为其赋上初值。27.static代码块:静态代码块。静态代码块的作用也是完成一些初始化工作。首先执行静态代码块,然后执行构造方法。静态代码块在类被加载的时候执行,而构造方法是在生成对象的时候执行;要想调用某个类来生成对象,首先需要将类加载到Java虚拟机上(JVM),然后由JVM加载这个类来生成对象。28.类的静态代码块只会执行一次,是在类被加载的时候执行的,因为每个类只会被加载一次,所以静态代码块也只会被执行一次;而构造方法则不然,每次生成一个对象的时候都会调用类的构造方法,所以new一次就会调用构造方法一次。29.如果继承体系中既有构造方法,又有静态代码块,那么首先执行最顶层的类的静态代码块,一直执行到最底层类的静态代码块,然后再去执行最顶层类的构造方法,一直执行到最底层类的构造方法。注意:静态代码块只会执行一次。30.不能在静态方法中访问非静态成员变量;可以在静态方法中访问静态的成员变量。可以在非静态方法中访问静态的成员变量。31.总结:静态的只能访问静态的;非静态的可以访问一切。32.不能在静态方法中使用this关键字。Java SE Lesson 31.接口中所声明的方法都是抽象方法。接口中的方法都是public的。2.接口中也可以定义成员变量。接口中的成员变量都是public、final、static的。3.一个类不能既是final,又是abstract的。因为abstract的主要目的是定义一种约定,让子类去实现这种约定,而final表示该类不能被继承,这样abstract希望该类可以被继承而final明确说明该类不能被继承,两者矛盾。因此一个类不能既是final的,又是abstract的。4.Design Pattern(设计模式)。单例模式(Singleton):表示一个类只会生成唯一的一个对象。5.包(package)。用于将完成不同功能的类分门别类,放在不同的目录(包)下。包的命名规则:将公司域名反转作为包名。,com.shengsiyuan(包名),对于包名:每个字母都需要小写。如果定义类的时候没有使用package,那么Java就认为我们所定义的类位于默认包里面(default package)。6.编译带有package声明的Java源文件有两种方式:1)直接编译,然后根据类中所定义的包名,逐一手工建立目录结构,最后将生成的class文件放到该目录结构中(很少使用,比较麻烦)。2)使用编译参数d,方式为javacd.源文件.java,这样在编译后,编译器会自动帮助我们建立好包所对应的目录结构。7.有两个包名,分别是aa.bb.cc与aa.bb.cc.dd,那么我们称后者为前者的子包。8.导入(import),将使用package分离的各个类导入回来,让编译器能够找到所需要的类。9.import的语法:import com.shengsiyuan.PackageTest;10.import com.shengsiyuan.*,表示导入com.shengsiyuan包下面的所有类。11.import aa.bb.*并不会导入aa.bb.cc包下面的类。这时需要这样写:import aa.bb.*;import aa.bb.cc.*;12.关于package、import、class的顺序问题:1)首先需要定义包(package),可选2)接下来使用import进行导入,可选3)然后才是class或interface的定义。13.如果两个类在同一个包下面,那么则不需要导入,直接使用即可。14.访问修饰符(access modifier)。1)public(公共的):被public所修饰的属性和方法可以被所有类访问。2)protected(受保护的):被protected所修饰的属性和方法可以在类内部、相同包以及该类的子类所访问。3)private(私有的):被private所修饰的属性和方法只能在该类内部使用4)默认的(不加任何访问修饰符):在类内部以及相同包下面的类所使用。15.instanceof:判断某个对象是否是某个类的实例。语法形式:引用名instanceof类名(接口名),返回一个boolean值。16.People people=new Man();17.System.out.println(people instanceof People);/结果为true,因为Man是People的子类,根据继承,子类就是父类,因此Man也可以看作是People的实例。18.相等性的比较(=)1)对于原生数据类型来说,比较的是左右两边的值是否相等。2)对于引用类型来说,比较左右两边的引用是否指向同一个对象,或者说左右两边的引用地址是否相同。19.java.lang.Object类。java.lang包在使用的时候无需显式导入,编译时由编译器自动帮助我们导入。20.API(Application Programming Interface),应用编程接口。21.当打印引用时,实际上会打印出引用所指对象的toString()方法的返回值,因为每个类都直接或间接地继承自Object,而Object类中定义了toString(),因此每个类都有toString()这个方法。22.关于进制的表示:16进制,逢16进一,16进制的数字包括:09,A,B,C,D,E,F,23.equals()方法,该方法定义在Object类当中,因此Java中的每个类都具有该方法,对于Object类的equals()方法来说,它是判断调用equals()方法的引用与传进来的引用是否一致,即这两个引用是否指向的是同一个对象。对于Object类的equals()方法来说,它等价于=。24.对于String类的equals()方法来说,它是判断当前字符串与传进来的字符串的内容是否一致。25.对于String对象的相等性判断来说,请使用equals()方法,而不要使用=。26.String是常量,其对象一旦创建完毕就无法改变。当使用+拼接字符串时,会生成新的String对象,而不是向原有的String对象追加内容。27.String Pool(字符串池)28.String s=“aaa”;(采用字面值方式赋值)1)查找String Pool中是否存在“aaa”这个对象,如果不存在,则在String Pool中创建一个“aaa”对象,然后将String Pool中的这个“aaa”对象的地址返回来,赋给引用变量s,这样s会指向String Pool中的这个“aaa”字符串对象2)如果存在,则不创建任何对象,直接将String Pool中的这个“aaa”对象地址返回来,赋给s引用。29.String s=new String(“aaa”);1)首先在String Pool中查找有没有“aaa”这个字符串对象,如果有,则不在String Pool中再去创建“aaa”这个对象了,直接在堆中(heap)中创建一个“aaa”字符串对象,然后将堆中的这个“aaa”对象的地址返回来,赋给s引用,导致s指向了堆中创建的这个“aaa”字符串对象。2)如果没有,则首先在String Pool中创建一个“aaa“对象,然后再在堆中(heap)创建一个”aaa“对象,然后将堆中的这个”aaa“对象的地址返回来,赋给s引用,导致s指向了堆中所创建的这个”aaa“对象。Java SE Lesson 51.对于Java中的常量的命名规则:所有单词的字母都是大写,如果有多个单词,那么使用下划线连接即可。比如说:public static final int AGE_0F_PERSON=20;2.在Java中声明final常量时通常都会加上static关键字,这样对象的每个实例都会访问唯一一份常量值。3.IDE(Integrated Development Environment),集成开发环境。1)NetBeans。/,最高版本是6.9.12)JBuilder。3)Intellij IDEA4)Eclipse(日蚀、月蚀),最高版本3.6.14.集合中存放的依然是对象的引用而不是对象本身。5.ArrayList底层采用数组实现,当使用不带参数的构造方法生成ArrayList对象时,实际上会在底层生成一个长度为10的Object类型数组。6.如果增加的元素个数超过了10个,那么ArrayList底层会新生成一个数组,长度为原数组的1.5倍+1,然后将原数组的内容复制到新数组当中,并且后续增加的内容都会放到新数组当中。当新数组无法容纳增加的元素时,重复该过程。7.对于ArrayList元素的删除操作,需要将被删除元素的后续元素向前移动,代价比较高。8.集合当中只能放置对象的引用,无法放置原生数据类型,我们需要使用原生数据类型的包装类才能加入到集合当中。9.集合当中放置的都是Object类型,因此取出来的也是Object类型,那么必须要使用强制类型转换将其转换为真正的类型(放置进去的类型)。10.关于ArrayList与LinkedList的比较分析1)ArrayList底层采用数组实现,LinkedList底层采用双向链表实现。2)当执行插入或者删除操作时,采用LinkedList比较好。3)当执行搜索操作时,采用ArrayList比较好。类集框架.java.util包中包含了一些在Java 2中新增加的最令人兴奋的增强功能:类集。一个类集(collection)是一组对象。类集的增加使得许多java.util中的成员在结构和体系结构上发生根本的改变。它也扩展了包可以被应用的任务范围。类集是被所有Java程序员紧密关注的最新型的技术.除了类集,java.util还包含了支持范围广泛的函数种各样的类和接口。这些类和接口被核心的Java包广泛使用,同时当然也可以被你编写的程序所使用。对它们的应用包括产生伪随机数,对日期和时间的操作,观测事件,对位集的操作以及标记字符串。由于java.util具有许多特性,因此它是Java中最被广泛使用的一个包。类集概述.Java的类集(Collection)框架使你的程序处理对象组的方法标准化。在Java 2出现之前,Java提供了一些专门的类如Dictionary,Vector,Stack和Properties去存储和操作对象组。尽管这些类非常有用,它们却缺少一个集中,统一的主题。因此例如说使用Vector的方法就会与使用Properties的方法不同。以前的专门的方法也没有被设计成易于扩展和能适应新的环境的形式。而类集解决了这些(以及其他的一些)问题。.类集框架被设计用于适应几个目的。首先,这种框架是高性能的。对基本类集(动态数组,链接表,树和散列表)的实现是高效率的。一般很少需要人工去对这些“数据引擎”编写代码(如果有的话)。第二点,框架必须允许不同类型的类集以相同的方式和高度互操作方式工作。第三点,类集必须是容易扩展和/或修改的。为了实现这一目标,类集框架被设计成包含一组标准的接口。对这些接口,提供了几个标准的实现工具(例如LinkedList,HashSet和TreeSet),通常就是这样使用的。如果你愿意的话,也可以实现你自己的类集。为了方便起见,创建用于各种特殊目的的实现工具。一部分工具可以使你自己的类集实现更加容易。最后,增加了允许将标准数组融合到类集框架中的机制。.算法(Algorithms)是类集机制的另一个重要部分。算法操作类集,它在Collections类中被定义为静态方法。因此它们可以被所有的类集所利用。每一个类集类不必实现它自己的方案,算法提供了一个处理类集的标准方法。.由类集框架创建的另一项是Iterator接口。一个迭代程序(iterator)提供了一个多用途的,标准化的方法,用于每次访问类集的一个元素。因此迭代程序提供了一种枚举类集内容(enumerating the contents of a collection)的方法。因为每一个类集都实现Iterator,所以通过由Iterator定义的方法,任一类集类的元素都能被访问到。.除了类集之外,框架定义了几个映射接口和类。映射(Maps)存储键/值对。尽管映射在对项的正确使用上不是“类集”,但它们完全用类集集成。在类集框架的语言中,可以获得映射的类集“视图”(collection-view)。这个“视图”包含了从存储在类集中的映射得到的元素。因此,如果选择了一个映射,就可以将其当做一个类集来处理。.对于由java.util定义的原始类,类集机制被更新以便它们也能够集成到新的系统里。所以理解下面的说法是很重要的:尽管类集的增加改变了许多原始工具类的结构,但它却不会导致被抛弃。类集仅仅是提供了处理事情的一个更好的方法。.最后的一点:如果你对C+比较熟悉的话,那么你可以发现Java的类集技术与在C+中定义的标准模板库(STL)相似。.在C+中叫做容器(container),而在Java中叫做类集。集合框架中的接口所谓框架就是一个类库的集合。集合框架就是一个用来表示和操作集合的统一的架构,包含了实现集合的接口与类。.除了类集接口之外,类集也使用Comparator,Iterator和ListIterator接口。.简单地说,Comparator接口定义了两个对象如何比较;Iterator和ListIterator接口枚举类集中的对象。.为了在它们的使用中提供最大的灵活性,类集接口允许对一些方法进行选择。可选择的方法使得使用者可以更改类集的内容。支持这些方法的类集被称为可修改的(modifiable)。不允许修改其内容的类集被称为不可修改的(unmodifiable)。如果对一个不可修改的类集使用这些方法,将引发一个UnsupportedOperationException异常。所有内置的类集都是可修改的。.Collection接口是构造类集框架的基础。它声明所有类集都将拥有的核心方法。因为所有类集实现Collection,所以熟悉它的方法对于清楚地理解框架是必要的。其中几种方法可能会引发一个UnsupportedOperationException异常。正如上面解释的那样,这些发生在当类集不能被修改时。当一个对象与另一个对象不兼容,例如当企图增加一个不兼容的对象到一个类集中时。将产生一个ClassCastException异常。.调用add()方法可以将对象加入类集。注意add()带一个Object类型的参数。因为Object是所有类的超类,所以任何类型的对象可以被存储在一个类集中。然而原始类型不行。例如,一个类集不能直接存储类型int,char,double等的值。当然如果想存储这些对象,也可以使用原始类型包装器。可以通过调用addAll()方法将一个类集的全部内容增加到另一个类集中。.可以通过调用remove()方法将一个对象删除。为了删除一组对象,可以调用removeAll()方法。调用retainAll()方法可以将除了一组指定的元素之外的所有元素删除。为了清空类集,可以调用clear()方法.通过调用contains()方法,可以确定一个类集是否包含了一个指定的对象。.为了确定一个类集是否包含了另一个类集的全部元素,可以调用containsAll()方法.当一个类集是空的时候,可以通过调用isEmpty()方法来予以确认。.调用size()方法可以获得类集中当前元素的个数.toArray()方法返回一个数组,这个数组包含了存储在调用类集中的元素。通过在类集和数组之间提供一条路径,可以充分利用这两者的优点.一个更加重要的方法是iterator(),该方法对类集返回一个迭代程序。当使用一个类集框架时,迭代程序对于成功的编程来说是至关重要的.Collection:集合层次中的根接口,JDK没有提供这个接口直接的实现类。.Set:不能包含重复的元素。SortedSet是一个按照升序排列元素的Set。.List:是一个有序的集合,可以包含重复的元素。提供了按索引访问的方式。.Map:包含了key-value对。Map不能包含重复的key。SortedMap是一个按照升序排列key的Map。集合框架中的实现类SortedSet/Set/List/Map/HashSet/LinkedHashSet/TreeSet/ArrayList/LinkedList/SortedMap/HashMap/TreeMaList接口.List接口扩展了Collection并声明存储一系列元素的类集的特性。使用一个基于零的下标,元素可以通过它们在列表中的位置被插入和访问。一个列表可以包含重复元素。.除了由Collection定义的方法之外,List还定义了一些它自己的方法。再次注意当类集不能被修改时,其中的几种方法引发UnsupportedOperation Exception异常。当一个对象与另一个不兼容,例如当企图将一个不兼容的对象加入一个类集中时,将产生ClassCastException异常。.对于由Collection定义的add()和addAll()方法,List增加了方法add(int,Object)和addAll(int,Collection)。这些方法在指定的下标处插入元素。由Collection定义的add(Object)和addAll(Collection)的语义也被List改变了,以便它们在列表的尾部增加元素。.为了获得在指定位置存储的对象,可以用对象的下标调用get()方法。为了给类表中的一个元素赋值,可以调用set()方法,指定被改变的对象的下标。调用indexOf()或lastIndexOf()可以得到一个对象的下标。.通过调用subList()方法,可以获得列表的一个指定了开始下标和结束下标的子列表。subList()方法使得列表处理十分方便。Set接口.集合接口定义了一个集合。它扩展了Collection并说明了不允许复制元素的类集的特性。因此,如果试图将复制元素加到集合中时,add()方法将返回false。它本身并没有定义任何附加的方法。SortedSet接口.SortedSet接口扩展了Set并说明了按升序排列的集合的特性。有项包含在调用集合中时,其中的几种方法引发NoSuchElementException异常。当对象与调用集合中的元素不兼容时,引发ClassCastException异常。如果试图使用null对象,而集合不允许null时,引发NullPointerException异常。.SortedSet定义了几种方法,使得对集合的处理更加方便。调用first()方法,可以获得集合中的第一个对象。调用last()方法,可以获得集合中的最后一个元素。调用subSet()方法,可以获得排序集合的一个指定了第一个和最后一个对象的子集合。如果需要得到从集合的第一个元素开始的一个子集合,可以使用headSet()方法。如果需要获得集合尾部的一个子集合,可以使用tailSet()方法。Collection类.现在,你已经熟悉了类集接口,下面开始讨论实现它们的标准类。一些类提供了完整的可以被使用的工具。另一些类是抽象的,提供主框架工具,作为创建具体类集的起始点。ArrayList类.ArrayList:我们可以将其看作是能够自动增长容量的数组。.利用ArrayList的toArray()返回一个数组。.Arrays.asList()返回一个列表。.迭代器(Iterator)给我们提供了一种通用的方式来访问集合中的元素。.ArrayList类扩展AbstractList并执行List接口。ArrayList支持可随需要而增长的动态数组。在Java中,标准数组是定长的。在数组创建之后,它们不能被加长或缩短,这也就意味着你必须事先知道数组可以容纳多少元素。但是,你直到运行时才能知道需要多大的数组。为了解决这个问题,类集框架定义了ArrayList。本质上,ArrayList是对象引用的一个变长数组。也就是说,ArrayList能够动态地增加或减小其大小。数组列表以一个原始大小被创建。当超过了它的大小,类集自动增大。当对象被删除后,数组就可以缩小。.ArrayList有如下的构造函数ArrayList()ArrayList(Collection c)ArrayList(int capacity)第一个构造函数建立一个空的数组列表。第二个构造函数建立一个数组列表,该数组列表由类集c中的元素初始化。第三个构造函数建立一个数组列表,该数组有指定的初始容量(capacity)。容量是用于存储元素的基本数组的大小。当元素被追加到数组列表上时,容量会自动增加。.参见程序ArrayList1.java使用由toString()方法提供的默认的转换显示类集的内容,toString()方法是从AbstractCollection继承下来的。尽管它对简短的例子程序来说是足够了,然而很少使用这种法去显示实际中的类集的内容。通常编程者会提供自己的输出程序。但在下面的几个例子中,仍将采用由toString()方法创建的默认输出。.尽管当对象被存储在ArrayList对象中时,其容量会自动增加。仍可以通过调用ensureCapacity()方法来人工地增加ArrayList的容量。如果事先知道将在当前能够容纳的类集中存储许许多多的项时,你可能会想这样做。在开始时,通过一次性地增加它的容量,就能避免后面的再分配。因为再分配是很花时间的,避免不必要的处理可以改善性能。ensureCapacity()方法如下所示:void ensureCapacity(int cap)这里,cap是新的容量.相反地,如果想要减小在ArrayList对象之下的数组的大小,以便它有正好容纳当前项的大小,可以调用trimToSize()方法。该方法如下:void trimToSize()从数组列表(ArrayList)获得数组(Array).当使用ArrayList时,有时想要获得一个实际的数组,这个数组包含了列表的内容。可以通过调用方法toArray()来实现它。下面是几个为什么可能想将类集转换成为数组的原因:对于特定的操作,可以获得更快的处理时间为了给方法传递数组,而方法不必重载去接收类集为了将新的基于类集的程序与不认识类集的老程序集成从数组列表(ArrayList)获得数组(Array).参见程序ArrayList2.java.参见程序ArrayList3.javaArrays.asList().返回一个受指定数组支持的固定大小的列表。(对返回列表的更
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 收银设备销售合同范本
- 商业种植花卉合同范本
- 个人销售酒合同范本
- 厂房公摊合同范本
- 铲车机械费合同范本
- 物业委托 服务合同范本
- 珠宝订货定金合同范本
- 社区居务基础知识培训课件
- 大棚购销合同范本
- 社区安全知识培训课件记录
- 2022年上海市法院系统辅助文员招聘128人笔试备考题库及答案解析
- 北师大版九年级数学上九年级第一二单元综合数学试题
- 二级建造师成绩复核申请
- 全过程工程咨询服务技术方案
- GB/T 35568-2017中国荷斯坦牛体型鉴定技术规程
- GB/T 28707-2012碟簧支吊架
- GB/T 2791-1995胶粘剂T剥离强度试验方法挠性材料对挠性材料
- GB/T 25702-2010复摆颚式破碎机颚板磨耗
- GB 29541-2013热泵热水机(器)能效限定值及能效等级
- 住宅项目实测实量操作指引(图文并茂)
- 流体力学-流体力学基本方程课件
评论
0/150
提交评论