java类--10-1--北大计算机系java培训讲义.ppt_第1页
java类--10-1--北大计算机系java培训讲义.ppt_第2页
java类--10-1--北大计算机系java培训讲义.ppt_第3页
java类--10-1--北大计算机系java培训讲义.ppt_第4页
java类--10-1--北大计算机系java培训讲义.ppt_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,第一章 Java的类,北京大学计算机系 代亚非,本资源由 寒秀草与巧克力 搜集与网络 请您在传播的时候将下载分数设为0 真正体现资源共享的理念 谢谢 更多0分资料去我的文库,2,3,第一章 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 对象的构造函数,4,1.1 有关面向对象的概念,面向对象程序设计围绕的几个主要概念: 抽象数据类型、类

2、、类型层次(子类),继承性、多态性。,5,1.1 有关面向对象的概念,class Car int color_number; int door_number; int speed; void brake() void speedUp() ; void slowDown() ,数据抽象类型,6,1.1 有关面向对象的概念,什么是类? 类是描述对象的“基本原型”,它定义一种对象所能拥有的数据和能完成的操作,在面向对象的程序设计中,类是程序的基本单元。,程序中的对象 是类的一个实例,是一个软件单元,它由一组结构化的数据和在其上的一组操作构成。,7,1.1 有关面向对象的概念,变量:即指对象的所知道的

3、状态 方法:指对象的功能单元。 什么是消息? 软件对象通过相互间传递消息来相互作用和通信 一个消息由三部分组成: 1. 接受消息的对象 2. 要完成方法的名字 3. 方法需要的参数,8,1.1 有关面向对象的概念,一个例子 在程序中操作对象是类的一个实例:即对象 创建一个对象 Hello obj=new Hello(); 调用方法 obj.showString(“Hello World!”),class Hello ,private String s;,public void showString () System.out.println(s); public void changeStri

4、ng(String str) s=str; return s;,9,1.1 有关面向对象的概念,什么是封装? 封装把对象的所有组成部分组合在一起,封装定义程序如何引用对象的数据,封装实际,私有数据,方法,上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。,方法,数据,对象A,对象B,公有数据,10,1.1 有关面向对象的概念,什么是子类? 子类是作为另一个类的扩充或修正所定义的一个类.,bicycle,(super class),Mountain bikes,Racing bikes,Tandem bikes,sub class,11,1.1 有关面向对象的概念,什么是继承?

5、继承是子类利用父类中定义的方法和变量就像它们属于子类本身一样.,class Car int color_number; int door_number; int speed; push_break() add_oil() ,class Trash_Car extends Car double amount; fill_trash() ,12,1.1 有关面向对象的概念,什么是方法的覆盖? 在子类中重新定义父类中已有的方法。,class Car int color_number; int door_number; int speed; push_break() speed=0; add_oil(

6、) ,class Trash_Car extends Car double amount; fill_trash() push_break() speed=speed-10; ,13,1.1 有关面向对象的概念,什么是方法的重载(多态性)? 在同一个类中至少有两个方法用同一个名字,但有不同的参数。,类,void show(int int_num),void show(double double_num),void show(nit nit_ um, float float_um),123,1.23,123,1.23,14,1.2 Java语言的特点,Java是什么? Java= “C+”-“复

7、杂性和奇异性”+“安全性和可移植性” Java由那些特性? (1) 面向对象 封装性、多态性、继承性、动态链接 (2) 操作平台无关性 严格的语言定义:“没有依据机器的不同而不同” 或“由编译器决定”等字眼,最后的目标码都是一致的,初值都是确定的,15,1.2 Java语言的特点,两种工作模式的比较,源 程 序,Java编译器,SPARC,pentium,Powerpc,中间码,Powerpc,pentium,SPARC,二进制,源 程 序,SPARC,Powerpc,pentium,Powerpc,pentium,SPARC,编译器,二进制,Java解释器,16,1.2 Java语言的特点,

8、.,编译,没有绝对地址,调入包含,继承所用道的所有类, 内存分配确定,编程真正可执行的机器码,不存在伪造的指针 不违反访问权限 不非法访问对象 不导致操作栈溢出,17,1.2 Java语言的特点,Java虚拟机,不同的操作系统有不同的虚 拟机. 它类似一个小巧而高效的CPU. byte-code代码是与平台无关的 是虚拟机的机器指令. Java字节代码运行的两种方式: interpreter(解释方式) Just-in-time(即时编译):有代码 生成器将字节代码转换成本机 的机器代码,然后可以以较高速 度执行.,18,1.2 Java语言的特点,(3) 安全问题 Java是在网络环境下使用

