【教学课件】第一章Java的类.ppt

上传人:牧羊曲112 文档编号:5659719 上传时间:2023-08-06 格式:PPT 页数:76 大小:484.97KB
返回 下载 相关 举报
【教学课件】第一章Java的类.ppt_第1页
第1页 / 共76页
【教学课件】第一章Java的类.ppt_第2页
第2页 / 共76页
【教学课件】第一章Java的类.ppt_第3页
第3页 / 共76页
【教学课件】第一章Java的类.ppt_第4页
第4页 / 共76页
【教学课件】第一章Java的类.ppt_第5页
第5页 / 共76页
点击查看更多>>
资源描述

《【教学课件】第一章Java的类.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第一章Java的类.ppt(76页珍藏版)》请在三一办公上搜索。

1、1,第一章 Java的类,北京大学计算机系代亚非,2,第一章 Java的类,1.1 有关面向对象的概念1.2 Java语言的特点1.3 Java的开发环境1.4 第一个Java程序1.5 Java类型系统1.6 Java中字符串的类1.7 Java中的类、方法和变量1.8 Java名空间及访问规则1.9 Java中的抽象类、接口和程序包1.10 对象的构造函数,3,1.1 有关面向对象的概念,面向对象程序设计围绕的几个主要概念:抽象数据类型、类、类型层次(子类),继承性、多态性。,4,1.1 有关面向对象的概念,class Car int color_number;int door_numbe

2、r;int speed;void brake()void speedUp();void slowDown(),数据抽象类型,5,1.1 有关面向对象的概念,什么是类?类是描述对象的“基本原型”,它定义一种对象所能拥有的数据和能完成的操作,在面向对象的程序设计中,类是程序的基本单元。,程序中的对象 是类的一个实例,是一个软件单元,它由一组结构化的数据和在其上的一组操作构成。,6,1.1 有关面向对象的概念,变量:即指对象的所知道的状态方法:指对象的功能单元。什么是消息?软件对象通过相互间传递消息来相互作用和通信 一个消息由三部分组成:1.接受消息的对象2.要完成方法的名字3.方法需要的参数,7,

3、1.1 有关面向对象的概念,一个例子在程序中操作对象是类的一个实例:即对象创建一个对象 Hello obj=new Hello();调用方法 obj.showString(“Hello World!”),class Hello,private String s;,public void showString()System.out.println(s);public void changeString(String str)s=str;return s;,8,1.1 有关面向对象的概念,什么是封装?封装把对象的所有组成部分组合在一起,封装定义程序如何引用对象的数据,封装实际,私有数据,方法,上

4、使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。,方法,数据,对象A,对象B,公有数据,9,1.1 有关面向对象的概念,什么是子类?子类是作为另一个类的扩充或修正所定义的一个类.,bicycle,(super class),Mountain bikes,Racing bikes,Tandem bikes,sub class,10,1.1 有关面向对象的概念,什么是继承?继承是子类利用父类中定义的方法和变量就像它们属于子类本身一样.,class Car int color_number;int door_number;int speed;push_break()add_oil()

5、,class Trash_Car extends Car double amount;fill_trash(),11,1.1 有关面向对象的概念,什么是方法的覆盖?在子类中重新定义父类中已有的方法。,class Car int color_number;int door_number;int speed;push_break()speed=0;add_oil(),class Trash_Car extends Car double amount;fill_trash()push_break()speed=speed-10;,12,1.1 有关面向对象的概念,什么是方法的重载(多态性)?在同一个

6、类中至少有两个方法用同一个名字,但有不同的参数。,类,void show(int int_num),void show(double double_num),void show(nit nit_ um,float float_um),123,1.23,123,1.23,13,1.2 Java语言的特点,Java是什么?Java=“C+”-“复杂性和奇异性”+“安全性和可移植性”Java由那些特性?(1)面向对象封装性、多态性、继承性、动态链接(2)操作平台无关性严格的语言定义:“没有依据机器的不同而不同”或“由编译器决定”等字眼,最后的目标码都是一致的,初值都是确定的,14,1.2 Java语

