《09面向对象程序设计3-zw》由会员分享,可在线阅读,更多相关《09面向对象程序设计3-zw(14页珍藏版)》请在金锄头文库上搜索。
1、Softeem Consultancy Service面向对象程序设计3ID:SCSJ001-Java Basic Syntax1Softeem Consultancy Service课程目标 final关键字与常量 再谈对象的构造和初始化2Softeem Consultancy Servicefinal关键字 final-用于类、方法、变量前 final类-不可被继承,如java.lang.Math就是一个 final类,不可被继承 final变量-在初始化后不可改变变量值,用于常量定 义。如果final变量是引用变量,则不可以改变它的引 用对象,但可以改变对象的数据(属性) final方法
2、-不可被覆盖 public final static double PI = 3.1415927; 这就是常量!3Softeem Consultancy Service为什么需要常量 生活中,一周有七天,如何用代码表示?public class Week private int days = 7; public static void main(String args) Week w = new Week(); System.out.println(“一周有“+w.days+“天“); public class Week private int days = 7; public static
3、void main(String args) Week w = new Week(); w.days +; System.out.println(“一周有“+w.days+“天“); 一周有7天控制台输出 然而,总有不尽人意的事情发生:一周有8天控制台输出如何保证变量的值在运行期无法被改变?使用常量 4Softeem Consultancy Service什么是常量 常量是一种标识符,它的值在运行期间恒定不变 常量标识符在程序中只能被引用,而不能被重新赋值常量圆周率PI圆周率PI 代码表示 方式public static final double PI = 3.1415926535897932
4、3846;用法将ang角度转换成径度 public static double toRadians(double ang) return ang / 180.0 * PI;5Softeem Consultancy Service 常量的优点 如果不使用常量,直接在程序中填写数字或字符串,将 会有什么麻烦?public static double toRadians(double ang) return ang / 180.0 * 3.14159265358979323846; public static double toDegrees(double ang) return ang * 180
5、.0 / 3.14159265358979323846; public static final double PI = 3.14159265358979323846; / 圆周率 public static double toRadians(double ang) return ang / 180.0 * PI; public static double toDegrees(double ang) return ang * 180.0 / PI; 程序的可读性变差:用 户很难理解数字或字符 串的意思程序的可维护性变差:如 果数值改变,则需要在很 多地方改动,既麻烦又易 出错使用常量可以增强程
6、序的可读性、可维护性6Softeem Consultancy ServiceJava中常量的定义规则 加入final 关键字代表常量, 加入static 关键字代表类量 尽量使用含义直观的常量来表示那些将在程序中多次出现 的数字或字符串public class Student public static final int FEMALE = 1; /代表女性 public static final int MALE = 2; /代表男性 private int sex; /性别 public void setSex(int sex) if(sex=FEMALE) System.out.prin
7、tln(“这是一名女学生“); else if(sex = MALE) System.out.println(“这是一名男学生“); this.sex = sex; 7Softeem Consultancy Service对象的构造和初始化分析 对象的构造和初始化如下递归的进行 1. 设置实例变量的值为缺省的初始值 2. 调用对象的构造器 ,绑定构造器参数。 3. 如果构造器中有this()调用,则根据this()调用的 参数调用相应的重载构造器,然后,转到步骤5;否 则转到步骤4。 4. 除java.lang.Object类外,调用父类的中的初始 化块初始化父类的属性,然后调用父类构造器,如
8、 果在构造器中有super()调用,则根据super()中的 参数调用父类中相应的构造器。 5. 使用初始化程序和初始化块初始化成员。 6. 执行构造器方法体中其他语句。8Softeem Consultancy Service例子Object1public class Object1 private String name1 = “object1“; private String name2; System.out.println(“4free Object1“); static System.out.println(“5-static free Object1“); public Objec
9、t1() System.out.println(“1-Object1()“); public Object1(String name) this.name1 = name; System.out.println(“2-Object1(name)“); public Object1(String name1, String name2) this(name1); this.name2 = name2; System.out.println(“3-Object1(name1,name2)“); public void showName() System.out.println(name1+“.“+
10、name2); 9Softeem Consultancy Service例子TestObject public static void main(String args) Object1 obj1 = new Object1(); obj1 = new Object1(“jack“); obj1 = new Object1(“jack“,“z“); 10Softeem Consultancy Service构造和初始化注意 1.如果子类的构造器中没有显式地调用父类构造器,也 没有使用this关键字调用重载的其它构造器,则系统默 认调用父类无参数的构造器 2.如果子类构造器中既未显式调用父类构造
11、器,而父类 中又没有无参的构造器,则编译出错11Softeem Consultancy Service例子Object2public class Object2 extends Object1 private String name1 = “Object2“; System.out.println(“8-free Object2“); static System.out.println(“9-static free Object2“); public Object2() System.out.println(“6-Object2()“); public Object2(String name)
12、 super(name+“.super“); this.name1 = name; System.out.println(“7-Object2(name)“); public void showName() System.out.println(name1); 12Softeem Consultancy Service例子TestObject public static void main(String args) Object1 obj1 = new Object1(“jack“,“z“); Object2 obj2 = new Object2(“admin“); obj1.showName(); obj2.showName(); obj1 = obj2; obj1.showName(); 13Softeem Consultancy Service作业 编写Object3类,继承于Object2.也有自由块和静态自由 块,以及想应的构造方法. 修改测试类创建Object3的对象,查看输出结果.14