9、的语言 一个安全的网络至少要防止以下几种破坏的可能性: 毁灭系统资源 消耗系统资源 挖掘系统或个人机密 骚扰正常工作的进行,19,1.2 Java语言的特点,20,1.2 Java语言的特点,(4) 多线程 Java提供现成的类Thread,只要继承这个类就可以编写多线程的程序。 (5) Java与C及C+的区别 不再有#include 和#define 等于处理功能 不再有structure,union及typedef 不再有函数、不再有指针、不再有多重继承 不再有goto 不再有操作符重载(Operatior Overloading) 取消自动类型转换,要求强制转换,21,1.3 Java

10、的开发环境,Java开发环境 JDK JDK中有Java编译器和bytecode解释器Applwtviewer是小应用程序的bytecode解释器 JDK的安装 直接执行JDK.exe,22,1.3 Java的开发环境,产生如下目录结构 javabin的目录下包含义下主要文件: javac: Java编译器, 用来将java程序编译成 Bytecode java: Java编译器,执行已经转换成Bytecode的 java应用程序. jdb: Java调试器, 用来调试java程序 javap: 反编译,将类文件还原回方法和变量. javadoc:文档生成器,创建HTML文件 appletvi

11、wer : Java解释器, 用来解释已经转换成 Bytecode的java小应用程序.,23,1.3 Java的开发环境,javalib子目录 库函数,其中classese.zip不要解开. 在autoexec.bat中加入以下两条命令 1. PATH c:javabin 2. SET CLASSPATH=. ; c:.libclasses.zip; c:myclasses;,24,1.3 Java的开发环境,25,1.3 Java的开发环境,vj1.1+的使用 1.进入vj,创建一个project 2.加入java文件 3. 编辑java文件 4. 编译java文件 5. Build一个p

12、roject文件 6. 运行java程序 -如果是小应用程序,则直接在VJ环境下运行 -如果是应用程序,则在dos下运行,26,1.4 你的第一个Java程序,编辑存盘:主类名(含有main方法)和 文件名要一致性 HelloWorldApp.java 编译程序 : javac HelloWorldApp.java 运行程序 : java HelloWorldApp “myjava” 运行结果 : Hi, myjava,class HelloWorldApp public static void main(String args) System.out.println(“Hi, ”+args0

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

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

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

16、都是java.applet.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); ,32,1.4 你的第一个Java程序,4. 当applet被浏览器运行时,paint语句自动执行 5. 在applet中与屏幕输出有关的操作通过Graphics对象来实现 6. 一个Java

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

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

19、的指针. 当你声明某个类,接口或数组类型的一个变量时,那个变量的值总是某个对象的引用或者是null引用. 指针就是简单的地址而已,引用除了表示地址而外,还象被引用的数据对象的缩影,还提供其他信息. 指针可以有+,-运算,引用不可以运算.,37,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;,38,1.5 Jav

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

21、ring.length;i+) arrayOfStringi=new String(“Hello”+i),arrayOfString0 arrayOfString1 arrayOfString8 arrayOfString9,对数组的引用,对 字 符 串 的 引 用,40,1.6 Java中的字符串,Java中的字符串类 String和StringBuffer String 类的定义和实例的生成 例: String str; str=“this is a string” 或: String str1=new String(“hello”); 或: String str2=“aaaa”; Str

22、ing类与其它类型的转换 例1:将实型数转换成字符串 System.out.println(String.valueOf(Math.PI);,.,41,1.6 Java中的字符串,有两个字符串str1,str2 str1=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);,42,1.6 Ja