7、言的特点,两种工作模式的比较,源程序,Java编译器,SPARC,pentium,Powerpc,中间码,Powerpc,pentium,SPARC,二进制,源程序,SPARC,Powerpc,pentium,Powerpc,pentium,SPARC,编译器,二进制,Java解释器,15,1.2 Java语言的特点,.,编译,没有绝对地址,调入包含,继承所用道的所有类,内存分配确定,编程真正可执行的机器码,不存在伪造的指针不违反访问权限不非法访问对象不导致操作栈溢出,16,1.2 Java语言的特点,Java虚拟机,不同的操作系统有不同的虚拟机.它类似一个小巧而高效的CPU.byte-cod

8、e代码是与平台无关的是虚拟机的机器指令.Java字节代码运行的两种方式:interpreter(解释方式)Just-in-time(即时编译):有代码生成器将字节代码转换成本机的机器代码,然后可以以较高速度执行.,17,1.2 Java语言的特点,(3)安全问题Java是在网络环境下使用的语言一个安全的网络至少要防止以下几种破坏的可能性:毁灭系统资源消耗系统资源挖掘系统或个人机密骚扰正常工作的进行,18,1.2 Java语言的特点,19,1.2 Java语言的特点,(4)多线程Java提供现成的类Thread,只要继承这个类就可以编写多线程的程序。(5)Java与C及C+的区别不再有#incl

9、ude 和#define 等于处理功能不再有structure,union及typedef不再有函数、不再有指针、不再有多重继承不再有goto不再有操作符重载(Operatior Overloading)取消自动类型转换,要求强制转换,20,1.3 Java的开发环境,Java开发环境 JDKJDK中有Java编译器和bytecode解释器Applwtviewer是小应用程序的bytecode解释器JDK的安装直接执行JDK.exe,21,1.3 Java的开发环境,产生如下目录结构javabin的目录下包含义下主要文件:javac:Java编译器,用来将java程序编译成 Bytecodej

10、ava:Java编译器,执行已经转换成Bytecode的 java应用程序.jdb:Java调试器,用来调试java程序javap:反编译,将类文件还原回方法和变量.javadoc:文档生成器,创建HTML文件appletviwer:Java解释器,用来解释已经转换成 Bytecode的java小应用程序.,22,1.3 Java的开发环境,javalib子目录库函数,其中classese.zip不要解开.在autoexec.bat中加入以下两条命令1.PATH c:javabin2.SET CLASSPATH=.;c:.libclasses.zip;c:myclasses;,23,1.3 J

11、ava的开发环境,24,1.3 Java的开发环境,vj1.1+的使用1.进入vj,创建一个project2.加入java文件3.编辑java文件4.编译java文件5.Build一个project文件6.运行java程序-如果是小应用程序,则直接在VJ环境下运行-如果是应用程序,则在dos下运行,25,1.4 你的第一个Java程序,编辑存盘:主类名(含有main方法)和 文件名要一致性 HelloWorldApp.java编译程序:javac HelloWorldApp.java运行程序:java HelloWorldApp“myjava”运行结果:Hi,myjava,class Hell

12、oWorldApp public static void main(String args)System.out.println(“Hi,”+args0);,Java应用和Java小应用程序,26,1.4 你的第一个Java程序,1.声明一个类:public class HelloWorldApp,类名的第一个字母要大写2.一个类中可有很多方法,main方法是运行程序的第一个方法,方法名的第一个字母要小写.3.是向屏幕输出,相当于C中的printf();,public class HelloWorldApp public static void main(String args)System.

