3.6 static关键字 3.7 内部类 3.8 Java的帮助文档 第15讲 面向对象(3) 3.6 static关键字 3.7 内部类 3.8 Java的帮助文档
知识回顾 什么样的方法是构造方法? 构造方法作用是什么? 构造方法是如何调用的? 方法名与类名完全相同 方法的定义时没有返回值类型的定义 方法体内不用用return返回一个值 构造方法作用是什么? 创建对象,并为对象初始化 构造方法是如何调用的? 用new创建对象时调用 在另一个重载的构造方法里用this()
知识回顾 构造方法的重载 this关键字 this([参数值列表]); 可以定义多个参数个数或参数类型不同的构造方法 代表当前对象
作业中的问题 张超(杨威) 柴浩虹 61zhaoyu14 19李通14 李帅强 陈俊
本讲要点 【要点】 【教学目标】 static关键字(静态变量、静态方法、静态代码块) 内部类(成员内部类、静态内部类、方法内部类) 掌握静态变量、静态方法、静态代码块的基本概念和使用方法,掌握内部类的基本概念和基本使用方法。
3.6 static关键字—3.6.1 静态变量 【静态变量】 在一个Java类中,可以使用static关键字来修饰成员变量,该变量被称作静态变量。 【说明】 静态变量可以被所有该类的对象共享,可以使用“类名.变量名”的形式来访问。 static关键字只能修饰成员变量,不能修饰局部变量。
3.6 static关键字—3.6.1 静态变量 【静态变量】 如: public class Student{ public static String schoolName; } 则在其它类中可以使用Student.schoolName来引用该变量。
3.6 static关键字—3.6.1 静态变量 例1:定义一个学生类,定义成员变量schoolName为静态变量
3.6 static关键字—3.6.1 静态变量 以下三个成员变量引用是完全相同的变量 Student.schoolName 例程3-14的Student类中定义了一个静态变量schoolName,用于表示学生所在的学校,它被所有的实例所共享。由于schoolName是静态变量,因此可以直接使用Student.schoolName的方式进行调用,也可以通过Student的实例对象进行调用,如stu2.schoolName。在第8行代码将变量schoolName赋值为“传智播客”,通过运行结果可以看出学生对象stu1和stu2的schoolName属性均为“传智播客”。 河南经贸职业学院 河南经贸 以下三个成员变量引用是完全相同的变量 Student.schoolName stu1.schoolName stu2.schoolName
3.6 static关键字—3.6.2 静态方法 【静态方法】 被static关键字修饰的方法称为静态方法 【注意】 静态方法也是类的所有对象共享,可以使用“类名.方法名()”的方式来访问,也可以通过类的实例对象来访问。 【注意】 在一个静态方法中只能访问静态成员 因为:非静态成员需要先创建对象才能访问,而静态方法在被调用时可以不创建任何对象。
3.6 static关键字—3.6.2 静态方法 例2:静态方法定义与调用
3.6 static关键字—3.6.3 静态代码块 【静态代码块】 在Java类中,使用一对大括号{}括起来的若干行代码被称为一个代码块,用static关键字修饰的代码块称为静态代码块。 【静态代码块的执行】 当类被加载(将类的class文件从磁盘调入内存的过程)时,静态代码块会执行。 由于类只在第一次引用时加载一次,因此静态代码块只执行一次, 在程序中,通常使用静态代码块来对类的成员变量进行初始化。
3.6 static关键字—3.6.3 静态代码块 例3:静态代码块 验证 运行结果可以看出,程序中的两段静态代码块都执行了。在命令行窗口输入“java Example14”后,虚拟机首先会加载类Example14,在加载类的同时就会执行该类的静态代码块,紧接着会调用main()方法。在该方法中创建了两个Person对象,但在两次实例化对象的过程中,静态代码块只执行一次,这就说明类在第一次使用时才会被加载,并且只会加载一次
3.6 static关键字—3.6.3 静态代码块
3.6 static关键字—3.6.4 单例模式 参考教材章节
3.7 内部类—3.7.1 成员内部类 【内部类】 在一个类的类体以内定义的类,就是内部类,这个内部类所在的类称为外部类。 根据内部类的位置、修饰符和定义的方式可分为:成员内部类、静态内部类、方法内部类。
3.7 内部类—3.7.1 成员内部类 【成员内部类】在类体中直接定义的类,即与成员变量、成员方法并列定义的类。 在外部类中访问内部类的成员变量或成员方法也必须创建内部的对象,在内部类中可以直接访问外部类的成员。
3.7 内部类—3.7.1 成员内部类 例4:定义Outer类作为外部类,在该类中定义一个内部类Inner。 Outer类中定义一个test()方法和一个成员变量num。其中,test()方法中创建内部类Inner的实例对象,并通过该对象调用Inner类的show()方法,将num值进行打印。 Inner类中定义一个show()方法,在show()方法中输出外部类的成员变量num的值。
3.7 内部类—3.7.1 成员内部类
3.7 内部类—3.7.1 成员内部类 从运行结果可以看出: (1)外部类中可以使用成员内部类(创建内部类对象) (2)内部类可以直接访问外部类的成员
3.7 内部类—3.7.1 成员内部类 成员内部类也可以被第三个类通过外部类来访问。 如果想通过外部类去访问内部类,则需要通过外部类对象创建内部类对象,创建内部类对象的具体语法格式如下: 外部类名.内部类名 变量名 =new 外部类名().new 内部类名();
3.7 内部类—3.7.1 成员内部类 例5:针对上例的Outer类写一个测试程序
3.7 内部类—3.7.2 静态内部类 【静态内部类】可以使用static关键字来修饰一个成员内部类,该内部类被称作静态内部类。 静态内部类可以在不创建外部类对象的情况下被实例化,创建静态内部类对象的具体语法格式如下: 外部类名.内部类名 变量名=new 外部类名.内部类名();
3.7 内部类—3.7.2 静态内部类 例6:将上例中的Inner类改为静态内部类 注意: 静态内部类的方法中只能访问外部类的静态成员
3.7 内部类—3.7.3 方法内部类 【方法内部类】方法内部类是指在成员方法中定义的类,它只能在当前方法中被使用。
3.7 内部类—3.7.3 方法内部类 例7:方法内部类。在Outer类的test()方法中定义一个内部类Inner。 由于Inner是方法内部类,因此只能在方法中创建该类的对象并调用show()方法
3.7 内部类—3.7.3 方法内部类 从运行结果可以看出,方法内部类也可以访问外部类的成员变量num
3.8 Java帮助文档—3.8.1 Java的文档注释 Java的文档注释 文档注释用于是嵌入到程序当中的帮助信息,用于说明如何使用当前程序,它以“/**”开头,以“*/”标志结束 Java中提供了javadoc命令,它可以将这些帮助信息提取出来,自动生成HTML格式的帮助文档,从而实现程序的文档化
3.8 Java帮助文档—3.8.1 Java的文档注释 @author:用于对类的说明,表示这个程序的作者 @version:用于对类说明,表示这个程序的开发版本号 @param:用于对方法的说明,表示方法上定义的参数以及参数对应的说明 @return:用于对方法的说明,表示方法的返回值代表的意义
3.8 Java帮助文档—3.8.1 Java的文档注释 为程序添加文档注释后,便可以使用javadoc命令生成Person类的帮助文档。打开命令行窗口,进入程序所在的目录,输入生成文档的命令,具体如下所示: 其中: -d 用来指定输出文档存放的目录 . 表示当前的目录 -version 用来指定输出文档中需包含版本信息 -author 用来指定输出文档中需包含作者信息
3.8 Java帮助文档—3.8.1 Java的文档注释 在文件名上右单击 选择[Export]命令 选择JavaJavadoc Next
3.8 Java帮助文档—3.8.1 Java的文档注释 Javadoc command:选择JDK中的javadoc.exe命令 选择要生成文档的源文件 选择生成文档的目标文件夹
3.8 Java帮助文档—3.8.1 Java的文档注释
3.8 Java帮助文档 在线文档: http://tool.oschina.net/apidocs/apidoc?api=jdk_7u4 官网在线文档 http://docs.oracle.com/javase/7/docs/api/
3.8 Java帮助文档—3.8.1 Java的文档注释 3.8.2 JDK帮助文档的使用 JDK帮助文档是Oracle公司针对JDK中所有的Java类提供的一整套帮助文档,它详细介绍了所有Java类的属性、方法、继承关系和示例用法等内容 JDK帮助文档通常有两种,一种是Oracle公司官方发布的HTML格式的JDK帮助文档,一种是由一些Java爱好者根据官方文档制作而成的CHM格式的JDK帮助文档。
3.8 Java帮助文档—3.8.1 Java的文档注释
本讲小结 static关键字 静态变量 静态方法 静态代码块 内部类 成员内部类 静态内部类 方法内部类
作业 自学以下内容: 3.5 垃圾回收 3.6.4 单例模式 3.8.1 Java的文档注释 3.10习题