23、va中的字符串,StringBuffer的字符串的内容是可以改变的 创建StringBuffer对象 StringBuffer str=new Stringbuffer(“hello”); 获取StringBuffer对象的信息 int len=str.length();,例:StringBuffer sb=new StringBuffer(“Drink Java!”); sb.insert(6,”Hot ”); System.out.println(sb.toString();,Drink Hot Java!,43,1.7 Java中的类、方法和变量,试用一个简单的类,class Car i

24、nt car_number; void set_number(int car_num) car_number=car_num; void show_number() System.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,44,1.7 Java中的类、方法和变

25、量,类的继承 关系,class Car int car_number; void set_number(int car_num) car_number=car_num; void show_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

26、.println(“My capacity is: ”+ capacity);,45,1.7 Java中的类、方法和变量,TrashCar中继承了Car中的两个方法,class CarDemo public static void main(String args) TrashCar DemoTrashCar=new TrashCar(); DemoTrashCar.set_number(4949); DemoTrashCar.set_capacity(20); DemoTrashCar.show_number(); DemoTrashCar.show_capacity(); ,Car是父类,

27、 TrashCar是子类,46,1.7 Java中的类、方法和变量,何时选择继承性? 一个很好的经验: “B是一个A吗?” 如果是则让B做A的子类.,常犯的错误A有一个B吗? 例如让汽车轮子成为汽车的子类是错误的,47,1.7 Java中的类、方法和变量,类的严格定义及修饰字,类的修饰字 class 类名称 extends 父类名称 . ,public, abstract, final或者没有,变量修饰字 变量数据类型 变量名1,变量名2=变量初值;,方法修饰字 方法的返回值类型 方法名称(参数1,参数2, /方法的内容 ,方法和变量的定义及修饰字,public、protected、priva

28、te,48,1.8 Java名空间及访问规则,每个类都创造了有自己的名字空间,指方法和变量可以知道彼此的存在,可以使用。 abstract类不能直接产生属于这个类的对象 final类不能被其他任何类所继承(安全的考虑) public类不但可以被同一程序包中的其它类使用,别的程序包中的类也可以使用. friendly(缺省)类只能被本包中的其它类使用,49,1.8 Java名空间及访问规则,变量和方法的修饰字public、protected、private public: 任何其它类、对象只要可以看到这个类的话,那么它就可以存取变量的数据,或使用方法。,class ABC public int

29、pub_i=5; public void show)() System.out.println (“pub_i”+pub_i); ,50,1.8 Java名空间及访问规则,class Demo public static void main(String args) ABC abc=new ABC(); System.out.println(“abc.pub_i”+abc.pub_i); abc.pub_i=10; abc.show(); ,abc.pub_i=5 pub_i=10;,51,1.8 Java名空间及访问规则,protected变量和方法 如果一个类中变量或方法有修饰字prote

30、cted,同一类,同一包可以使用。不同包的类要使用,必须是该类的子类可以存取变量或调用,public class ABC protected int pro_i=5; protected void show() System.out.println (“pro_i=” +pro_i;) ,52,1.8 Java名空间及访问规则,不同中的类不能使用,class DEF public static void main(String args) ABC abc=new ABC(); System.out.println (“_i=“+_i); abc.pub_i=10;

31、abc.show(); ,53,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=5 pro_i=10,1.8 Java名空间及访问规则,不同包但是是子类,54,1.8 Java名空间及访问规则,private 不允许任何其他类存取和调用 friendly(前边没有修饰字的情况) 在同一程序包中出现的类才可以直接使用它的数据和方法.

32、,55,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); System.out.println(“B.data_a= ”+B.data_a); ,data_a=5 A.data_a=3 B.data_a=5,class de

33、mo public static void main(String args) C c=new C(); c.println_out(); ,56,1.8 Java名空间及访问规则,方法的覆盖(overriding)和重载(overloading) 子孙类中定义的方法和祖先类中某个方法同名,同参数行,则祖先类中的该方法被覆盖. 方法的重载是指一个对象的多态性,即多个方法用相同的名称,但参数行不同.,类,void show(int int_num),void show(double double_num),void show(nit nit_ um, float float_um),123,1.

34、23,123,1.23,57,1.8 Java名空间及访问规则,到此为止-final final在方法之前,防止该方法被覆盖. final在类之前,标是该类不能被继承 final在变量之前,定义一个常量. 属于类的变量和方法-static static 在变量或方法之前, 表明它们是属于类的,class ABCD char data; static int_share_data; class Demo ABCD a,b,c,d,58,1.8 Java名空间及访问规则,静态变量在各实例间共享 如果是public静态变量,则其它类可以不通过实例化访问它们 静态方法称为类的方法,因此不用实例化即可调

35、用(面向过程) 一个对象的方法可以访问对象的数据成员,尽管不属于方法的局部变量 一个类的方法只能访问自己的局部变量,59,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 variable. 为什么不正确? 只有对象的方法可以访问对象的变量.,60,1.8 Java名空间及访问规则,

36、解决的办法: 1. 将变量改称类变量 class StaticError static String mystring=“hello”; public static void main(String args) System.out.println(mystring); ,61,1.8 Java名空间及访问规则,2. 先创建一个类的实例 class NoStaticError public static void main(String args) String mystring=“hello”; System.out.println(mystring); ,62,1.9 Java中的抽象类、

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

38、) 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; ,64,1.9 Java中的抽象类、接口和程序包,假设有若干个Circle,以及若干个Rectangle,希望计算它们的总面积,直截了当的做法是将它们分别放到两个数组中,用两个循环,加上一个加法,这种做法是不漂亮的

39、如果还有其它形状,triangle,ellipses等,上述方法显得“累赘”,我们希望有一种统一的表示,例如用一个数组shape,接受所有的形状,然后用 for (i=0;ishape.length;i+) area_total+=shapei.area();,65,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 3.14*r*r;

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

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

42、io.*;,68,1.10 对象的构造函数,使用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); ,69,1.10 对象的构造函数,Constructor和finalizer constructor(构造函数),在一个类中和类同名的方法叫构造函数.系统在产生对象时会自动执行.,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); ,70,1.10 对象的构造函数,构造函数应包含哪些内容? 构造函数多半定义一些初值或内存配置工

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论