13、out.println(“Hi,”+args0);,27,1.4 你的第一个Java程序,4.命令行参数的获取 c:java HelloWorldApp myjava!6.字符串的拼接,public class HelloWorldApp public static void main(String args)System.out.println(“Hi,”+args0);,28,1.4 你的第一个Java程序,Java小应用程序不能直接执行和使用,必须要在浏览器中执行,import java.applet.Applet;import java.awt.*;public class Hello

14、Applet extends Applet public void paint(Graphics g)g.drawString(“Hello World”,0,50);,编辑存盘:主类名(extends Applet)和文件名一致编译代码:javac HelloApplet.java编写HTML文件:HelloApplet.html,29,1.4 你的第一个Java程序,运行applet程序:1.appletviwer HelloApplet.html 2.在浏览器中运行 运行结果:,Hello World!,30,1.4 你的第一个Java程序,理解程序1.import语句相当于C语言中的i

15、nclude每 2.每一个applet都是的子类 用extends继承3.applet中没有main方法,import java.applet.Applet;import java.awt.*;public class HelloApplet extends Applet public void paint(Graphics g)g.drawString(“Hello World”,0,50);,31,1.4 你的第一个Java程序,4.当applet被浏览器运行时,paint语句自动执行5.在applet中与屏幕输出有关的操作通过Graphics对象来实现6.一个Java源文件内最多只能有一

16、个public 类,称为主类,且必须和文件名同名,import java.applet.Applet;import java.awt.*;public class HelloApplet extends Applet public void paint(Graphics g)g.drawString(“Hello World”,0,50);,32,1.5 Java类型系统,33,1.5 Java类型系统,byte 8 位 2 的补码(byte)0short 16位 2 的补码(short)0int 32 位 2 的补码 0long 64位 2 的补码 0Lfloat 32位 IEEE 754浮

17、点数标准 0.0fdouble 64位 IEEE 754浮点数标准 0.0dchar 16位 同一码字符集 u0000(Unicode character),34,1.5 Java类型系统,程序:保留字,标识符(类名、域名、方法名、符号常量、局部变量,标号、),操作符、界定符,字面常量。声明一个变量int data=10;Boolean isAlived;Java中的操作符:与C基本一致Java中不再有指针了,35,1.5 Java类型系统,在Java中”引用“是指向一个对象在内存中的位置,在本质上是一种带有很强的完整性和安全性的限制的指针.当你声明某个类,接口或数组类型的一个变量时,那个变量

18、的值总是某个对象的引用或者是null引用.指针就是简单的地址而已,引用除了表示地址而外,还象被引用的数据对象的缩影,还提供其他信息.指针可以有+,-运算,引用不可以运算.,36,1.5 Java类型系统,s1,s2,10001,s2=s1;,a string,10001,class Mydate int year;int month;int day;,Mydate today=new MyDate(),10008,today,s1=“a string”;,例:String s1;String s2;,37,1.5 Java类型系统,能够动态取得的内存有两种,一种是对象实体,一种数组.Java用

