




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章、抽象和封装1 面向对象设计的过程就是抽象的过程,我们分三步来完成。1.1 第一步:发现类。1.2 第二步:发现类的属性。1.3 书三步:发现类的方法。2 抽象时遵循的原则。2.1 属性、方法的设置是为了解决业务问题的。2.2 关注主要属性、方法。2.3 如没有必要、勿增加额外的类、属性与方法。3 类(Class)和对象(Object)是面向对象中的两个核心概念。类是对某一类事物的描述,是抽象的概念上的定义。对象是实际存在的该事物的个体,是具体的、现实的。类和对象就好比模具和铸件的关系,建筑物图纸和建筑物实物的关系。我们可以由一个类创建多个对象。4 类名、属性名、方法名以及常童名的命名规范如下。4.1 类名由一个或几个单词组成,每个单词的第一个字母大写。4.2 属性名和方法名由一个或几个单词组成,第一个单词首字母小写,其他单词首字母大写,例如health, stuName, println( ), getMessage( )。4.3 常童名由一个或几个单词组成,所有字母大写,如PI, SEX MA.LE。5 static可以用来修饰属性方法和代码块。static修饰的变量属于这个类所有,即由这个类创建的所有对象共用同一个static变量。通常把static修饰的属性和方法称为类属性、(类变量)、类方法。不使用static修饰的属性和方法,属于单个对象,通常称为实例属性(实例变量).实例方法。6 类属性、类方法可以通过类名和对象名访问实例属性.实例方法只能通过对象名访问。final可以用来修饰属性、方法和类.用fina!修饰的变量成为常量,其值固定不变。构造方法及其重载7 构造方法(Constructor)是一个特殊的方法,它用于创建类的对象,因此一个类必须包含至少一个构造方法,否则就无法创建对象。8 构造方法的名字和类名相同,没有返回值类型。构造方法的作用主要就是在创建对象时执行一些初始化操作,如给成员属性赋初值。9 同C#一样在没有给类提供任何构造方法时,系统会提供一个无参的方法体为空的默认构造方法。一旦提供了自定义构造方法,系统将不会再提供这个默认构造方法。如果要使用它,程序员必须手动添加。10 如果同一个类中包含了两个或两个以上方法,它们的方法名相同。方法参数个数或参数类型不同,则称该方法被重载了,这个过程称为方法重载。成员方法和构造方法都可以进行重载。11 方法重载的判断依据如下。11.1 必须足在同一个类里。11.2 方法名相同。11.3 方法参数个数或参数类型不同。11.4 与方法返回位和方法修饰符没有任何关系。12 结论1:在方法里不可以定义static变量,也就是说类变量不能是局部变量。13 结论2:构造方法没有返回值类型。如果有,就不是构造方法.而是和构造方法同名的成员方法。封装14 封装(Encapsulation)是类的三大特性之一。就是将类的状态信息隐藏在类内部。不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。15 封装的具体步骤:修改属性的可见性来限制对属性的访问:为每个属性创建一对赋值(setter)方法和取值(Better)方法,用于对这些属性的存取;在赋值方法中,加入对属性的存取控制语句。封装的好处主要有:隐藏类的实现细节;让使用者只能通过程序员规定的方法来访问数据:可以方便地加入存取控制语句.限制不合理操作。16 封装时会用到多个权限控制符来修饰成员变量和方法,区别如下。16.1 private:成员变量和方法只能在类内被访问,具有类可见性。16.2 默认:成员变量和方法只能被同一个包里的类访问,具有包可见性。16.3 protected:可以被同一个包中的类访问,被同一个项目中不同包中的子类访问(父类、子类的概念将在第二章讲解)。16.4 public:可以被同一个项目中所有类访问,具有项目可见性,这是最大的访问权限。17 this关键字是对一个对象的默认引用.在每个实例方法内部;都有一个this引用变量,指向调用这个方法的对象。18 this的作用:18.1 使用this调用成员变量,解决成员变量和局部变量同名冲突。18.2 使用this调用成员方法。18.3 使用this调用重载的构造方法,只能在构造方法中使用,必须是构造方法的第一条语句。19 因为this是在对象内部指代自身的引用,所以this只能调用实例变量、实例方法和构造方法。19.1 this不能调用类变童和类方法。19.2 this也不能调用局部变量。20 现实世界是“面向对象的.面向对象就是采用现实模拟的方法设计和开发程序。21 面向对象技术是目前计算机软件开发中最流行的技术。面向对象设计的过程就是抽象的过程。22 类是对某一类事物的描述.是抽象的、概念上的定义。对象是实际存在的该事物的个体,是具体的、现实的。23 如果同一个类中包含了两个或两个以上方法,它们的方法名相同,方法参数个数或者参数类型不同,则称该方法被重载了,这个过程称为方法重载。24 构造方法用于创建类的对象。构造方法的作用主要就是在创建对象时执行一些初始化操作。可以通过构造方法重载来实现多种初始化行为25 封装就是将类的成员属性声明为私有的,同时提供公有的方法实现对该成员属性的存取操作。26 封装的好处主要有:隐藏类的实现细节;让使用者只能通过程序员规定的方法来访问数据;可以方便地加入存取控制语句,限制不合理操作。第二章:继承1 在Java中,继承(inheritance)通过extends关键字来实现,其中Subclass称为子类。(SuperClass)称为父类、基类或超类。修饰符如果是public;该类在整个项目中可见;不写public修饰符则该类只在当前包可见;不可以使用private和protected修饰类。2 继承是类的三大特性之一,是java中实现代码重用的重要手段之一。Java中只支持单继承.即每个类只能有一个直接父类。继承表达的是is a的关系,或者说是一种特殊和一般的关系,例如Dog i s a Pet .同样我们可以让学生继承人,让苹果继承水果,让三角形继承几何图形。3 在java中.所有的Java类都直接或间接地继承了Java.Lang.Object类。Object类是所有类的祖先。在定义一个类时.没有使用extends关键字,那么这个类直接继承Object类。例如:public class MyObjecta这段代码表明:MyObject类的直接父类为abject类。4 在Java中.子类可以从父类中继承到哪些“财产”呢,4.1 继承public 和protected修饰的属性和方法,不管子类和父类是否在同一个包里。4.2 继承默认权限修饰符修饰的属性和方法,但子类和父类必须在同一个包里。4.3 无法继承private,修饰的属性和方法。4.4 无法继承父类的构造方法。5 在子类中可以根据需求对从父类继承的方法进行重新编写,称为方法的重写或方法的覆盖(overriding )。方法重写必须满足如下要求。5.1 重写方法和被重写方法必须具有相.同的方法名。5.2 重写方法和被重写方法必须具有相同的参数列表。5.3 重写方法的返回值类型必须和被重写方法的返回值类型相同或者是其子类。5.4 重写方法的不能缩小被重写方法的访问权限。6 问题:重载(overloading)和重写(overriding)有什么区别和联系?6.1 解答:重载步及同一个类中的同名方法,要求方法名相同,参数列表不同,与返回值类型无关。6.2 重写沙及的是子类和父类之间的同名方法,要求方法名相同、参数列表相同、返回值类型相同(或是其子类)。7 super代表对当前对象的直接父类对象的默认引用。在子类中可以通过supef关键字来访问父类的成员:7.1 super必须是出现在子类中(子类的方法和构造方法第一行),而不是其他位置7.2 可以访问父类的成员,例如父类的属性.方法、构造方法。7.3 注意访问权限的限制,例如无法通过sups:访问private成员。8 继承条件下构造方法的调用规则如下。8.1 如果子类的构造方法中没有通过super显式调用父类的有参构造方法,也没有通过this,显式调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。这种情况下,写不写super()“在语句,效果都是一样的8.2 如果子类的构造方法中通过super显式调用父类的有参构造方法.那将执行父类相应构造方法。而不执行父类无参构造方法。8.3 如果子类的构造方法中通过this;。显式调用自身的其他构造方法,在相应构造方法中应用以上两条规则。8.4 特别注意的是,如果存在多级继承关系.在创建一个子类对象时,以上规则会多次向更高一级父类应用,一直到执行顶级父类object类的无参构造方法为止。9 This和super关键字:9.1 在构造方法中如果有this语句或super语句出现,只能是第一条语句。9.2 在一个构造方法中不允许同时出现this和super语句(否则就有两条第一条语句)9.3 在类方法(有static修饰)中不允许出现this或super关键字。9.4 在实例方法(无static修饰)中this和super语句不要求是第一条语句,可以共存。抽象类10 抽象类和抽象方法都通过abstract关键字来修饰。11 抽象类不能实例化。抽象类中可以没有,可以有一个或多个抽象方法,甚至可以全部方法都是抽象方法。12 抽象方法只有方法声明,没有方法实现。有抽象方法的类必须声明为抽象类。子类必须重写所有的抽象方法才能实例化,否则子类还是一个抽象类。13 public void print()”不是抽象方法,而是有实现但实现为空的普通方法“public abstract void pint();”才是抽象方法,别忘记了最后的分号。 14 abstract 可以用来修饰类和方法,但不能用来修饰属性和构造方法。15 final常量:15.1 用final修饰的类,不能再被继承。15.2 用final修饰的方法,不能被子类重写。15.3 用final修饰的变量(包括成员变量和局部变量)将变成常量。只能赋值一次。16 Final和abstract关键字:16.1 final和abstract是功能相反的两个关健字,可以时比记忆。16.2 abstract可以用来修饰类和方法,不能用来修饰属性和构造方法。final可以用来修饰类、方法和属性,不能修饰构造方法。16.3 Java提供有很多类就是final类,比如String类、Math类,它们不能再有子类。Object类中一些方法,如getClass() , notify(), wait()都是final方法,只能被子 类继承而不能被重写,但是hashCode( ), toSh-ing( ), equals(Object obj)不是final方法,可以被重写。17 使用final修饰引用型变l量,变量的值是固定不变的,而变量所指向的对象的属性值是可变的。18 abstract是否可以和private、 Static、finall共用18.1 abstract不能和private同时修饰一个方法;18.2 abstract不能和static同时修饰一个方法;18.3 abstract不能和final同时修饰一个方法或类。19 继承是Java中实现代码重用的重要手段之一。Java中只支持单继承,即一个类只 能有一个直接父类。Java。Lang.Object类是所有Java类的祖先20 在子类中可以根据实际需求对从父类继承的方法进行重新编写, 称为方法的重写或覆盖.21 子类中重写的方法和父类中被重写方法必须具有相同的方法名, 参数列表,返回值类型必须和被重写方法的返回值类型相同或者是其子类。22 如果子类的构造方法中没有通过super显式调用父类的有参构造方法,也没有通过this显式调用自身的其他构造方法。则系统会默认先调用父类的无参构造方法。23 抽象类不能实例化。抽象类中可以没有、可以有一个或多个抽象方法。子类必须重写所有的抽象方法才能实例化,否则子类还是一个抽象类。24 用final修饰的类;不能再被继承。用final修饰的方法,不能被子类重写。用final修饰的变量将变成常量,只能赋值一次。第三章、多态1 简单来说,多态(polymorphism)是具有表现多种形态的能力的特征。更专业化的说法是:同一个实现接口.使用不同的实例而执行不同的操作。子类到父类的转换(向上转型)2 子类转换成父类的规则:2.1 将一个父类的引用指向一个子类对象,称为向上转型(upcasting),自动进行类型转换。2.2 此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法。 2.3 此时通过父类引用变量无法调用子类特有的方法。3 通过本节时多态功能的详解,让我们总结出实现多态的三个条件:3.1 继承的存在(继承是多态的基础,没有继承就没有继承就没有多态)3.2 子类重写父类的方法(多态下调用子类重写后的方法)。3.3 父类引用用变量指向子类时象(子类到父类的类型转换)。父类到子类的转换(向下转型)4 将一个指向子类对象的父类引用赋给一个子类的引用.称为向下转型.此时必须进行强制类型转换。5 java提供了instanceof运算符来进行类型的判断。语法:对象instanceof类或接口。6 该运算符用来判断一个对象是否属于一个类或者实现了一个接口,结果为true或false在强制类型转换之前通过instanceof运算符检查对象的真实类型;然后再进行相应的强制类型转换.这样就可以避免类型转换异常.从而提高代码健壮性。7 使用instanceof时,对象象的类型必须和instanceof的第二个参数所指定的类或接口在继承树上有上下级关系,否则会出现编译错误。例如:pet instanceof string编译错误。 instanceof通常和强制类型转换结合使用。8 通过多态可以减少类中代码量,可以提高代码的可扩展性和可维护性。继承是多态的基础,没有继承就没有多态.9 把子类转换为父类。称为向上转型,自动进行类型转换。把父类转换为子类,称为向下转型,必须进行强制类型转换。10 向上转型后通过父类引用变量调用的方法是子类覆盖或继承父类的方法,通过父类引用变量无法调用子类特有的方法。11 向下转型后可以访问子类特有的方法。必须转换为父类指向的真实子类类型,否则将出现类型转换异常ClassCastExceptionp12 instanceof运算符用于判断一个对象是否属于一个类或实现了一个接口.13 instanceof运算符通常和强制类型转换结合使用。首先通过instanceof进行类型判断.然后进行相应的强制类型转换。14 使用父类作为方法形参是使用多态的常用方式。第四章、接口1 java中接口的定义语法和类实现接口的语法:1.1 修饰符 interface 接口名extends父接口1l,父接口2,.常量定义 方法定义 1.2 class类名 extends 父类名implements接口1,接口2,.类的内容2 接口和类.抽象类是一个层次的概念,命多规则相同。如果修饰符是public则该接口在整个项目中可见。如果省略修饰符.则该接口只在当前包可见. 接口中可以定义常量.不能定义变量。3 接口中属属性都会自动用public static finall修饰。即接口中属性都是全局静态常量。接口中的常量必须在定义时指定初始值。4 接口中所有方法都是抽象方法。接口中方法都会自动用public abstract修饰,即接口中只有全局抽象方法。5 和抽象类一样,接口同样不能实例化,接口中不能有构造方法。接口之间可以通过extends实现继承关系, 一个接口可以继承多个接口,但接口不能继承类。6 一个类只能有一个直接父类,但可以通过implements实现多个接口。类必须实现接口的全部方法,否则必须定义为抽象类。类在继承父类的同时又实现了多个接口时extends必须位于implements之前。7 接口体现了约定和实现相分离的原则,通过面向接口编程,可以降低代码间的耦合性,提高代码的可扩展性和可维护性。面向接口编程就意味着:开发系统时,主体构架使用接口,接口构成系统的骨架,这样就可以通过更换实现接口的类来实现更换系统!8 面向接口编程可以实现接口和实现的分离,这样做的最大好处就是能够在客户端未知的情况下修改实现代码。那么什么时候应该抽象出接口呢?一种是用在层和层之间的调用。层和层之间最忌讳藕合度过高或是修改过于须繁。设计优秀的接口能够解决这个问题。另一种是用在那些不稳定的部分上。如果某些需求的变化性很大那么定义接口也是一种解决之道。设计良好的接口就像是我们日常使用的万用插座一样,不论插头如何变化,都可以使用。9 最后强调一点,良好的接口定义一定是来自于需求的,它绝对不是程序员绞尽脑汁想出来的。在C#中使用接口:10 修饰符interface接口名:父接口1,父接口2,.属性定义 方法定义11 class类名:父类名,接口1,接口2,.12 接口之间可以通过冒号一:实现继承关系,一个接口可以继承多个接口,但接口不能继承类。类只能继承一个父类.但可以实现多个接口,使用冒号:来继承类和实现接口。13 接口定义零个或多个成员,成员主要是方法、属性和索引器。接口中不能包含常量、变量或构造方法.也不能包含任何静态成员。14 接口中成员访问权限是public。定义接口时显式指定任何修饰符都是非法的15 按照惯例,C#中接口的名字以大写字母“I”开头。16 Java与C#中接口具有以下区别:16.1 Java中接口通过extends继承父接口,类通过implements实现接口,C#中通过冒号“:”来实现这两个功能。16.2 Java接口中的成员变童(属性)一律是常量,自动用public static final修饰,C#接口中不允许存在成员变量,但可以有属性。16.3 Java接口中属性和方法都可以使用public修饰,C#中默认public,但不允许显式使用public修饰。16.4 java接口中可以定义静态常量和方法,但足C#接口中不允许包含任何静态成员。17 接口中属性都是全局静态常量,接口中方法都是全局抽象方法;接口中没有构造方法。18 类只能继承一个父类,但可以实现多个接口。一个类要实现接口的全部方法,否则必须定义为抽象类。Java通过实现接口达到了多重继承的效果。19 接口表示一种约定,接口表示一种能力,接口体现了约定和实现相分离的原则。20 通过面向接口编程,可以降低代码间的耦合性。提高代码的可扩展性和可维护性。21 面向接口编程意味着:开发系统时.主体构架使用接口,接口构成系统的骨架,这样就可以通过更换实现接口的类来更换系统的实现。22 C#中接口中成员主要是方法,属性和索引器。接口中不能包含常量、变量、构造方法和任何静态成员。定义接口时显式指定任何修饰符是非法的。Static属性和代码块23 static属性属于这个类所有,即由这个类创建的所有对象共用同一个static属性。既可以创建对象后通过对象名.static属性名,的方式来访问.也可以在创建对象之前直接通过类名.static属性的方式来访问。24 static方法也可通过“类名.方法名”访问。和对象名.static方法名“两种方式来访问!25 static代码块的用法比较特殊:当类被载入的时候(类第一次被使用到的时候载入,例如创建对象或直接访问static属性与方法)执行静态代码块,且只被执行一次.主要作用是实现static属性的初始化。26 static属性的生命周期是从类被载入到类被销毁,与类同生死。27 实例属性的生命周期从某一个对象被创建开始,到系统销毁这个对象为止,与相应对象共存亡。28 不创建对象就无法访问实例属性和方法,却可以访问static属性和方法。第八章、异常1 Java的异常处理是通过五个关键字来实现的:try、catch、finally、throw和throws2 采用Java的异常处理机制进行处理,把可能出现异常的代码放入try语句块中,并使用catch语句捕获异常。3 try-catch程序块的执行流程:3.1 如果try块中所有语句正常执行完毕。不会发生异常,那么catch块中的所有语句都将会被忽略。3.2 如果try语句块在执行过程中碰到异常,并且这个异常与catch中声明的异常类型相匹配.那么在try块中其余剩下的代码都将被忽略。而相应的catch块将会被执行。匹配是指catch所处理的异常类型与所生成的异常类型完全一致或是它的父类。3.3 如果try语句块在执行过程中碰到异常,而抛出的异常在catch块里面没有被声明那么程序立刻退出。4 Catch处理异常信息的的方法:4.1 void printStackTrace():输出异常的堆栈信息。堆栈信息包括程序运行到当前类的执行流程,它将打印从方法调用处到异常抛出处的方法调用序列.4.2 string getMessage():返回异常信息描述字符串,该字符串描述异常产生的原因,是printStackTrace()输出信息的一部分。5 常见的异常类型:异常说明Exception异常层次结构的根类ArithmeticException算术错误情形,如以零作除数ArrayIndexOutOfBoundsException数组下标越界NullPointerException尝试访问null对象成员ClassNotFoundException不能加载所需的类InputMismatchException欲得到的数据类型与实际输入的类型不匹配IllegalArgumentException方法接收到非法参数ClassCastException 对象强制类型转换出错NumberFormatException数字格式转换异常,如把“abc”转换成数字6 在try-catch语句块后加入finally块,finally块中的代码总能被执行无论是否发生异常。7 try-catch-finally程序块的执行流程大致分为两种情况7.1 如界try块中所有语句正常执行完毕,那么finally块就会被执行。7.2 如果执行try语句块在执行过程中碰到异常.无论这种异常能否被catch块捕获到,都将执行finally块中的代码。8 try-catch-finally结构中try块是必须的,catch和finally块为可选,但两者至少出现其中之一.9 需要特别注意的是:即使在try块和catch块中存在return语句。finally块中语句也会执行.发生异常时的执行顺序是:执行try块或catch中return之前的语句,执行finally中语句,执行try块或catch中的return语句退出.10 finally块中语句不执行的唯一情况是:在异常处理代码中执行System.exit(1),将退出Java虚拟机.11 一段代码可能会引发多种类型的异常,这时,我们可以在一个try语句块后面跟多个catch语句块,分别处理不同的异常。但排列顺序必须是从子类到父类。最后一个一般都是Exce加on类。因为按照匹配原则.如果把父类异常放到前面,后面的patch块将得不到执行的机会。12 运行时.系统从上到下分别对每个catch语句块处理的异常类型进行检测,并执行第一个与异常类型匹配的catch语句。执行其中的一条catch语句之后,其后的catch语句都将被忽略。13 通过throws继续声明异常。如果调用者不知道如何处理该异常,可以继续通过throws声明异常.让上一级调用者处理异常。main方法声明的异常将由Java虚拟机来处理。14 在java语言中.可以使用throw关键字来自行抛出异常。15 throw和throws的区别表现在以下三个方面。15.1 作用不同:throw用于程序员自行产生并抛出异常,throws用于声明在该方法内抛出了异常。15.2 使用用的位置不同:throw位于方法体内部,可以作为单独语句使用。throws必须跟在方法参数列表的后面,不能单独使用。15.3 内容不同:throw抛出一个异常时象,而且只能是一个;throws后面跟异常类,而且可以跟多个异常类。16 异常分类:16.1 Throwable类:所有异常类型都是Throwable类的子类,它派生两个子:Error和Exception。16.2 Error类:表示仅靠程序本身无法恢复的严重错误,比如说内存溢出动态链接失败,(一般是由虚拟机抛出)。出现这种错误。假如出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为力的虚拟机错误。所以在进行行程序设计时,应该更关注Exception类。16.3 Exception类:由Java应用程序抛出和处理的非严重错误。比如所需文件找不到,网络连接不通或中断。算术运算出错(如被零除)、数组数组下标越界.装载了一个不存在的类.对null对象操作、类型转换异常等。它的各种不同的子类分别对应不同类型的异常。16.4 运行时异常:包括RuntimeException及其所有子类。不要求程序必须对它们做出处理.16.5 Checked异常(非运行时异常);除了运行时异常外的其他由Exception继承来的异常类。程序必须捕获或者声明抛出这种异常.否则会出现编译错误,无法通过编译。处理方式包括两种:通过try-catch在当前位置捕获并处理异常,通过throws声明抛出异常交给上一级调用方法处理。17 在MyEclipse中使用log4j的四个步骤。17.1 在项目中加入log4j所使用的JAR文件。17.2 创建log4j .properties文件。17.3 编写perties文件,配置日志信息。17.4 在程序中使用log4j记录日志信息。18 日志根据记录内容的不同.主要分成以下三类。18.1 SQL日志:记录系统执行的SQL语句。18.2 异常日志:记录系统运行中发生的异常事件。18.3 业务日志:用于记录系统运行过程,例如用户登录、操作记录19 其中debug指的是日志记录器(Logger )的输出级别,主要输出级别及含义如下。19.1 fatal:指出每个严重的错误事件将会导致应用程序的退出。19.2 error:指出虽然发生错误事件。但仍然不影响系统的继续运行。19.3 warn:表明会出现潜在错误的情形。19.4 info:在粗粒度级别上指明消息。强调应用程序的运行过程。19.5 debug:指出细粒度信息事件,对调试应用程序是非常有帮助的。20 各个输出级别优先级为:fatalerrorwarninfodebug21 日志输出目的地Appender,最常用的Appender有以下两种。21.1 ConsoleAppender:输出日志事件到控制台。通过Target属性配置输出到system.out或者system. err ,默认的目标是System . out 。21.2 FileAppender:输出日志事件到一个文件。通过File属性配置文件的路径及名称。22 日志布局类型Layout22.1 HTMLLayout:格式化日志输出为HTML表格22.2 SimpieLayaut:以一种非常简单的方式格式化日志输出,它打印级别Level,然后跟着一个破折号“”,最后是日志消息。22.3 PatternLayout:根据指定的转换模式格式化日志输出,从而支持丰富多样的输出格式。需要配置layout . ConvertsionPatterrn属性,如果没有配置属性,则使用默认的转换模式.23 转换模式ConversionPattern23.1 %d:用来设置输出日志的日期和时间,默认格式为ISO8601.也可以在其后指定格式。比如%d(yyyy-MM-dd HH:mm:ss,输出格式类似于2010-03-09 17:51,08,23.2 %m:用来输出代码中指定的消息23.3 %n:用来输出一个回车换行符。23.4 %I:用来输出日志事件的发生位置,包括类名、发生的线程,以及在代码中的行数23.5 %p:用来输出优先级。即debug , info,warn.error,fatal等23.6 %F:用来输出文件名。23.7 %M:用来输出方法名。24 异常是由Java应用程序抛出和处理的非严重错误。它可以分为Checked异常和运行时异常两大类。Checked异常必须捕获或者声明抛出,否则无法通过编译。运行时异常不要求必须捕获或者声明抛出。25 Java的异常处理是通过五个关键字来实现的:try、catch、finally .throw和throws26 即使在try块、catch块中存在return语句.finally块中语句也会执行。fiinally块中语句不执行的唯一情况是:在异常处理代码中执行System .exit(1)27 可以在一个try语句块后面跟多个catch语句块,分别处理不同的异常。但排列顺序必须是从特殊到一般,最后一个一般都是Exception类。28 log4j是一个优秀的日志记录工具。常用使用方式是配置perties文件,从而控制日志的输出级别,控制日志的目的地和控制日志输出格式。第九章集合框架1 数组的缺陷:1.1 数组长度固定不变,不能很好适应元素数量动态变化的情况。1.2 可通过数组名.length获取数组的长度。却无法直接获取数组中真实存储的元素个数。1.3 数组采用在内存中分配连续空间的存储方式,根据下标可以快速获取对应元素的信息,但根据元素信息查找时效率低下。需要多次比较。在进行频繁插入、删除操作时同样效率低下。2 集合框架都包含三大块内容:对外的接口。接口的实现和对集合运算的算法:2.1 接口:即表示集合的抽象数据类型,例如:collection、list、set、map2.2 实现:即集合框架中接口的具体实现,例如ArrayLi st , LinkedLi st . HashMap , HashSet等2.3 算法:在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算的方法。3 Java集合框架共有两大类接口,Collection和Map,其中Collection又有两个子接口List和Set,所以通常说Jai。集合框架共有三大类接口.List, Set和Map。它们的共同点在于都是集合接口.都可以用来存储很多对象。它们的区别如下:3.1 Collection接口存储一组不唯一(允许重复)、无序的对象。3.2 Set接口继承Collection接口,存储一组唯一(不允许重复)、无序的对象。3.3 List接口继承Collection接口,存储一组不唯一(允许重复),有序(以元素插入的次序来放置元素,不会重新排列)的对象。3.4 Map接口存储一组成对的键一值对象.提供key(键)到value(值)的映射。Map中的key不要求有序。不允许重复。value同样不要求有序,但允许重复。4 实现List接口的常用类有ArrayList和LinkedList。它们都可以容纳所有类型的对象,包括null.允许重复,并且都保证元素的存储顺序。5 ArrayListt对数组进行了封装,实现了长度可变的数组,和数组采用相同存储方式。在内存中分配连续的空间。它的优点在于遍历元素和随机访问元素的效率比较高。6 LinkedList采用链表存储方式,优点在于插入、删除元素时效率比较高。它提供了额外的andFist() ,andLast() ,removeFirst()和removeLast()等方法。可以在LinkedList的首部或尾部进行插入或者删除操作。这些方法使得LinkedList可被用作堆柱(stack)或者队(queue)。7 List接口中定义的各种常用方法返回值类型方法说明BooleanAdd(object)在列表的末尾顺序添加元素,起始索引位置从0开始VoidAdd(int index,Object o)在指定的索引位置添加元素 注意:索引位置必须介于0和列表中元素个数之间IntSize()返回列表中的元素个数ObjectGet(int index)返回指定索引位置处的元素 注意:取出的元素是Object类型,使用前需要进行强制类型转换BooleanContains(Object o)判断列表.中是否存在指定元素BooleanRemove(Object o)从列表中删除元素ObjectRemove(int index)从列表中删除指定位置元素,起始索引位置从0开始8 Vector和ArrayList的异同。8.1 在ArrayList类出现之前,JDK中存在一个和它同样分配连续存储空间、实现了长度可变数组的集合类Vector。两者实现原理相同,功能相同,在很多情况下可以互用。8.2 两者的主要区别如下。8.3 Vector是线程安全的,ArrayList重速度轻安全,是线程非安全的,所以当运行到多线程环境中时,需要程序员自己管理线程的同步问题。8.4 当长度需要增长时,Vector认增长为原来的一倍,而ArrayList只增长50%,有利于节约内存空间。 开发过程中,最好使用新版本的ArrayList。9 LinkedList的一些特殊的用法返回值类型方法说明VoidaddFist(Object o)在列表的首部添加元素Void addLast (Object o)在列表的末尾添加元索Object getFist()返回列表中的第一个元素ObjectgetLast()返回列表中的最后一个元索ObjectremoveFist()删除并返回列表中的第一个元素ObjectremoveLast()删除并返回列表中的最后一个元素10 Java集合框架中提供了Map接口,专门来处理健值映射数据的存储。Map中可以存储多个元素,每个元素都由两个对象组成,一个健时象和一个值对象,可以根据键实现对应位的映射。11 Map接口存储一组成对的键一值对象,提供key(键)到value(值)的映射。Map中的key不要求有.序不允许重复。value同样不要求有序,但允许重复。最常见的Map实现类是HashMap,它的存储方式是哈希表,优点是查询指定元素效率高。12 Map的常用方法序号返回值类型方法说明1ObjectPut(Object K,Object V)以“键-值对”的方式进行存储 注意:键必须是唯一的,值可以重复。如果试图添加重复的键,那么最后加入的键-值对将替换原先的键值对。2ObjectGet(Object key)根据键返回相关联的值,如果不存在指定的键,返回null3ObjectRemove(Object key)删除指定的键映射的“键-值对”4IntSize()返回元素个数5SetKeySet()返回键的集合6CollectionValues()返回值的集合7BooleancontainsKey(Object Key)如果存在由指定的键映射的“键-值对”,返回true13 HashMap和HashMap的同。13.1 HashMap类出现之前。JDK中存在一个和它同样采用哈希表存储方式、同样实现键值映射的集合类HashMap。两者实现原理相同,功能相同,很多情况下可以互用。14 HashMap和HashMap的区别:14.1 Hastable继承自Dictionary类。而HashMap实现了Map按口。14.2 HashMap是线程安全的,HashMap重速度轻安全,是线程非安全的,所以当运行到多线程环境中时、需要程序员自己管理线程的同步问题。14.3 HashMap不允许null值(key和value都不允许),HashMap允许null值(key和value都允许)。 开发过程中,最好使用最新版本的HaspMap。迭代器iterator15 所有集合接口和类都没有提供相应的遍历方法.而是把遍历交给i达代器Iterator完成。Iterator为集合而生r专门实现集合的遍历。它隐藏了各种集合实现类的内部细节.提供了遍历集台的统一编程接口。16 Collection接口的Iterate()方法返回一个Iterator,然后通过Iterator接口的两本方法即可方便的实现遍历。16.1 Boolean hasNext():判断是否存在另一个可访问的元素。16.2 Object next():返回要访问的下一个元素。17 使用泛型集合在创建集合对象时指定集合中元素的类型,从集合中取出元素时无需进行类型强制转换,并且如果把非指定类型放入集合,会出现编译出错。18 数组与集合的区别:18.1 数组可以存储基本教据类型和对象.而集合中只能.存储对象(可以以包装类形式存储基.本数据类型)。18.2 数组长度固定,集合长度可以动态改变。18.3 定义数组时必须指定数组元素类至、集合默认其中所有元素都是Object。18.4 无法直接获取数组实际存储的元素个数. Length来获取数组的长度,但可以通过size()直接获取集合实际存储的元素个数。18.5 集合有多种实现方式和不同的适用场合,而不像数组仅采用分配连续空间方式。18.6 集合以接口和类的形式存在,具有封装、继承和多态等类的特性.通过简单的方法和属性调用即可实现各种复杂操作,大大提高软件的开发效率。19 JDK中有一个Arrays类.专门用来操作数组.它提供一系列静态方法实现对数组搜索、排序、比较和填充等操作。JDK中有一个Collections类,专门用来操作集合,它提供一系列静态方法实现对各神集合的搜索、复制、排序和线程安全化等操作。20 集合弥补了数组的缺陷.它比数组更灵活更实用,可大大提高软件的开发效率。而且不同的集合可适用于不同场合。21 集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。集合框架都包含三大块内容:对外的接口.接口的实现和对集合运算的算法。22 通常说的Java的集合框架共有三大类接口,List 、 Set、 Map。他们的区别如下:22.1 Collection存储一组不唯一,无序的对象。22.2 Set接口继承Collection接口,存储一组唯一,无序的对象。22.3 List接口继承Collection接口,存储一组不唯一,有序的对象。22.4 Map接口存储一组成对的键-值对像,提供Key和value的映射。Key不要求有序,不予许重复,value同样不要求有序,但允许重复。23 ArrayList和数据采用相同的存储方式,它的优点在于遍历元素和随机访问元素的效率比较高。LinkedList采用链表存储方式,优点在于插入删除元素时效率比较高。24 HashMap是最常用的Map实现类,它的存储方式是哈希表,优点是查询指定元素效率高。25 Iterator 为集合而生,专门实现集合的遍历,它隐藏了各种集合实现类的内部细节,提供了遍历集合的统一编程接口。26 使用泛型集合在创建集合对象时指定集合中元素的类型,在从集合中取出元素时无需进行类型强制转换,避免了ClassCastException异常。第十章、JDBC1 Java是通过JDBC技术实现对各种数据库访问的.换句话说JDBC充当了Java应用程序与各种不同数据之间进行对话的媒介。2 JDBC是Java数据库连接(Java DateBase Connectivity)技术的简称,由一组使用Java语言编写的类和接口组成,可以多种关系数据库提供统一访问。Sun公司提供了JDBC的接口规范JDBC API.而数据库厂商或第三方中间厂商根据该接口规范提供针对不同数据库的具体实现JDBC驱动。3 JDBC API主要做三件事:与数据库建立连, 发送Sql语句,处理结果.Java主要API及其作用:3.1 DriverManager类:依据数据库的不同.管理相应的JDBC驱动。3.2 Connection接口:负责连接数据库并担任传送数据的任务。3.3 Statement接口:由Connection产生.负责执行SQL语句。3.4 ResultSet接口:负责保存和处理statement执行后所产生的查询结果。3.5 PreparedStatement接口:Statement的子接口.也由Connection产生,同样负责执行SQL语句。与SatemEnt接口相比,具有高安全性,高性能,高可读3.6 性和高可维护性的优点.4 JDBC访问数据库的步骤4.1 加载JDBC驱动。Class.forName(JDBC驱动类的名称);4.2 与数据库建立连接。DriverManagerl类是JDBC的管理层.作用于用户和驱动程序之间.DriverManager类跟踪可用的驱动程序,并在数据库和相应的驱动程序之间建立连接。当调用getCollection()方法时,DriverManager类首先从已加载的驱动程序列表找到一个可以接受数据库U
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 蓄电池基础知识培训课件
- 2025年全国育婴师中级职业技能考试题库(含答案)
- 2025年辽宁省中考英语试卷(含答案)
- 产后抑郁症护理考试题及答案
- 曹禺中学期末考试卷子及答案
- 藏族近代文学考试题库及答案
- 什么依然的初三作文15篇
- 学前儿童卫生与保育(微课版) 课件 项目八 幼儿园的卫生保健工作
- 2025关于有偿合同的违约处理
- 物流服务师题库及答案
- 2025-2026学年统编版小学语文四年级上册教学计划及进度表
- 2025年湖北省武汉市中考语文真题(含答案)
- 中国心房颤动管理指南2025解读
- Unit1Weletotheunit课件译林版八年级英语上册
- 离职交接事项协议书范本
- 【高考真题】海南省2025年高考真题物理(含答案)
- 体育教师自我介绍课件
- 银行员工职业操守课件
- 初中开学第一课心理健康课
- 艺康servsafe培训课件
- TDT1067-2021不动产登记数据整合建库技术规范
评论
0/150
提交评论