Presentation is loading. Please wait.

Presentation is loading. Please wait.

JAVA程序设计 (03) JAVA Programming

Similar presentations


Presentation on theme: "JAVA程序设计 (03) JAVA Programming"— Presentation transcript:

1 JAVA程序设计 (03) JAVA Programming
湖南大学软件学院 主讲:荣辉桂

2 1.8 Java名字空间及访问规则 每个类都创造了有自己的名字空间,指方法和变量可以知道彼此的存在,可以使用。
abstract类不能直接产生属于这个类的对象 final类不能被其他任何类所继承(安全的考虑) public类不但可以被同一程序包中的其它类使用,别的程序包中的类也可以使用. friendly(缺省)类只能被本包中的其它类使用

3 1.8 Java名空间及访问规则 变量和方法的修饰字public、protected、private
class ABC { public int pub_i=5; public void show)() { System.out.println (“pub_i”+pub_i); }

4 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;

5 1.8 Java名空间及访问规则 protected变量和方法
public class ABC { protected int pro_i=5; protected void show() { System.out.println (“pro_i=” +pro_i;) }

6 1.8 Java名空间及访问规则 不同包中的类不能使用 class DEF
{ public static void main(String args[]) { ABC abc=new ABC(); System.out.println (“abc.pro_i=“+abc.pro_i); abc.pub_i=10; abc.show(); }

7 1.8 Java名空间及访问规则 不同包但是是子类 import mytest.pack.ABC;
class DEF extends ABC { public static void main(String agrs[]) { DEF def=new DEF(); System.out.println(def.pro_i); def.pro_i=10; def.show(); } } pro_i=5 pro_i=10

8 1.8 Java名空间及访问规则 private 不允许任何其他类存取和调用 friendly(前边没有修饰字的情况)
在同一程序包中出现的类才可以直接使用它的数据和方法.

9 1.8 Java名空间及访问规则 当子类中的变量名与父类的相同,原来的变量被遮盖. class demo
{ public static void main(String args[]) { C c=new C(); c.print_out(); }} class A { static int data_a=3;} class B extends A {static 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

10 1.8 Java名空间及访问规则 方法的覆盖(overriding)和重载(overloading)
子孙类中定义的方法和祖先类中某个方法同名,同参数行,则祖先类中的该方法被覆盖. 方法的重载是指一个对象的多态性,即多个方法用相同的名称,但参数行不同. void show(int int_num) 123 1.23 void show(double double_num) 123,1.23 void show(nit nit_ um, float float_um)

11 1.8 Java名空间及访问规则 到此为止-----final final在方法之前,防止该方法被覆盖.
属于类的变量和方法----static static 在变量或方法之前, 表明它们是属于类的, object a char data object c Object b static int share_data object d class ABCD { char data; static int_share_data; } class Demo { ABCD a,b,c,d}

12 1.8 Java名空间及访问规则 静态变量在各实例间共享 如果是public静态变量,则其它类可以不通过实例化访问它们
静态方法称为类的方法,因此不用实例化即可调用(面向过程) 一个对象的方法可以访问对象的数据成员,尽管不属于方法的局部变量 一个类的方法只能访问自己的局部变量 例子,请指出下例的输出结果

13 1.8 Java名空间及访问规则 例:不正确的引用 class StaticError { String mystring=“hello”;
public static void main(String args[]) { System.out.println(mystring);} } 错误信息:can’t make a static reference to nonstatic variable. 为什么不正确? 只有对象的方法可以访问对象的变量.

14 1.8 Java名空间及访问规则 解决的办法: 1. 将变量改成类变量 class StaticError
{ static String mystring=“hello”; public static void main(String args[]) { System.out.println(mystring);} }

15 1.8 Java名空间及访问规则 2. 先创建一个类的实例 class NoStaticError {
public static void main(String args[]) String mystring=“hello”; System.out.println(mystring); }

16 1.9 Java中抽象类、接口和程序包 抽象类是指不能直接被实例化的类,因此一般作为其它类的超类,与final类正好相反
抽象类中的抽象的方法-在该类中定义但不在该类中提供实现,由继承类提供细节 public abstract class Myclass { void method1() { System.out.println(“Hi, Java”);} abstract void method2(); //定义抽象方法 } 定义抽象方法的类必须是抽象类. 如果抽象类的子类不为抽象类,则子类必须实现父类所有的抽象方法。

17 1.9 Java中抽象类、接口和程序包 引入抽象类的目的是更好地进行系统抽象。例如,不同类中都有一个同名的方法,但各自的实现方法不一样,那么可以在它们的父类中声明一个抽象方法,具体实现由子类进行。 当A2为A1的子类时(或者说A2继承A1类),我们可以用A1类来定义对象a1,用类A2的构造方法对起进行初始化。 抽象类应用:有两个类Circle和Rectangle,完成相关参数的计算。

18 1.9 Java中抽象类、接口和程序包 class 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; }

19 1.9 Java抽象类,接口和程序包 假设有若干个Circle,以及若干个Rectangle,希望计算它们的总面积,直截了当的做法是将它们分别放到两个数组中,用两个循环,加上一个加法,这种做法是不漂亮的 如果还有其它形状,triangle,ellipses等,上述方法显得“累赘”,我们希望有一种统一的表示,例如用一个数组shape[],接受所有的形状,然后用 相关源码 for (i=0;i<shape.length;i++) { area_total+=shape[i].area(); }

20 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; } } class Square extends Shape { public int width,height; Rectangle (int w, int h){ width=w,height=h;} public float area() {return width*height; } 1.9 Java中的抽象、接口和程序包

21 1.9 Java抽象类、接口和程序包 interface Stack 利用接口可实现多重 继承(可同时实现多个接口)
{ void push(object x); object pop();} 利用接口可实现多重 继承(可同时实现多个接口) 接口的作用和抽象类 类似,指定原型,不直 接定义方法的内容. 关键字implements用来实现方法,即在使用时要用给出方法的实际内容 接口中方法和变量是public的,所以可以省略。 class A extends Applet implements Stack { void push(object x) { …;//具体内容 } object pop() …;//具体内容}

22 1.9 Java抽象类、接口和程序包 程序包:相当于其它语言中的库函数 打包
package Graphics; class Square {…;} class Circle {…;} class Triangle {…;} 使用程序包中的类要用import命令.表示路径,*表示使用包中的所有类 import java.io.FileInputStream; import java.io.*; io java FileInputStream

23 1.9 Java抽象类、接口和程序包 通过关键字package声明包语句。package 语句作为Java源文件的第一条语句,指明该源文件定义的类所在的包。package语句的一般格式为: package 包名 ; 如果源程序中省略了package语句,源文件中所定义命名的类被隐含地认为是无名包的一部分,即源文件中定义命名的类在同一个包中,但该包没有名字。 包名可以是一个合法的标识符,也可以是若干个标识符加“.”分割而成,如: package sunrise; package sun.com.cn;

24 1.9 Java抽象类、接口和程序包 程序如果使用了包语句,那么你的目录结构必须包含有如下的结构 …\tom\jiafei (… 代表特定的目录) 例如:package tom.jiafei; 比如有如下目录结构: c:\1000 \tom\jiafei。包结构生成有两种模式: 《将源文件编译后得到的全部字节码文件拷贝到目录c:\1000\tom\jiafei中,如果你事先将源文件保存到c:\1000\tom\jiafei中,那么直接编译源文件,生成的字节码文件就直接保存到当前目录中了; 如:c:\1000\tom\jiafei\javac 文件名.Java ; 可以直接采-d 编译参数,将编译的字节码文件拷贝相应的目录结构中;比如:  c:\1000\javac –d .C:\tom.java(将自动创建目录结构) 我们将下述例子10的源文件保存到c:\1000\tom\jiafei。

25

26 然后编译原文件: c:\1000\Tom\jiafei\javac Example.java 运行程序::c:\1000\java Tom.jiafei. Example ; 也可以将包所在的目录些入CLASSPATH中,那么就可以在任意位置:java Tom.jiafei.Example 了。 因为起了包名,类Example的全名已经是:T om.jiafei.Example(就好比大连的全名是:“中国.辽宁.大连”)。 包名应该避免与其他包名冲突。但要做到这一点似乎很困难,如果你的包需要在全世界是唯一的,Sun公司 建议大家使用自己所在公司的Internet域名倒置后做包名,例如,将域名“sina.com.cn”的倒置“cn.com.sina”做包名。

27 1.10 对象的构造函数 Constructor(构造方法)和finalizer(撤销对象的方法)
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); }

28 1.10 对象的构造函数 构造函数应包含哪些内容? 构造函数多半定义一些初值或内存配置工作
1.10 对象的构造函数 构造函数应包含哪些内容? 构造函数多半定义一些初值或内存配置工作 一个类可以有多个构造函数(重载),根据参数的不同决定执行哪一个. 如果程序中没有定义构造函数,则创造实例时使用的是缺省函数,它是一个无内容的空函数.

29 1.10 对象的构造函数 this this指自己这个对象 this的作用是要将自己这个对象当作参数,传送给别的对象中的方法.
class Circle { int r; Circle(int r) {this.r=r;} public area() { return r*r*3;} } class ThisClass { public static void main() { Bank bank=new Bank(); bank.someMethod(this); }

30 1.10 对象的构造函数 super指这个对象的父类 super用来引用父类中的方法及变量数据.
1.10 对象的构造函数 super指这个对象的父类 super用来引用父类中的方法及变量数据. public class apple extends fruits { public apple(int price) { super(price); } } 以上句子表示使用超类的构造函数生成实例 super必须是子类构造器的第一条语句

31 小结 一个Java程序(包括小应用程序)由若干个类组成,它们分布在由CLASSPATH指定的一个目录中
目录树中每个子目录中的类的集合对应Java一个包(package),子目录的层次与包的记法的层次对应

32 package myclass.calculate
class A{} class B{} classC{} C:\ java myclass lib javasource bin classes.zip calculate myjava.java javac A B C appletviewer java import java.io.*; import java.awt.Graphics; import mycalss.calculate.*; public class test {} 让PATH包含…\java\bin SET CLASSPATH =.; C:\...\myclasses

33 小结 名空间及访问规则 --package,class/object,member,局部变量
--public ,private,protected,default 成员的可视性描述 public protected 缺省 private yes no yes* 同一类中 同一包中 不同包的 子类中 非子类 也不同包

34 小结 对象模型 ---Java的类和对象(一般,抽象,接口) --继承机制(单继承,多实现)
static, import, package,final的含义和作用

35 下课了。。。 追求 休息一会儿。。。


Download ppt "JAVA程序设计 (03) JAVA Programming"

Similar presentations


Ads by Google