当前课程知识点:Java程序设计 > 第二章 类与对象 > 2.2-3-方法成员 > 2.2-3-方法成员
大家好
欢迎回来继续学习
java语言程序设计
这一节呢
我们来学习方法成员
在类里面定义的这些方法
他也分两类
分成类的方法和实例的方法
那么实例的方法呢
是用来表示每一个实例对象
他的功能或者行为的
而类的方法呢
是用来表示这个类的一些公共的
共同的行为或者功能的
现在我们来看这个方法成员
定义的语法形式
其实呢在类里面
定义一个方法
跟我们以前学习面向过程的
C程序设计的时候
定一个函数
是非常相象的
只不过呢
这个方法他不是独立的
不是全局的
他是必须出现在类题里面的
同样我们在这也看到
前面有很多可选项
就是方括号里面的可选项
大多数呢
在后续章节中
我们都会学到
现在呢我们就关注一下
它必须有的内容
必须有返回类型
是不是很像我们以前在C语言中
学过的函数的返回值类型
对 还有呢
方法名很类似于
我们在C语言中
学到的函数名
那么在方法名后面
一个圆括号里面有参数列表
那么这个参数列表
它在方括号里可选
也就是说你可以是空的
没有参数表
也可以是有若干个参数
这是跟我们以前C语言中
学到的函数的形参表
它是类似的
那这一对大括号里面
就是方法体
跟我们以前在C语言中
学的函数体是类似的
他们的语法都是很想象的
那另外其他这些关键字
表示什么呢
简单的介绍一下
public protected private
也是控制访问权限的
控制这个方法的访问权限
static 用来指明
这是一个类的方法
或者叫静态方法
final说明这是一个终结方法
abstract 说明这是一个抽象方法
抽象方法就是只有方法原形
没有方法体体现的
这个在后面的章节
我们都会讲的
native 呢是用来继承java代码
和其他语言代码的
这个呢在我们这门课里面
是不涉及到的
另外这个synchronied
是用来控制多个并发线程
对共享数据的访问的
关于多线程呢
我们会在java语言程序设计
(进级)那门后续课程中介绍
在java语言程序设计基础
这门课中呢
不涉及到多线程的内容
返回类型刚才说了
方法的返回值类型
还有参数类型
实际上就是说那个形参表里面的
那些参数的类型
可以是简单数据类型
也可以是引用类型
还可以数组 类或者接口这些
也可以有多个参数
也可以没有参数
那么方法体呢
就是方法的具体实现
里面可以包括局部变量的声明
以及所有合法的java语句
那么方法体中的局部变量
他的作用域呢
只限制在这个方法体内部
这有一个throws exceptionlist
这个呢是列出这个方法
有可能抛出的异常
那么是异常抛出列表
后面呢我们也会给大家介绍
后面章节会借上异常处理
大家就明白这个了
好 现在我们首先来看
实例方法
实例方法呢
它是属于每个对象的
用来表示每个对象的
他的功能或者是行为
定义实例方法的时候呢
不要用static关键字
那么方法定义好了
我们在什么时候
会调用这些方法呢
当我们需要给对象发消息
需要使用
在类里面
为每个对象定义好的那些功能
和行为的时候呢
我们就去调用方法
因为我们说了
方法就是代表着
对象的行为或者功能
接下来我们来看
方法调用的语法
我们调用实例方法的时候呢
一定要通过对象名来调用
从我们讲的是从内外来调用
如果你在(类体)里面
方法之间互相调用
那就不用前面挂一个对象名了
在一个类体的内部
方法与方法之间
是可以直接互相调用的
直接用方法名就行了
那么在内外
当你要使用这个实例对象
跟对象发消息
这个时候呢
你就用对象名
点方法名的方法去调用
然后括号里给出实参列表
跟我们在C语言中
调用函数很像
这个时候
我们说这个对象
就是消息的接受者
这个方法名
实际上就是我们发给对方的消息
而那个实参列表呢
就列出了需要这个对象
完成这项功能
必须要给他的一些必须数据
那么这个参数传递呢
也是分为直传递
和引用传递
直传递就是说
当参数为基本类型的时候
那用实参初始化形参
实际上就是一次性的单向传递
实参的值就给到形参了
然后实参和形参之间
就没有联系了
引用传递呢
是这样发生在我们传对象
作为参数的时候
如果参数类型是对象
那么实际上我们传的
就是对象的引用
这个时候就叫做引用传递
那引用又是什么
引用实际上就是个别名
那这个时候相当于
实参对象的引用
传给了形参
那就实参名 形参名
两个不同的名字
或者叫两个不同的引用
最后指向了同一个对象
这叫做引用传递
那么调用实例方法的时候呢
参数有两种传递方式
实际上接下来
我们稍候讲
调用类的方法的时候
传参数也是这样两种传递形式
也就是说我们调用方法的时候
参数传递分成直传递和引用传递
现在呢我们来看
在这个圆类中呢
我们要增加方法了
圆嘛 每个圆
应该有自己的一些计算功能
不能我们定一个圆对象
他就存一个半径
什么都不会干对吧
我们看这增加了一个
求圆周长的方法
增加了enlarge
把圆扩大若干倍的方法
这个方法呢
他就有了一个参数了
这个参数呢
就是这个倍数
我们要把圆扩大多少倍
由这个参数来确定
这个fitsinside的方法呢
我们来看它的参数
是另外一个类的对象
是一个矩形类的对象
这个方法要算一算
我们能不能把这个圆
装在这个矩形里面
返回一个布尔值
这就是具有实例方法的圆类
然后我们来测试一下这个类
构造圆对象
把它的引用放在C1里面
让它的半径负值为8
在构造圆对象
把它引用放在C2里面
它的半径负值为15
然后呢我们构造了一个
rectangle 对象
它的引用放在R里面
给R的宽和高附了值
然后我们来看看
这个C1这个圆
能不能放在R这个矩形里面
要用C1点fitsinside
用R作为参数
同样也看看C2
能不能放在R这个矩形里面
这就是我们定义了一个
有方法的这个类
然后呢在类外呢
我们构造这类对象
通过对象去调用方法
进行一下测试
我们看到运行结果
一个能放进去
一个不能放进去
好 现在我们知道了
怎么样定义和调用实例方法
那接下来呢
我们将学习类的方法
也就是静态方法
那么类方法呢
是用来表示这个类里面
所有对象的共同行为的
或者说一些公共的
为大家所共享的功能的
在我们定义类方法的时候呢
要用这个static
关键字来修饰
所以经常我们也把它
叫做静态方法
那么这样的类方法
是不能被声明为抽象方法的
什么是抽象方法呢
大家不要着急
后面会详细给大家介绍的
现在呢先统一把语法规定
放在这
那么类方法呢
我们就可以通过类名
直接调用
也就是说你不比定义
这个类的实例
也可以使用类的方法
用类名调用就可以了
当然如果我们这个类
已经有了一些实例对象
我们通过这个类的实例对象
去调用类方法行不行呢
也是可以的
现在我们通过例子来看一下
这个类方法或者静态方法
它的用途
比如说我们需要写个程序
将这个摄氏温度呢
转换成华氏温度
这里给出了转换公式
实际上呢
除了摄氏温度值
以及公式中
需要的常量值
干这件事
其实不需要构造什么对象
不需要通过实例来做这件事情
那么如果学过C语言的同学
就觉得这么简单的事情
我在C语言里面
我写个函数就完成了嘛
难道非要我去为这个事儿
去构造一个对象吗
其实呢在java程序中
也会出现这样大量的问题
就是说其实我们
只需要一个功能
但是我们并不需要什么对象
这个时候呢
我们就可以在类里面
定义一个静态的方法
比如说我们定义一个
converter类 转换类
在类里面有一个摄氏温度
转成华氏温度的方法
你给他一个摄氏度作为参数
它return一个华氏温度
就可以了
调用这个方法的时候呢
我们直接类名点方法名
就可以了
不需要去构造对象
那么呢我们再想想
如果你还有很多
其他的转换功能需要实现
我们都可以把它写成
这个converter类里面的
静态方法
他可以把所有的转换
集成在这里面
这样用起来
也是很好用的
我们在方法的参数表中呢
还可以列出可变长的参数
也就是说参数个数不确定
那么这个怎么定义呢
我们来看一下语法
可变长参数呢
我们可以使用省略号来表示
其实实质上
它就是数组
比如说我们定义一个
string类型的可变长的参数那么实际上呢
就是定义了一个
string类型的数组
那么这个时候呢
我们传递给他的实参
里面的参数个数呢
就可以是零个对象
到多个对象
现在呢
我们通过这个简单的例子
来看一下
这个可变长参数的语法
是怎么用的
这个maxarea这个方法呢
方法体
我们并没有完整的去实现它
只是给了一个示意
那我们主要去看
它这个参数表
这个参数表里面呢
有一个圆参数
圆对象的引用做参数
应该还有若干个
矩形对象的引用做参数
那么到底有多少个
矩形对象的引用呢
可变长点点点表示
个数不确定
那么既然个数都不确定
那我在程序中怎么处理它呢
我们知道这个点点点
表示的就是说
我这个verrec 实际上
就是一个矩形对象的引用数组
但是呢
数组有多少个元素不确定
要在调用的时候
看这个实参给他几个元素
比如这次调用的时候
给了两个矩形对象的引用
那么也调用的时候
可能给一个矩形对象的引用
也可能只给一个圆的引用
就没有给矩形对象的引用
那么这种情况下
我们程序里面
怎么去处理它呢
比如说我要把所有的图形
都处理一遍
去求它的最大面积
那么我怎么样
去遍历这个数组呢
我都不知道有多少个元素
这个时候就用到了
这样的for循环了
增强型的for循环
或者叫基于范围的for循环
我在这定一个rectangle的引用
冒号后面就是这个数组名
rec
它的作用就是在循环的每一次
都从这个数组中
依次取出一个元素来
用来附给这个R
然后通过R
你就可以访问这个元素
用这样的办法
不管数组有多少个元素
这个for循环
都能恰恰好的遍历完这些元素
这也是我们使用这个
可变长参数的时候呢
经常用的手段
好 这一节呢
我们学习了类的方法
在下一节呢
我们要学习包这种机制
看我们怎么样用包
来将相关的类组织在一起
-1.0-导学
--1.0-导学
-1.1-Java与面向对象程序设计简介
--第一章 Java语言基础知识--1.1-Java与面向对象程序设计简介
-1.2-基本数据类型与表达式
-第一章 Java语言基础知识--1.2-基本数据类型与表达式
-1.3-数组
--1.3.1-数组
-第一章 Java语言基础知识--1.3-数组
-1.4-算法的流程控制
--第一章 Java语言基础知识--1.4-算法的流程控制
-1.5-第一章小结
-第一章编程练习题
-课件
--外部链接
-Java环境配置、Eclipse使用、Helloworld程序详解
--使用eclipse建立Java项目、编写和运行Java程序
-Java数据类型
--Java整数类型
--Java浮点类型
--数据类型实战
--数据类型转换
--Java强制类型转换精度损失示例与表达式中的数据类型转换
-Java数组
-Java变量
--Java的变量
-命令行参数
--命令行参数的介绍
-2.0-导学
--2.0-导学
-2.1-面向对象方法的特性
--第二章 类与对象--2.1-面向对象方法的特性
-2.2-1-类声明与对象创建
--第二章 类与对象--2.2-1-类声明与对象创建
-2.2-2-数据成员
--第二章 类与对象--2.2-2-数据成员
-2.2-3-方法成员
--第二章 类与对象--2.2-3-方法成员
-2.2-4-包
--2.2-4-包
--第二章 类与对象--2.2-4-包
-2.2-5-类的访问权限控制
--第二章 类与对象--2.2-5-类的访问权限控制
-2.3-1-对象初始化
--第二章 类与对象--2.3-1-对象初始化
-2.3-2-内存回收
--第二章 类与对象--2.3-2-内存回收
-2.4-枚举类
--2.4-枚举类
--第二章 类与对象--2.4-枚举类
-2.5-应用举例
--2.5-应用举例
-2.6-第2章小结
-第二章编程练习题
-课件
--第二章课件
-3.0-导学
--3.0-导学
-3.1.1-3.1.2-类继承的概念和语法
--第三章 类的重用--3.1.1-3.1.2-类继承的概念和语法
-3.1.3-隐藏和覆盖
--第三章 类的重用--3.1.3-隐藏和覆盖
-3.2-Object 类
--第三章 类的重用--3.2-Object 类
-3.3-终结类与终结方法
--第三章 类的重用--3.3-终结类与终结方法
-3.4-抽象类
--3.4-抽象类
--第三章 类的重用--3.4-抽象类
-3.5-泛型
--3.5-泛型
--第三章 类的重用--3.5-泛型
-3.6-类的组合
--3.6-类的组合
-3.7-小结
--3.7-小结
-第三章编程练习题
-课件
--课件
-4.0-导学
--导学
-4.1-接口
--接口
--第四章 接口与多态--4.1-接口
-4.2.1-4.2.2-类型转换
--类型转换
--第四章 接口与多态--4.2.1-4.2.2-类型转换
-4.2.3-方法的查找
--方法的查找
--第四章 接口与多态--4.2.3-方法的查找
-4.3-多态的概念
--多态的概念
--第四章 接口与多态--4.3-多态的概念
-4.4-多态的应用举例
--多态的应用举例
--第四章 接口与多态--4.4-多态的应用举例
-4.5-构造方法与多态性
--构造方法和多态性
--第四章 接口与多态--4.5-构造方法与多态性
-4.6-本章小结
--本章小结
-第四章编程作业
-课件
--课件
-5.0-导学
--5.0-导学
-5.1.1-5.1.2-异常处理的概念
--第五章 输入输出--5.1.1-5.1.2-异常处理的概念
-5.1.3-5.1.5-异常的处理
--第五章 输入输出--5.1.3-5.1.5-异常的处理
-5.2-输入输出流的概念
--输入输出流的概念
--第五章 输入输出--5.2-输入输出流的概念
-5.3.1-写文本文件
--写文本文件
--第五章 输入输出--5.3.1-写文本文件
-5.3.2-读文本文件
--读文本文件
--第五章 输入输出--5.3.2-读文本文件
-5.3.3-写二进制文件
--写二进制文件
--第五章 输入输出--5.3.3-写二进制文件
-5.3.4-读二进制文件
--读二进制文件
-5.3.5-File类
--File类
-5.3.6-处理压缩文件
--处理压缩文件
-5.3.7-对象序列化
--对象序列化
-5.3.8-随机文件读写
--随机文件读写
-5.4-本章小结
--本章小结
-课件
--课件
-6.0-导学
--导学
-6.1-Java集合框架介绍
--第六章 对象群体的组织--6.1-Java集合框架介绍
-6.2-主要接口及常用的实现类
--第六章 对象群体的组织--6.2-主要接口及常用的实现类
-6.3-常用算法
--常用算法
-6.4-数组实用方法
-6.5-基于动态数组的类型(Vector, ArrayList)
--基于动态数组的类型(Vector, ArrayList)
-6.6-遍历Collection
-6.7-Map接口及其实现
-6.8-第6章小结
--第6章小结
-课件
--课件
-7.0-导学
--导学
-7.1-绘图
--绘图
-7.2-Swing基础
--Swing基础
-7.3-Swing的层次
--Swing的层次
-7.4-布局管理
--布局管理
-7.5-内部类
--内部类
-7.6-事件处理的基本概念
-7.7-事件派发机制
--事件派发机制
-7.8-顶层容器
--7.8-顶层容器
-7.9-中间层容器(一)
-7.10-中间层容器(二)
-7.11-原子组件(一)
-7.12-原子组件(二)
-7.13-原子组件(三)
-7.14-其它Swing特性
-7.15-第7章小结
-课件
--课件