Java程序设计复习提纲.pdf
Java 程序设计复习提纲 余先锋 一、一、基本概念基本概念 面向对象面向对象:面向对象设计方法,就是把构成问题事务分解成各个对象,抽象出这些对象之间的共性,构成模型-类,并把这些类自身的属性、特点动作予以封装。面向对象的程序与数据是封装在一起的。面向对象编程的三个特性:面向对象编程的三个特性:封装:封装:将数据和对数据的操作封装在一起。继承:继承:子类可以继承超类的属性和功能,即超类所具有的数据和数据上的操作,同时增加子类独有的数据和对数据的操作。多态:多态:操作名称的多态:有多个操作具有相同的方法名,但方法所接收的消息类型各不相同。(表现在方法重载);和继承有关的多态:同一操作(方法)被不同的类型对象调用时,可能产生不同的行为(表现在上转型对象)。编译:编译:将使用高级语言编写的程序整体翻译成机器语言,然后由计算机执行这个程序,这个翻译过程称为编译。Java 程序编译后的目标码文件用“.class”作为文件扩展名。使用编译工具 javac.exe 可以对 Java 程序进行编译。使用运行工具 java.exe 可以运行已经编译好的 Java 程序。二、二、Java 程序基础程序基础 程序组成:程序组成:Java 程序最基本的结构为:public class 类名类名 public static void main(String args)Java 源程序文件使用“.java”作为文件扩展名,程序文件名必须与类名相同。Java 程序由类构成,类包含了成员方法和成员变量;main()方法是程序运行的入口。程序注释有行注释“/”和段注释“/*/”。程序代码要注意区分字母的大小写。一个语句行结束,要使用结束符“;”。分界符“”用于表明类体、方法体和复合语句的范围。程序是表达式和语句构成的命令序列的集合,程序最基本的元素是变量、字面值和运算符。标识符:标识符:标识符由字母(包括汉字及日文等不同的字符)、数字、下划线“_”和美元符号“$”组成,不能用数字开头。变量:变量:变量在程序用于存放不同类型的数据。程序的运行过程中,变量的值随时可以发生变化。所有的变量都必须在使用前声明其类型,并赋以初始值。常量:常量:常量也叫最终变量,使用 final 关键字声明。常量的值一旦确定后不能被改变。字面值:字面值:字面值也就是常数,如:Java 程序,男,123.45,1234,true。整型数字面值默认类型为 int;实型数字面值默认类型 double;字符型字面值为单引号“”括起的单个字符;逻辑型只有 true 和 false 两个字面值。数据类型:数据类型:Java 语言数据类型分为基本数据类型和引用数据类型两大类。基本数据类型分为:整型、实型、字符型和逻辑型四种。整型又分为字节 byte、短整型 short、整型 int 和长整型 long 四种类型;实型分为单精度 float 和双精度 double 两种类型。字符型(char)数据使用 unicode 码表示各种不同的符号、字母、字符等,所以字符型数据也是长度为 2 个字节的无符号整型数。逻辑型(boolean)的值只有 true 和 false。转义符:转义符:一些特殊字符如回车符,需要使用转义符用“”进行表示。如n表示为回车符。转义符和它后面的字符只表示一个字符,如,只表示一个字符:类型转换:类型转换:不同类型数据按精度从“底”到“高”排列,它们的顺序是:byte short int long float double 把低精度类型的数据值赋给高精度的变量时,由系统自动转换。当高精度类型的转换为低精度类型时,需要使用类型符进行强制转换,如:int x=(int)123.456;强制转换有可能产生数据精度的损失。如果算术运算符两边的数值的类型不同,自动将数值转换为精度较高的类型后再进行计算,运算结果为精度较高的那个类型。运算符:运算符:Java 运算符有 算术运算符:+-*/%+-关系运算符:!=逻辑运算符:&|!&|位运算符:&|赋值运算符:=+=-=*=/=%=&=、|=、=等 其它运算符:?:表达式:表达式:表达式是运算符、变量、字面值、方法调用等元素按照程序语言的语法规则的任意有效组合。表达式都有一个确定的值。对于包含多个运算符的表达式,运算时要遵循一定的优先次序。语句:语句:表达式只是对数据处理过程的一种描述,而语句是可以执行的。若干个语句使用组合起来,就称为复合语句。复合语句可以视为一个比较复杂的单独的语句。数据的输入和输出:数据的输入和输出:System.out.print()和 System.out.println()方法,用于向 DOS 窗口或控制台输出程序运行结果。通过 Scanner 等类的对象方法,可以从键盘输入不同类型的数据。程序结构:程序结构:顺序、条件、循环三种算法结构,是程序设计最基本的结构。顺序结构:顺序结构:顺序程序按照命令语句排列顺序逐条执行。分支结构:分支结构:分支结构程序依据一定的条件来选择执行路径。if()语句的括号当中,必须是个条件表达式,其值 true 或 false。if()后面的中可以是复合语句,当()中表达式的值为 true 时被执行。else 后面的也是一个复合语句,当 if()语句中条件表达式的值为 false 时被执行。switch()语句根据括号中表达式的值,选择与 case 语句的值相同的分支执行程序。通常每个 case 分支的最后面有 break 语句结束分支。switch()语句中的表达式的值,只能整型数或字符,case 语句后面值,也只能是整型数或字符。循环结构:循环结构:for 循环是计数循环,通常在循环次数确定的情况下使用。while 循环和 do.while 循环为条件循环,通常在循环次数不确定的情况下使用。dowhile 循环至少要执行一次循环操作。循环的三要素是:循环初始值、循环条件判断、循环增量变化。一个完整的循环结构,必须能够满足这三个条件。break 语句强行退出循环。continue 语句停止继续执行循环体中下面的语句,跳回循环起始位置开始下一次循环。三、三、数组与字符串数组与字符串 数组:数组:数组由多个数组元素组成,同一个数组的元素的数据类型是相同的。数组中存放的每个数据称为数组的一个元素,元素的数量(个数)称为数组的长度,数组的长度在数组对象创建后不能改变。数组的每个元素都有一个唯一的顺序编号,称为数组下标。当数组长度为 n 时,下标编号为 0n-1。数组名所表示的只是数组在内存的地址。数组本身是引用型数据类型,或者说数组是一个对象,数组必须使用 new 关键字来创建数组对象,并确定数组长度,为数组分配内存空间。声明数组的类型,其实是声明数组元素的类型。数组元素可以是基本数据类型,也可以是引用数据类型。数组名.length 属性用于确定数组长度。数组可以是一维、二维或多维。字符串:字符串:字符串是由零个或多个字符组成的有限序列,通常将字符串作为一个整体进行操作。字符串是引用型数据,也就是对象,需要 new 关键字创建字符串对象。Java 语言创建字符串的类主要有:String 类和 StringBuffer 类。String 类:类:String 类对象被创建后,其字符串的内容、长度不能被改变。如果要改变 String 字符串的内容,就需要重新分配内存空间。String 字符串对象常用的操作方法有:length():获取字符串长度 charAt():获取字符串指定位置上的字符 indexOf():获取某子字符串在字符串中的位置 substring():获取在字符串中某位置上的子字符串 getChars():在字符串中将指定位置上的字符复制到字符数组 String 字符串对象其他的操作方法有:equals()、equalsIgnoreCase():判断两个字符串是否相同 compareTo():比较两个字符串的大小 startsWith()、endsWith():判断字符串的前缀和后缀 replace()、replaceAll():用新的字符串替换字符串中的某个子字符串 trim():清除字符串的前后空格 四、四、类与对象类与对象 类类:类是组成 Java 程序的基本要素,是创建对象的模板;类封装了类对象的属性和方法,用于描述类事物的状态和功能。类包含:类包含:类声明和类体;类体由成员变量和成员方法组成;成员变量:也称为属性,成员方法:也称为函数。类的基本构成类的基本构成:public abstract class 类名类名 extends 超类名超类名 implements 接口名接口名 final 成员变量成员变量;构造方法构造方法();成员方法成员方法();变量:变量:可以是基本数据类型和对象。按作用可分为全局变量、局部变量和参变量。方法:方法:方法也称为函数或过程,就是将一段完成特定功能的程序,归纳为一个函数或过程,提供给程序的其他方法程序进行调用。方法只有被调用才能被执行。方法的类型可以是基本数据类型或其他引用类型。方法有返回值,也称为函数。方法如果有返回值,需要声明方法的类型,同时方法体中要有 return 语句用于返回与方法声明相同类型的值。方法如果没有返回值,要将方法声明为 void,方法体中没有 return 语句或 return 语句没有返回值。方法没有返回值,也称为过程。main()方法方法:main()方法是个特殊的方法,是程序开始执行的入口。一个类中最多只能有一个 main()方法。main()可以调用其他类方法或通过对象调用其他成员方法,但不能被其他方法所调用。成员变量:成员变量:也称为全局变量。成员变量必须在类体中(也就是方法之外)进行声明。成员变量在整个类中有效,其作用域是整个类。变量声明:主要包含访问权限、变量类型、变量名等。public private static protected final 变量类型变量类型 变量名变量名 对成员变量的操作只能在方法中进行 定义成员变量的同时,可以对成员变量赋初值。局部变量:局部变量:在方法体或复合语名(程序块)中定义的变量为局部变量;局部变量只在定义它的方法体或块中有效;局部变量使用之前,应该先赋值;对象调用类中的方法时,该方法中的局部变量分配内存。方法执行完毕,则局部变量就被释放;如果方法体中的局部变量与成员变量名相同,则成员变量被隐藏;如果在方法中,使用与局部变量名称相同的成员变量时,应该成员变量前加上 this 关键字;参变量:参变量:方法声明时的参数也称为参变量,参变量性质与局部变量相同。声明参变量时,需要声明该变量的类型 参变量的作用是在调用方法时传递参数值;类变量:类变量:类变量用 static 声明;无论一个类创建了多少个对象,但类变量是该类所有对象所共有的;类的某个对象改变了类变量的值,这个类的其他对象的相同的类变量也发生变化;类变量不必创建对象就可以直接使用,也就是直接通过类名访问。实例变量:实例变量:实例变量必须通过 new 创建对象后分配内存空间,然后才能使用;不同对象的实例变量内存空间是各自独立的。成员方法:成员方法:方法声明:包含访问权限、方法类型、方法名、方法参数;无类型的方法,使用 void 关键字;成员方法:方法声明和方法体两个部分。public static private final protected abstract 返回类型返回类型 方法名方法名(参数表列参数表列)局部变量局部变量 方法体方法体 方法体:包含在中。内容为局部变量和 Java 语句;方法参数:在整个方法中有效;局部变量:方法体内定义的变量,从定义位置开始有效;方法的参变量:与方法中声明的变量一样,同为局部变量。方法的参数:方法的参数:方法的参数也称参变量,它接收方法被调用时传递给方法的参数值。方法可以没有参数,也可以有多个参数。声明方法时的参数称为形参,没有具体的值。每个参数要分别声明类型。多个参数用逗号分开。调用方法时的参数,称为实参,实参必须有实际的值。调用时实参被赋值给形参,传递到方法中去。方法调用时,实参的个数、数据类型和前后顺序要和形参保持一致。如果形参和实参的类型不一致时,需要按照类型转换规则进行转换。方法参数的传递:方法参数的传递:当带有参数的方法被调用时,方法的参变量必须被赋值;调用方法时,方法的参数必须要实例化,即参数变量必须有具体的值;方法参数为基本数据类型时(逻辑、字符、整型、浮点型),参数以传值方式传递,所传递的是变量的值;方法参数为引用类型时(对象、接口),参数传递的只是引用,而不是引用的实体。这时方法传递的是对象、数组或接口的地址;参数传递时,可以把低精度的数值传递给高精度的参数,不能把高精度的数值传递给低精度的参数。类方法:类方法:方法名前加 static 关键字,该方法称为类方法,也叫静态方法。类方法不需要创建对象就可以调用。类方法只能操作类变量,在对象被创建之前,不能操作实例变量;类方法只能调用类中的其他类方法,在对象被创建之前,不能调用类的实例方法。实例方法:实例方法:可以操作类变量和实例变量;实例方法可以调用类中的其他的类方法和实例方法。类成员的访问权限:类成员的访问权限:public(公开级)可以任意访问 protected(保护级)可以被它所属的类、所属类的子类,以及处于同一个包里的其它类访问 package(包访问级)默认的访问级,可以被属于同一个包的其它类所访问,但不能被其它包的类所访问,如果这个类的子类在其它包,则子类不能继承和访问超类中包访问级的成员 private(私有级)只能在它所在的类内部被访问。方法重载:方法重载:一个类中,有多个名字相同的方法,但这些方法的参数不同(个数不同,或类型不同);方法重载体现多态性,即通过传递不同的消息,产生不同的行为。构造方法:构造方法:构造方法是一种特殊的方法,不属于成员方法;所有的类至少都有一个默认(隐含)的构造方法;构造方法的名字与它所在的类的名字完全相同,且没有返回类型;默认的构造方法没有参数;类中定义了自己的构造方法后,Java 就不再提供默认的构造方法。这时,无参数的构造方法需要类自行进行定义;构造方法可以重载;构造方法用于对象成员的初始化 创建对象时,自动执行构造方法。对象:对象:使用一个类创建一个对象时,这个对象就是这个类一个实例。声明对象:声明对象:类名 对象名;Circle c;只声明过的对象没有实体,是空对象,不能使用。创建对象:创建对象:使用 new 运算符为所声明的对象分配内存,这时对象有了实体:Circle c=new Circle();也称为创建对象实例;创建对象时,自动执行构造方法;当类创建一个对象时,类中的成员变量被分配内存空间。该内存空间为该对象的实体;对象中存放着引用(对象的地址),用于对象对该实体的使用操作;如果一个类创建的两个对象,有相同的引用,则这两个对象有相同的实体。this 关键字:关键字:this 代表当前类或当前对象;this 只在实例方法和构造方法当中使用;类方法中不能使用 this,因为类方法不能使用实例变量;当变量名前使用“this”时,表示该变量是成员变量,而不是局部变量;当方法中的局部变量与使用到的成员变量名相同时,必须在成员变量名前加上“this.”关键字;如果成员变量名没有局部变量与之同名,则 this 可以省略。final 关键字:final 类:最终类,不能有子类,也就是不能被继承;final 方法:最终方法,继承时不能被覆盖;final 变量:常量,值不能被改变。五、五、类的继承类的继承 类的继承:类的继承:一个类可以从另一个类中继承它的成员变量和方法,前者称为子类,后者称为超类。类的这种特点称为继承性;class 子类名子类名 extends 超类名超类名 类体类体 类的继承性的特点:类的继承性的特点:一个类只能有一个超类,可以有多个接口;Object 类是任何子类的隐含超类;子类继承的成员方法,只是简单地把参数传递给超类,并从超类那里返回结果;子类不能直接访问超类的私有变量,但可以通过所继承的超类的成员方法,访问超类的私有变量。子类继承的规则:子类继承的规则:子类与超类同包时可以继承的成员:public,protected,默认级;子类与超类不同包时可以继承的成员:public,protected。类继承时构造方法的特点:类继承时构造方法的特点:构造方法不属于成员方法,因些超类的构造方法不能被继承,也不会被覆盖;超类和子类有各自的构造方法,独立存在,分别发挥着作用;构造方法调没有参数时,从最顶端的超类开始调用构造方法;子类的构造方法调用超类构造方法时,必须使用 super 关键字;调用超类构造方法的 super()语句,并且必须是子类构造方法的第一条语句。继承时的隐藏与覆盖:继承时的隐藏与覆盖:在类的继承中,除了继承来的超类成员外,子类也可以有自己的成员;如果子类的某个成员变量或超类的成员变量同名,则超类成员变量的被隐藏。超类与子类的同名成员变量同时存在;如果子类的某个成员方法与超类的成员方法同名,则超类的成员方法被覆盖。超类与子类的同名成员方法同时存在;子类访问超类的同名成员变量或成员方法时,要在变量名或方法名前加 super 关键字;覆盖超类的方法时,不能降低方法的访问权限;级别最高低:public,protected,package,private。抽象类:抽象类:含有抽象方法的类,用 abstract 声明;抽象类不能实例化,也就是不能使用 new 来创建自己的实例对象;抽象类的作用是被继承,用于创建子类;抽象类中不仅仅有抽象方法,也可以有普通的成员方法和成员变量;如果一个类中有抽象方法,那么这个类必须定义为抽象类;如果一个类继承了超类的几个抽象方法,但没有全部实现,那么这个类也必须定义为抽象类;一个类不可能即是抽象类,也是最终类,也就是不能同时使用 abstract 和 final 声明一个类。抽象方法:抽象方法:仅有定义,没有具体实现的方法;抽象方法作用就是被子类的相同方法覆盖,或通过多态性指向子类的相同方法;通过抽象方法,可以定义一整套完整的方法功能,再派生出若干子类来实现子类可以实现抽象方法功能时;通过抽象方法,保持子类方法的形式的完全一致。最终类和最终方法最终类和最终方法:最终类使用 final 关键字声明,不能被继承;最终方法也使用 final 关键字声明,继承时不能被覆盖。六、六、接口接口 接口:接口:Java 只能单继承,所以用接口弥补单继承的不足。Java 可以多接口。接口定义:接口定义:interface 接口名接口名 成员变量成员变量 成员方法成员方法 接口的成员变量:接口的成员变量:只能是静态的(static),最终的(final),公共的(public)。所以接口中的变量实际上是个公共的静态常量。接口中的成员方法:接口中的成员方法:都是公共的(public)抽象方法(abstract),接口成员方法只有方法定义,而没有具体的实现;接口只定义了方法的调用形式,没有具体的实现。具体的实现由类来完成。接口应用:接口应用:接口不能产生一个自己的对象;多个不同的类,可以实现同一个接口;接口可以继承,可以通过接口的继承产生新的接口;一个类如果要实现一个接口的话,就必须实现接口的所有方法;类中实现接口的方法,应当包括所有的接口方法,其中方法名、返回值的类型、方法的参数个数、参数名称和参数类型都必须与接口中的方法完全一致;类在实现接口的同时,还继承了接口中的常量,可作为类的静态成员常量直接使用;如果类使用的接口是一个子接口,那么类不但要实现子接口中的全部方法,还要实现它的父接口的全部方法;一个类实现多个接口时,必须实现所有接口的所有方法。接口与抽象类的区别:接口与抽象类的区别:接口不能有任何方法实现的过程,而抽象类可以有:抽象类中的抽象方法没有具体实现,并使用 abstract 声明:接口中的抽象方法只要没有具体实现就可以了,不需要 abstract 声明。七、七、异常异常 异常:异常:程序运行时出现错误;异常是个类。所有异常的超类是 Exception;处理异常的处理异常的 try.catch.finally 块结构:块结构:try ./可能会发生异常的程序块可能会发生异常的程序块 catch(异常类异常类 1 e1)./处理类型处理类型 1 的异常的异常 catch(异常类异常类 2 e2)./处理类型处理类型 2 的异常的异常 finally ./不管是否发生异常,最后都应处理的程序块不管是否发生异常,最后都应处理的程序块 异常抛出:异常抛出:try 块中是可能发生异常的程序代码段;try 中可以有多个异常发生;程序发生异常时,自动产生一个异常对象,在 try 块中“抛出”异常;try 中可以包含有多种异常,但每次只处理最早发生的一个异常;当一个异常发生时,try 中发生异常之后的程序不再执行。异常捕捉:异常捕捉:try 块中抛出异常后,catch 根据括号中的异常类型对异常比对,如果符合,则进入 catch块内的异常处理程序对异常进行处理,这是“捕捉”异常;catch 中的异常类,根据 try 中可以发生的异常类型而设定。当不能确定是什么异常时,就使用 Exception 类。自定义异常:自定义异常:自定义异常类:class MyException Extends 在方法中抛出异常 方法名方法名()throws MyException if(条件条件)throw new MyException();异常处理 try 调用方法调用方法 catch(MyException e)异常处理异常处理 八、八、数据库编程数据库编程 JDBC:JDBC 为多种关系数据库提供统一访问,由一组用 Java 语言编写的类和接口组成,是用于执行 SQL 语句的 Java API。数据库操作基本步骤:数据库操作基本步骤:加载数据库驱动程序:Class.forName(驱动类名);或:Class.forName(驱动类名).newInstance()其中驱动类名根据不同的数据库而定。创建数据库连接对象:Connection conn=DriverManager.getConnection(url,uid,pwd);其中 url 包含驱动程序或连接机制、数据库的名称、地址及端口等信息,根据不同的数据库及其位置而定。创建 SQL 命令执行对象 Statement stmt=conn.createStatement();执行 sql 语句(Execute the SQL)。执行 Sql 命令分为查询和更新两种操作:查询操作:执行 SQL 的 SELECT 命令,返回查询结果记录集:ResultSet rs=stmt.executeQuery(sql);更新操作,执行 DELETE、UPDATE、INSERT 等 SQL 命令,返回一个整型数:int n=stmt.executeUpdate(sql);以上操作需要进行异常处理 ResultSet 记录集:记录集:执行 SQL 查询命令返回一个记录集 rs,使用 rs.next()等方法移动记录指针,使用 rs.getXXX(字段)方法读取记录字段内容。