Java 第12讲:static与方法重载 主讲教师:李焱 讲师.

Slides:



Advertisements
Similar presentations
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Advertisements

第3章 使用类和对象编程 软 件 学 院 朱士明 副教授.
第4章 Java中的几个关键字 Java 语言编程技术.
第3-2章 类与 对象 Java类的特性 教学内容: 类的私有成员与公共成员 方法的重载 构造方法 实例成员与静态成员 重点: 重载 难点:
第四章 类 和 对 象.
第4章 类 和 对 象.
3.6 static关键字 3.7 内部类 3.8 Java的帮助文档
第三讲 面向对象(上).
Java程序设计教程 第一讲 Java概述.
四資二甲 第三週作業 物件導向程式設計.
第14章 c++中的代码重用.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
全国计算机等级考试 二级基础知识 第二章 程序设计基础.
类与对象 Java 实用技术4 类与对象
第10讲 Java面向对象编程基础(4) 教学目标 主要内容.
第六章 JAVA语言中的面向对象特性 6.1 类 6.2 对象 6.3 面向对象的特性 6.4 抽象类、接口和Inner Class.
3.3 Java的非访问控制符 Java的非访问控制符 static 静态修饰符 修饰属性和方法 abstract 抽象修饰符 修饰类和方法
第三章 控制结构.
Using C++ The Weird Way Something about c++11 & OOP tricks
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
常用工具类.
EBNF 请用扩展的 BNF 描述 C语言里语句的结构; 请用扩展的 BNF 描述 C++语言里类声明的结构;
欢乐玩转单元测试之JUnit 讲师:FREE QQ:
第4章 面向对象编程方法 王德俊 上海交通大学继续教育学院.
Java习题解析.
管理信息结构SMI.
Java程序设计 第9章 继承和多态.
走进编程 程序的顺序结构(二).
辅导课程六.
Ch01 物件與類別複習 物件導向系統實務.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第一章 函数 函数 — 研究对象—第一章 分析基础 极限 — 研究方法—第二章 连续 — 研究桥梁—第二章.
临界区软件互斥软件实现算法 主讲教师:夏莹杰
C/C++/Java 哪些值不是头等程序对象
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
《JAVA程序设计》 语音答疑 辅导老师:高旻.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第二章 Java基本语法 讲师:复凡.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
$9 泛型基础.
C#面向对象程序设计 $6 深入理解类.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
本节内容 类成员的访问控制 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第九节 赋值运算符和赋值表达式.
Chapter 18 使用GRASP的对象设计示例.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
辅导课程十五.
第二章 Java基本语法 讲师:复凡.
第四章 函数 丘志杰 电子科技大学 计算机学院 软件学院.
第7章 模板 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第二章 Java基本语法 讲师:复凡.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一目录中即不要移动文件夹“代码”的默认位置。
JAVA 程式設計與資料結構 第三章 物件的設計.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
對於成員(member)存取權的限制 成員的資料被毫無限制的存取,任誰都可以指定任意值給成員,Java語言為了防止這種現象的產生,規定:有一種成員的資料不能任由類別外部的任何人隨意存取。
判斷(選擇性敘述) if if else else if 條件運算子.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第二章 Java基础语法 北京传智播客教育
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
Summary
Presentation transcript:

Java 第12讲:static与方法重载 主讲教师:李焱 讲师

内容简介 内容简介: 1.本讲的位置,教材的3章第1.3、1.4节的内容。 2.本讲的主要内容:掌握static关键字的特性,学习、使用方法重载。

重点和难点 本讲内容的重点和难点 重点是掌握static特性与方法重载的依据。 难点在于学会使用方法重载。

第三章(1.4节)static关键字 static用来修饰类的成员变量和成员方法,同时也可以修饰代码块,表示静态的代码块。静态的成员变量和方法独立于类的对象,被类的所有实例共享。因此可不生成类的任何对象,直接通过类实现对静态成员的访问。当类加载后,Java虚拟机能根据类名在运行时数据区的方法区内找到它们。

3.1.4 static 访问类的静态变量和静态方法时,可以直接通过类名访问,语法如下: 类名.静态方法名(形参列表); 类名.静态变量名; 当Java虚拟机(JVM)加载类时,静态代码块被一次性执行,称为加载时执行。若类中有多个静态代码块,JVM将按照它们出现的顺序依次执行,且每个代码块只被执行一次。

