《Java基础总复习ppt课件.pptx》由会员分享,可在线阅读,更多相关《Java基础总复习ppt课件.pptx(65页珍藏版)》请在三一办公上搜索。
1、Java基础复习,Java虚拟机制,一次编译,到处运行(跨平台特性)不同的平台有不同的虚拟机JVM本身不是跨平台的,环境变量,设置path与classpath,JDK中bin文件夹的路径,JDK中jrelibrt.jar的路径,数据类型,基本数据类型的优先级两者的区别,基本类型和引用类型,Student s; / 声明对象s = new Student(); /实例化一个对象基本数据类型与引用数据类型的区别Student s = new Student();int i;,内存,null,s,stuNonameage,0 x1158,0,i,基本类型:一块内存引用类型:两块内存,Java数组一维
2、数组,数组的下标从0开始int boy 等价于int boy声明数组时,不能指定其长度;须用new为数组的所有元素分配存储空间可以使用整型变量指定数组的大小,0 x785BA,boy,12,13,100,Java数组二维数组,每一维长度相同:int array; array = new int43;int array = new int43;每一维长度不相同:int array = new int3; array0 = new int1; array1 = new int3; array2 = new int2;,Java数组二维数组,int array;array = new int3;ar
3、ray0 = new int1;array1 = new int3;array2 = new int2;,0 x26BF,array,0 x1010,0 x1020,0 x1030,array0,array1,array2,Java数组练习,第一题:正序和倒序输出如下数组:a=1,2,3,4,5.6.7 第二题:找出如下数组中最大的元素和最小的元素:a=3,2,6,6,8,2,10,5,12,3,23,课堂练习:,编写程序:编写一个名为Test的主类,类中只有一个主方法;在主方法中定义一个大小为50的一维整型数组,数组名为x,数组中存放着1,3,5,99输出这个数组中的所有元素,每输出十个换一
4、行;在主方法中定义一个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是*,其余位置存的是#;输出这个数组中的所有元素;,类和对象,类和对象之间是什么关系?类由什么构成?成员变量和局部变量的区别是什么?什么叫构造方法?构造方法的作用是?如何创建对象,使用对象?,类与对象的基本概念,类与对象的关系:类是构造对象的模板,是概念,是规范类是具有相同属性和行为的对象的抽象对象是类的具体实例,类的构成,类的实现包括两部分:类声明:“class + 类名”类体成员变量的定义(刻画属性)成员方法的定义(刻画功能)基本格式:class 类名/类声明 类体的内容,错误!,成员变量与局部变量,成员变
5、量和局部变量,局部变量:必须初始化之后才能使用成员变量:在定义时可以对其初始化如果没有初始化,仍可直接使用。因为Java会使用默认值对其初始化,对象的创建和使用,Student s; / 声明对象s = new Student(); /实例化一个对象引用成员变量对象名.成员变量名s.age = 23;方法的使用对象名.方法名(参数列表)s.haveCourse(),构造方法(1),用途:一种特殊的方法,用于给新对象分配实体(内存)命名:名字必须与所在的类的名字完全相同构造方法没有返回值,也不能有返回值必须和new操作符一起使用,ublic class Student/成员变量定义String
6、stuNo;String name;int age; /构造方法Student() stuNo = “20709563”;name = “王小二”;,public class Testpublic static void main(String args)Student s;s = new Student();,构造方法(2),当一个类中没有定义构造方法时:编译器为其增加一个默认的构造方法(没有形参)如果一个类里定义了一个或多个构造方法时:java编译器将不提供默认的构造方法,ublic class A public static void main(String args)/声明对象p1和p
7、2 Point p1,p2;/为对象分配内存 p1 = new Point(); p2 = new Point(10,20); ,class Point int x,y; Point()x=0;y=0; Point(int a,int b)x=a;y=b; ,数组的引用和实体,ublic class Example2_3 public static void main(String args) int a=100,200,300; int b=10,11,12,13,14,15,16; b=a; b0=123456; System.out.println(数组a:+a0+,+a1+,+a2);
8、 System.out.println(数组b:+b0+,+b1+,+b2); System.out.println(数组b的长度:+b.length); ,0 x785BA,123456,对象的引用和实体,0 xAB,0 xDD,p1,p2,0 xDD,方法的参数传递,基本数据类型传递的是该值本身,如果改变参数变量所引用的实体,就会导致原变量的实体发生相同的变化,因为两个变量具有相同的引用,指向同一个实体,引用类型传递的是对对象的引用,而不是对象本身,基本实参,基本形参,引用型实参,引用型形参,实体,方法的参数传递,运行结果:34,方法的参数传递,public class ArrayTest
9、int a = new int2;public static void modify(int b)b0+;b1-;public static void main(String args)ArrayTest at = new ArrayTest( );at.a0 = 5; at.a1 = 5;modify(at.a);System.out.println(at.a0);System.out.println(at.a1);,64,课堂练习:,创建一个叫做圆的类:属性:半径(double)功能:获取半径、修改半径、计算面积、计算周长编写一个能为圆的半径赋值的构造方法;创建一个叫做圆柱的类:属性:底圆
10、(圆)、高(double)功能:获取底圆半径、修改底圆半径、计算表面积、计算体积编写一个能为圆柱所有属性赋值的构造方法;创建主类:创建一个圆对象,半径为10,输出该圆的面积与周长。使用创建的圆对象作底圆,创建一个圆柱对象,高为20。求圆柱的底圆半径、表面积和体积;将圆柱的底圆半径修改为20;再次求圆柱的底圆半径、表面积和体积;,封装-包,定义:Java允许把多个类收集在一起成为一个集合,称作包(package)语句:package + 包名作用:将源文件定义的类打包个数:最多出现一次位置:Java源文件的第一条语句;语句:import + 包名.类名作用:引入某个包中的类个数:语句个数不限,可
11、引入多个类位置:package语句和类的定义之间,封装-包,在面向对象的编程思想中,类的共享和复用很重要为避免一切重头做起,在编写Java程序时,除了自己编写类之外,有时还会引用其他包中的类比如:Java提供的许多类,或自己曾经编过的某些类JDK提供的类库非常强大,共130多个包:java.awt: 图形、文本窗口GUI类java.lang:Java的核心类,包括String,System,Math等java.io: 包含一些输入和输出类: 实现网络功能的类java.util:包含一些有用的数据类型,如日期和时间等,公有类和友好类(包内包外),类声明时,如果在关键字class的前面加上publ
12、ic,就称这样的类为公有类。任何一个类都可以使用公有类类声明时,如果不加任何修饰符,就称这样的类为友好类。只有在同一个包中的类才能够使用友好类(即便使用import语句也不行)。,ublic class A/公有类class A/友好类,封装-访问权限,类的设计者把类设计为一个黑匣子,使用者只能使用类中定义的公有成员(方法),这些共有成员就是类与外界沟通的接口;封装的目的:使用者必须通过类的外部接口访问类中的数据隐藏类的实施细节,保护数据不受破坏增加代码的可维护性,与外界沟通的接口,封装-访问权限,访问权限从高到低的顺序是:public protected 友好 private类的修饰符只有p
13、ublic,不能用protected和private来修饰类,课堂练习,在包a中新建一个类A,在类A中有一个int add(int m)方法,用来求1+2+m的和。在包b中新建一个类B,在类B中有一个int cheng(int n)方法,用来求n!的结果。在包c中新建一个主类C,调用A、B中的方法输出1+2+30的和,以及10!的计算结果。,继承,在Java类的声明中,使用关键字extends实现继承。由已有的父类派生新的子类,格式如下:class extends 子类类体;例如:注:Object类是java.lang包中的一个类:如果一个类的声明中没有使用extends关键字,该类就被系统默
14、认为是Object类的直接子类。,继承,父类和子类数量上的对应关系?子类会继承父类的哪些成员?当子类和父类在同一个包中,子类继承父类中不是private修饰的变量和方法,继承的成员变量和方法的访问权限不变。当子类父类不在同一个包中,子类继承父类的受保护(protected)成员和公有(public)成员,不能继承友好成员和私有成员private什么叫做对象的上转型?将子类对象的引用赋值给父类的对象,多态,定义:程序中多个名字相同的方法共存的现象,多态是面向对象程序设计的核心特性;优点:提高了程序的抽象性,突出Java语言的继承性分类:重载:一个类中存在多个同名方法方法名字相同,形式参数(类型或
15、个数)不同与返回值类型是否相同没关系重写:子类覆盖父类的同名方法返回值类型、方法名字和形式参数必须全都相同,多态(方法的重载),class Compute void add( ) System.out.println(No parameters); void add(int a, int b) int result = a + b; System.out.println(Int: + result); void add(int a, int b, int c) int result = a + b + c; System.out.println(Int: + result); void add
16、(float a, float b) float result = a + b; System.out.println(Float: + result); ,class Examplepublic static void main(String args) Compute sum = new Compute(); sum.add(); sum.add(1,2); sum.add(1.1f,2.2f); sum.add(1,2,3); ,No parametersInt:3Float:3.3000002Int:6,多态(方法的重写),class Animal String lable = Ani
17、mal; public void cry() System.out.println(叫); class Dog extends Animal String lable = Dog; public void cry() System.out.println(汪汪); class Cat extends Animal String lable = Cat; public void cry() System.out.println(喵喵); ,class Example public static void main (String args) Animal dongwu;dongwu=new Do
18、g();dongwu.cry(); dongwu=new Cat();dongwu.cry(); ,汪汪喵喵,多态(方法的重写),class Instrumentpublic void play()System.out.println(Instrument.play();class Wind extends Instrumentpublic void play()System.out.println(Wind.play();class Brass extends Instrumentpublic void play()System.out.println(Brass.play();,publi
19、c class Music public static void tune(Instrument i) i.play(); public static void main(String args) Instrument i=new Wind(); tune(i); i=new Brass(); tune(i); ,Wind.play()Brass.play(),课堂练习1,编写一个Java应用程序,该程序包括3个类:类人猿、People和主类E。要求:1类人猿中有个构造方法:类人猿(String s),对受保护的成员变量name进行初始化;有个public void speak()方法,在sp
20、eak方法中输出“咿咿呀呀.”的信息。2.People类是类人猿的子类,在People类中重写方法speak(),在speak方法中输出“小样的,不错嘛!会说话了!”的信息。3.在People类中新增方法void think(),在think方法中输出“别说话!认真思考!”的信息。4在主类E的main方法中创建类人猿与People类的对象类测试这2个类的功能。,abstract关键字,如何定义抽象类?如何定义抽象方法?,abstract关键字,关键字final和abstract能否同时修饰方法?构造方法能否定义为抽象方法?抽象方法和抽象类之间的关系?抽象方法能否被直接调用?抽象类能否被实例化?
21、它们的作用是什么?抽象类中如果含有抽象方法,则该类的子类有几种选择?,课堂练习,编写一个Shape抽象类:具有属性:周长和面积;具有求周长的抽象方法定义其子类三角形和矩形:分别具有求周长的方法。定义主类E,在其main方法中创建三角形和矩形类的对象并赋给Shape类的对象a、b,使用对象a、b来测试其特性,课堂练习2,在包a中编写一个Shape类:具有受保护权限的属性:形状(String类型)具有构造方法:能初始化该图形的形状具有方法printInfo:能输出图形信息(形状、大小等)。具有方法:计算周长getLength和计算面积getArea;在包b中编写Shape类的子类:圆形、矩形、三角
22、形:重写父类的相关方法。矩形类新增方法计算对角线的长度;三角形类新增方法判断三边能否构成三角形;在包c中编写主类TestShape:编写静态方法printAllInfo:能输出某图形的所有信息在主方法中全面且合理的测试上述类与方法(如上图所示),接口,接口是一种特殊的抽象类,这种抽象类中只包含常量和抽象方法,interface Printable int MAX = 100;/常量 void add();/抽象方法 float sum(float x, float y);,ublic interface 接口名 extends 父接口名列表 变量声明; /常量 方法声明; /抽象方法,publ
23、ic static final,publicabstract,接口,抽象类和接口之间有哪些异同点?相同点:都不能实例化访问权限只能由关键字public修饰不同点:抽象类中不全是常量,接口中全都是常量抽象类中不全是抽象方法,接口中必须是抽象方法抽象类含有构造方法,接口不含有构造方法抽象类单一继承,接口多重继承,理解接口,实现多重继承的功能为了简化程序结构,Java中只支持类间的单重继承,即:一个类至多只能有一个直接父类;解决实际问题时,在很多情况下仅依靠单重继承无法将问题的复杂性表述完整;接口的多重继承机制弥补了类间单一继承的弱点类与接口的继承特点:一个类 一个父类一个接口 多个接口一个类 多个
24、接口,继承,继承,实现,接口的多态性,接口中的同一个方法在不同的类中实现的方式可能不同;这也是Java面向对象程序设计中多态特性的体现,接口的多态性,接口回调(定义),接口声明的接口变量可以作为一种引用类型的变量来使用;接口回调:如果某一个类实现了某接口,该类创建的对象可以为接口声明的变量赋值接口变量被赋值之后就可以调用被类实现的接口中的方法,实现,调用,接口回调(举例),类Sum和Pro均使用了接口OneYoN,并分别实现了该接口中的方法disp,接口的课堂练习,定义一个交通工具收费接口Charge,包含一个收取费用的方法double getFee(int kmShu)和一个成员变量MAX表
25、示收取费用的最大值定义列车类Train来实现这个接口。收费规则自己定义。 定义主类E,在main方法中输出收取费用的最大值,和行使2000km后列车应收取的费用,编写Java应用程序,1)定义一个接口CanFly,描述会飞的方法public void fly();2)分别定义类飞机和鸟,实现CanFly接口3)定义一个测试类,测试飞机和鸟,在main方法中创建飞机对象和鸟对象再定义一个makeFly()方法,其中让会飞的事物飞并在main方法中调用该方法,让飞机和鸟起飞,Throwable 定义的方法,都用来返回错误信息,从上到下一个比一个详细,异常类课堂练习(1),课堂练习(例题),ubli
26、c class Example4_33 public static void main(String args ) int n=0,m=0,t=555; try m=Integer.parseInt(8888);n=Integer.parseInt(abc789);t=9999; catch(NumberFormatException e)System.out.println(发生异常,详细的异常信息为:);e.printStackTrace();n=123; System.out.println(最终计算结果为:);System.out.println(n=+n+,m=+m+,t=+t);
27、,课堂练习,抛出异常对象,异常处理机制抛出:try语句产生一个异常对象并把它抛出捕获:catch语句捕获异常对象异常的抛出:出错产生:程序运行出错时,JVM自动抛出异常对象人为抛出:程序员编写的代码主动抛出(throw)异常使用throw语句抛出异常格式:throw ;例如:throw new ArithmeticException();Exception e = new Exception();throw e;,Throwable或其子类的实例,class TestException public static void fact(int n) /求k的阶乘 int s=1, i; for(
28、i=1; i=n; i+) s = s * i; System.out.println(n+ != +s); public static void main (String args) for (int i=1; i20; i+) fact(i); ,抛出异常对象,需要增加检测数据溢出的代码 一旦检测到数据溢出:生成异常对象,利用throw语句把它抛出;使用catch语句来捕获该异常,自定义异常类,创建需要:由于程序的复杂性,Java系统虽然已经定义了很多异常类,但有些情况下程序员必须自己定义那些未被系统定义的异常;创建方式:可以将Exception类作为父类,来创建自己的异常类。例如:,只抛
29、出异常的方法,与异常相关的两个操作:抛出异常;捕获并处理异常在前面的程序中,异常的抛出与捕获处理都是在同一个方法中完成的(try-catch);实际编程中,有些方法并不需要处理它所产生的异常,而是向上传递,由该方法的调用者处理异常;,方法B,方法A,异常,抛出,处理,调用,只抛出异常的方法,如果一个方法只抛出异常而不处理异常,则需要使用throws语句来声明该方法所抛出的异常类型;基本格式:返回类型 方法名(参数列表) throws 异常类列表方法体;注意:throw与throws语义与用法的区别!throw:在方法体中抛出一个对象,导致方法执行结束throws:在方法的定义部分使用,声明该方法可能产生的异常类性,可抛出多种异常类型,用逗号分隔,处理,只抛出异常的方法,抛出异常,处理异常,调用,编写Java应用程序,编写一个异常类MyException;再编写一个类Student,该类有一个产生异常的方法public void speak(int m) throws MyException,要求参数m的值大于1000时,方法抛出一个MyException对象。最后编写主类,在主类的main方法中用Student创建一个对象s该对象调用speak方法。,