19、new申请内存,不需要自己释放不用的内存.在Java中,定义数组时不必给出数组的大小,因为Java的数组是动态分配的。数组变量实际上是一个引用变量,因此要实例化才能使用。例:int Array;Array=new int8;,38,1.5 Java类型系统,例:String arrayOfString=new String10;每个数组元素包含一个对字符串对象的引用,此时值分配了包含字符串引用的空间,并没有对字符串本身分配内存,此时不能访问。,arrayOfString,for(int i=0;iarrayString.length;i+)arrayOfStringi=new String(“

20、Hello”+i),arrayOfString0arrayOfString1arrayOfString8arrayOfString9,对数组的引用,对字符串的引用,39,1.6 Java中的字符串,Java中的字符串类String和StringBufferString 类的定义和实例的生成例:String str;str=“this is a string”或:String str1=new String(“hello”);或:String str2=“aaaa”;String类与其它类型的转换例1:将实型数转换成字符串System.out.println(String.valueOf(Mat

21、h.PI);,.,40,1.6 Java中的字符串,有两个字符串str1,str2str1=str2;是指两个引用指向同一个地址str1.equals(str2)是指两个字符串内容相等获取String对象的信息例如:String s=“this is a string”;int len=s.length();boolean result=s.equal(“this is a 特test”);char ch=s.charAt(6);,41,1.6 Java中的字符串,StringBuffer的字符串的内容是可以改变的创建StringBuffer对象StringBuffer str=new Str

22、ingbuffer(“hello”);获取StringBuffer对象的信息int len=str.length();,例:StringBuffer sb=new StringBuffer(“Drink Java!”);sb.insert(6,”Hot”);System.out.println(sb.toString();,Drink Hot Java!,42,1.7 Java中的类、方法和变量,试用一个简单的类,class Car int car_number;void set_number(int car_num)car_number=car_num;void show_number()S

23、ystem.out.println(“My car No.is:”+car_number);,class CarDemo public static void main(String args)Car Democar=new Car();DemoCar.set_number(3838);DemoCar.show_number();,My car number is 3838,43,1.7 Java中的类、方法和变量,类的继承 关系,class Car int car_number;void set_number(int car_num)car_number=car_num;void show_

24、number()System.out.println(“My car No.is:”+car_number);,class TrashCar extends Car int capacity;void set_capacity(int trash_car_capacity)capacity=trash_car_capacity;void show_capacity();System.out.println(“My capacity is:”+capacity);,44,1.7 Java中的类、方法和变量,TrashCar中继承了Car中的两个方法,class CarDemo public st

25、atic void main(String args)TrashCar DemoTrashCar=new TrashCar();DemoTrashCar.set_number(4949);DemoTrashCar.set_capacity(20);DemoTrashCar.show_number();DemoTrashCar.show_capacity();,Car是父类,TrashCar是子类,45,1.7 Java中的类、方法和变量,何时选择继承性?一个很好的经验:“B是一个A吗?”如果是则让B做A的子类.,常犯的错误A有一个B吗?例如让汽车轮子成为汽车的子类是错误的,46,1.7 Jav

26、a中的类、方法和变量,类的严格定义及修饰字,类的修饰字 class 类名称 extends 父类名称.,public,abstract,final或者没有,变量修饰字 变量数据类型 变量名1,变量名2=变量初值;,方法修饰字 方法的返回值类型 方法名称(参数1,参数2,/方法的内容,方法和变量的定义及修饰字,public、protected、private,47,1.8 Java名空间及访问规则,每个类都创造了有自己的名字空间,指方法和变量可以知道彼此的存在,可以使用。abstract类不能直接产生属于这个类的对象final类不能被其他任何类所继承(安全的考虑)public类不但可以被同一程序

27、包中的其它类使用,别的程序包中的类也可以使用.friendly(缺省)类只能被本包中的其它类使用,48,1.8 Java名空间及访问规则,变量和方法的修饰字public、protected、privatepublic:任何其它类、对象只要可以看到这个类的话,那么它就可以存取变量的数据,或使用方法。,class ABC public int pub_i=5;public void show)()(“pub_i”+pub_i);,49,1.8 Java名空间及访问规则,class Demo public static void main(String args)ABC abc=new ABC();

28、System.out.println(“abc.pub_i”+abc.pub_i);abc.pub_i=10;abc.show();,abc.pub_i=5pub_i=10;,50,1.8 Java名空间及访问规则,protected变量和方法如果一个类中变量或方法有修饰字protected,同一类,同一包可以使用。不同包的类要使用,必须是该类的子类可以存取变量或调用,public class ABC protected int pro_i=5;protected void show()(“pro_i=”+pro_i;),51,1.8 Java名空间及访问规则,不同中的类不能使用,class

29、DEF public static void main(String args)ABC abc=new ABC();(“abc.pro_i=“+abc.pro_i);abc.pub_i=10;abc.show();,52,import mytest.pack.ABC;class DEF extends ABC public static void main(String agrs)DEF def=new DEF();System.out.println(def.i);def.i=10;def.show();,pro_i=5pro_i=10,1.8 Java名空间及访问规则,不同包但是是子类,5

30、3,1.8 Java名空间及访问规则,private不允许任何其他类存取和调用friendly(前边没有修饰字的情况)在同一程序包中出现的类才可以直接使用它的数据和方法.,54,1.8 Java名空间及访问规则,当子类中的变量名与父类的相同,原来的变量被遮盖.,class A int data_a=3;class B extends A int data_a=5;class C extends B void print_out()System.out.println(“data_a=”+data_a);System.out.println(“A.data_a=”+A.data_a);Syste

31、m.out.println(“B.data_a=”+B.data_a);,data_a=5A.data_a=3B.data_a=5,class demo public static void main(String args)C c=new C();c.println_out();,55,1.8 Java名空间及访问规则,方法的覆盖(overriding)和重载(overloading)子孙类中定义的方法和祖先类中某个方法同名,同参数行,则祖先类中的该方法被覆盖.方法的重载是指一个对象的多态性,即多个方法用相同的名称,但参数行不同.,类,void show(int int_num),void

32、show(double double_num),void show(nit nit_ um,float float_um),123,1.23,123,1.23,56,1.8 Java名空间及访问规则,到此为止-finalfinal在方法之前,防止该方法被覆盖.final在类之前,标是该类不能被继承final在变量之前,定义一个常量.属于类的变量和方法-staticstatic 在变量或方法之前,表明它们是属于类的,class ABCD char data;static int_share_data;class Demo ABCD a,b,c,d,57,1.8 Java名空间及访问规则,静态变量

33、在各实例间共享如果是public静态变量,则其它类可以不通过实例化访问它们静态方法称为类的方法,因此不用实例化即可调用(面向过程)一个对象的方法可以访问对象的数据成员,尽管不属于方法的局部变量一个类的方法只能访问自己的局部变量,58,1.8 Java名空间及访问规则,例:不正确的引用class StaticError String mystring=“hello”;public static void main(String args)System.out.println(mystring);错误信息:cant make a static reference to nonstatic vari

34、able.为什么不正确?只有对象的方法可以访问对象的变量.,59,1.8 Java名空间及访问规则,解决的办法:1.将变量改称类变量class StaticError static String mystring=“hello”;public static void main(String args)System.out.println(mystring);,60,1.8 Java名空间及访问规则,2.先创建一个类的实例class NoStaticError public static void main(String args)String mystring=“hello”;System.o

35、ut.println(mystring);,61,1.9 Java中的抽象类、接口和程序包,抽象类是指不能直接被实例化的类,因此一般作为其它类的超类,与final类正好相反抽象类中的抽象的方法-在该类中定义但不在该类中提供实现,由继承类提供细节public abstract class SomeAbstractClass void method1()System.out.println(“Hi,Java”);void method2();定义抽象方法的类必须是抽象类.,62,1.9 Java中的抽象类、接口和程序包,/已有两个类Circle和Rectangle,完成相关参数的计算 class

36、Circle public int r;Circle(int r)this.r=r/this指这个对象的 public int area()return 3*r*r;/取近似class Rectange public int width,height;/这里不需this Rectangle(int w,int h)width=w,height=h;public int area()return width*height;,63,1.9 Java中的抽象类、接口和程序包,假设有若干个Circle,以及若干个Rectangle,希望计算它们的总面积,直截了当的做法是将它们分别放到两个数组中,用两个

37、循环,加上一个加法,这种做法是不漂亮的如果还有其它形状,triangle,ellipses等,上述方法显得“累赘”,我们希望有一种统一的表示,例如用一个数组shape,接受所有的形状,然后用for(i=0;ishape.length;i+)area_total+=shapei.area();,64,1.9 Java中的抽象、接口和程序包,abstract class Shape abstract float area();class Circle extends Shape public int r;Circle(int r)this.r=r;public float area()return

38、 3.14*r*r;class Square extends Shapepublic int width,height;Rectangle(int w,int h)width=w,height=h;public float area()return width*height;,65,1.9 Java中的抽象类、接口和程序包,利用接口可实现多重 继承(可同时实现多个接口)接口的作用和抽象类 类似,指定原型,不直 接定义方法的内容.关键字implement用 来实现方法,即在使用时要用给出方法的实际内容接口中的方法和变量是public的,interface Stack void push(obje

39、ct x);object pop();,class A extends Applet implements Stack void push(object x);/具体内容 object pop();/具体内容,66,1.9 Java中的抽象类、接口和程序包,程序包:相当于其它语言中的库函数打包,package Graphics;class Square;class Circle;class Triangle;,使用程序包中的类要用import命令.表示路径,*表示使用包中的所有类import java.io.FileInputStream;import java.io.*;,67,1.10 对

40、象的构造函数,使用new来做内存配置,class Demo1/数组的配置 public static void main(String args)int array;array=new int55;array14=5;,class myClass/对象实体的产生 int data=5;class Demo2 public static void main(String args)myClass obj;/建立一个引用 obj=new myClass();System.out.println(obj.data);,68,1.10 对象的构造函数,Constructor和finalizercons

41、tructor(构造函数),在一个类中和类同名的方法叫构造函数.系统在产生对象时会自动执行.,class Point int x,y;Point()x=0;y=0;Point(int new_x,int new_y)x=new_x,y=new_y;,class UsePoint Point point_A=new Point();Point point_B=new Point(5,7);,69,1.10 对象的构造函数,构造函数应包含哪些内容?构造函数多半定义一些初值或内存配置工作一个类可以有多个构造函数(重载),根据参数的不同决定执行哪一个.如果程序中没有定义构造函数,则创造实例时使用的是缺

42、省函数,它是一个无内容的空函数.,70,1.10 对象的构造函数,thisthis指自己这个对象this的作用是要将自己这个对象当作参数,传送给别的对象中的方法.,class ThisClass public static void main()Bank bank=new Bank();bank.someMethod(this);,class Circle int r;Circle(int r)this.r=r;public area()return r*r*3;,71,super指这个对象的父类super用来引用父类中的方法及变量数据.public class apple extends f

43、ruits public apple(int price)super(price);以上句子表示使用超类的构造函数生成实例super必须是子类构造器的第一条语句,1.10 对象的构造函数,72,小结,一个Java程序(包括小应用程序)由若干个类组成,它们分布在由CLASSPATH指定的一个目录中一个Java程序中只能由一个主类,并且与文件同名.CLASSPATH指定多个目录,它们和起来被看成是这个目录的根,根中的类构成缺省包目录树中每个子目录中的类的集合对应Java一个包(package),子目录的层次与包的记法的层次对应,73,小结,C:,java,bin,lib,classes.zip,j

44、avac,java,appletviewer,javasource,myclass,让PATH包含javabinSET CLASSPATH=.;C:.myclasses,import java.io.*;import java.awt.Graphics;import mycalss.calculate.*;public class test,myjava.java,calculate,A,B,C,package myclass.calculateclass A class BclassC,74,小结,名空间及访问规则-package,class/object,member,局部变量-publi

45、c,private,protected,default,75,小结,对象模型-Java的类和对象(一般,抽象,接口)-继承机制(单继承,多实现)static,import,final的含义和作用,76,小结,避免在类中使用太多的基本类型private String senderName;private String senderStreet;private String senderCity;private String senderState;private String senderZip;private String receiverName;private String receiverStreet;private String receiverCity;private String receiverState;private String receiverZip;,address senderaddress receiver,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号