3.1.4 static示例 public class StaticTest { static int i = 5; static int j; static void f(int j) { System.out.println("j= " + j); System.out.println("i = " + i); System.out.println("static j = "+StaticTest.j); } static { System.out.println("static block, initializing static class parameter j="+j); j = i * 4; // 初始化类的静态变量j public static void main(String args[]) { f(8); // f()为静态方法,可被静态的main()方法直接调用 System.out.println("j="+j);

3.1.4 static特性 前面的例子给出了类的static方法、static变量以及static 代码块的定义 。 如果main()方法和静态的方法或属性在同一个类里面,那么main()方法就可以直接调用静态方法或属性,而无需通过类名来访问它们,更不需要通过创建对象来调用。 static 成员最常见的例子是main()方法,因为在程序开始执行时必须调用主类的main()方法,JVM在运行main()方法时可以直接调用而不用创建主类实例,所以该方法被声明为static。

3.1.4 static的方法 类的方法可以相互调用,但当一个方法定义为静态方法时,它可以直接访问类的静态变量,调用类的静态方法,但不能直接访问类的非静态的变量及调用类的非静态的方法,只能通过生成类的对象,并通过该对象访问相应的变量或调用相应的方法。 同时静态的方法不能以任何方式引用this 或super。因为静态方法独立于类的任何对象,因此静态方法必须被实现,而不能定义静态抽象的方法(抽象的方法就是没有方法体的方法,后面有讲解)。

3.1.3 方法重载 在Java类中不允许定义两个方法名相同,并且参数列表也完全相同的方法。如果存在这样的方法,将无法通过编译,Java虚拟机无法决定到底执行哪个方法。 对于类的方法(包括从父类中继承的方法),如果有两个方法的名称相同,但参数列表不一致,可以说一个方法是另一个方法的重载。 方法重载的定义:在Java中,同一个类中的两个或两个以上的方法可以有同一个名字,只要参数列表不同,就称为“重载”。 方法重载是Java实现多态性的一种方式。

方法重载的依据1 当一个重载方法被调用时,Java用参数的类型、数量或顺序来表明实际调用的重载方法的版本,因此每个重载方法的参数类型、数量或顺序必须不同。 虽然每个重载方法可以有不同的返回类型,但返回类型并不足以区分所使用的是哪个方法。当Java调用一个重载方法时,参数与调用参数匹配的方法被执行。

方法重载的依据2 以下几种类型的方法都可以构成重载方法: func() {……} //参数个数不同 func(dataType num) {……} //参数类型不同 func(dataType1 num1,dataType2 num2){…… } //参数个数不同 func(dataType2 num1,dataType2 num2,dataType3 num3){//参数个数不同 …… } func(dataType2 num1, dataType1 num2){//参数顺序不同

重载方法必须满足的条件 1 (1) 方法名相同; (2) 方法的参数类型、个数及顺序至少有一项不同。顺序必须是两个或两个以上不同数据类型的参数之间的顺序; func(int a, double b){//参数个数相同 } func(double a, int b){//相对于调用语句来说,参数顺序不同

重载方法必须满足的条件 2 只有参数变量名称不同是错误的重载: func(int a, double b){ //参数个数相同 } func(int b, double a){ //相对于调用语句来说,参数顺序相同

重载方法必须满足的条件3 (4) 方法的修饰符可以不同。 牢记一句话:同名不同参 (3) 方法的返回类型可以不同,但不能用于区分重载的方法。如下语句不能区分重载: int func( int a, double b){} boolean func( int a, double b){} 下面语句是可以的: int func(){} boolean func( int a){} (4) 方法的修饰符可以不同。 牢记一句话:同名不同参

方法重载示例-程序3.1 class OverloadTest{ void add(){ System.out.println("重载方法add()"); } void add(int a){ System.out.println("int a="+a); } void add(int a,int b){ System.out.println("a+b="+(a+b)); } void add(double a){ System.out.println("double a="+a); }

程序3.1 public class Test{ public static void main(String args[]){ OverloadTest ob=new OverloadTest(); ob.add();//调用无参的重载方法 ob.add(10); ob.add(10,20); ob.add(10d);//传递double参数 } }//运行结果如下 重载方法add() int a=10 a+b=30 double a=10.0

方法重载示例-程序3.2 class OverloadTest1{ void add(){ System.out.println("重载方法add()"); } void add(int a,int b){ System.out.println("a+b="+(a+b)); void add(double a){ System.out.println("double a="+a);

程序3.2 class Test1{ public static void main(String args[]){ OverloadTest1 ob=new OverloadTest1(); ob.add();//调用无参的重载方法 ob.add(10);//自动匹配方法add(double ) ob.add(10,20); } }//运行结果如下 重载方法add() double a=10.0 a+b=30

就近原则-自动匹配 在如上语句的OverloadTest1类中没有定 义add(int)方法,因此在测试类Test的 main()方法内带整数参数调用add()时找 不到匹配的方法。但是Java可以自动地 将整数转换为double类型,这种转换就 可以解决这个问题。因此在找不到 add(int)后,Java将int扩大到double类 型,然后调用add(double)。如果定义了 add(int),则首先调用add(int),而不会调 用add(double)。只有在找不到精确匹配 时,Java的自动转换才会起作用。

自动匹配的弊端 思考下面的程序,执行时有问题么? class OverTest{ static void f(int a, double b){ System.out.println(a+b);} static void f(double a, int b){ System.out.println(a*b);} public static void main(String[] args){ f(1,2); } 从方法重载的语法上看,重载的方法没有问题,参数的顺序不同;但是,编译时会报错,因为系统不知道该调用哪个f()方法。原因,就是自动匹配的弊端。

方法重载的目的 方法重载是多态性的基本表现,允许同一个方法名访问不同功能的方法。在不支持方法重载的语言中,每个方法必须有一个惟一的名字,但是经常希望实现数据类型不同而本质上相同的方法。 方法重载允许了同名方法的产生,这样直接的好处就是大大减少了程序员对库函数即系统类里方法的记忆负担。比如,我们只需要记住Math.abs(),就可以求int、float、double等各类型数据的绝对值。 目的:使用方便,提高可读性

小结 本节讲了方法重载的定义、示例及注意事项,希望大家在解题实践中能熟练使用方法重载。

习题 1 编写程序,使用方法重载求三角形的面积。

谢谢!!再见!!