面向对象编程(基础)5:类的成员之二:方法(method)
目录
5.1 方法的引入
5.2 方法(method、函数)的理解
举例1:
举例2:
5.3 如何声明方法
1、声明方法的语法格式
(1)一个完整的方法 = 方法头 + 方法体。
(2)方法头可能包含5个部分
(3)方法体:方法体必须有{}括起来,在{}中编写完成方法功能的代码
(4)关于方法体中return语句的说明:
补充:方法的分类:按照是否有形参及返回值
2、类比举例
3、代码示例:
5.4 如何调用实例方法
1、方法调用语法格式
2、示例
举例1:调用方法的上面写的代码示例
举例2:
5.5 使用的注意点
(1)必须先声明后使用,且方法必须定义在类的内部
(2)调用一次就执行一次,不调用不执行。
(3)方法中可以调用类中的方法或属性,不可以在方法内部定义方法。
正确示例:
错误示例:
5.6 关键字return的使用
return在方法中的作用:
作用1:结束一个方法
作用2:结束一个方法的同时,可以返回数据给方法的调用者
注意点:在return关键字的直接后面不能声明执行语句
5.7 方法调用内存分析
举例分析:
内存分析:
5.8 练习
**练习1:**创建一个Person类,其定义如下:
要求:
**练习2:
练习3:
**练习4:
**练习5(课下练习):
参考代码:
5.1 方法的引入
《街霸》游戏中,每次人物出拳、出脚或跳跃等动作都需要编写50-80行的代码,在每次出拳、出脚或跳跃的地方都需要重复地编写这50-80行代码,这样程序会变得很臃肿
,可读性也非常差。为了解决代码重复编写的问题,可以将出拳、出脚或跳跃的代码提取出来放在一个{}中,并为这段代码起个名字,这样在每次的出拳、出脚或跳跃的地方通过这个名字来调用这个{}的代码就可以了。
5.2 方法(method、函数)的理解
方法
是类或对象行为特征的抽象,用来完成某个功能操作。在某些语言中也称为函数
或过程
。将功能封装为方法的目的是,可以
实现代码重用,减少冗余,简化代码
Java里的方法
不能独立存在
,所有的方法必须定义在类里。举例1:
- Math.random()的random()方法
- Math.sqrt(x)的sqrt(x)方法
- System.out.println(x)的println(x)方法
- new Scanner(System.in).nextInt()的nextInt()方法
- Arrays类中的binarySearch()方法、sort()方法、equals()方法
举例2:
public class Person{private int age;public int getAge() { //声明方法getAge()return age; }public void setAge(int i) { //声明方法setAgeage = i; //将参数i的值赋给类的成员变量age}
}
5.3 如何声明方法
1、声明方法的语法格式
[修饰符] 返回值类型 方法名([形参列表])[throws 异常列表]{方法体的功能代码
}
(1)一个完整的方法 = 方法头 + 方法体。
- 方法头就是
[修饰符] 返回值类型 方法名([形参列表])[throws 异常列表]
,也称为方法签名
。通常调用方法时只需要关注方法头就可以,从方法头可以看出这个方法的功能和调用格式。 - 方法体就是方法被调用后要执行的代码。对于调用者来说,不了解方法体如何实现的,并不影响方法的使用。
(2)方法头可能包含5个部分
修饰符:可选的。方法的修饰符也有很多,例如:public、protected、private、static、abstract、native、final、synchronized等,后面会一一学习。
- 其中,权限修饰符有public、protected、private。在讲封装性之前,我们先默认使用pulbic修饰方法。
- 其中,根据是否有static,可以将方法分为静态方法和非静态方法。其中静态方法又称为类方法,非静态方法又称为实例方法。咱们在讲static前先学习实例方法。
返回值类型: 表示方法运行的结果的数据类型,方法执行后将结果返回到调用者。
- 无返回值,则声明:void
- 有返回值,则声明出返回值类型(可以是任意类型)。与方法体中“
return 返回值
”搭配使用
方法名:属于标识符,命名时遵循标识符命名规则和规范,“见名知意”
形参列表:表示完成方法体功能时需要外部提供的数据列表。可以包含零个,一个或多个参数。
- 无论是否有参数,()不能省略
- 如果有参数,每一个参数都要指定数据类型和参数名,多个参数之间使用逗号分隔,例如:
- 一个参数: (数据类型 参数名)
- 二个参数: (数据类型1 参数1, 数据类型2 参数2)
- 参数的类型可以是基本数据类型、引用数据类型
throws 异常列表:可选,在【第09章-异常处理】章节再讲
(3)方法体:方法体必须有{}括起来,在{}中编写完成方法功能的代码
(4)关于方法体中return语句的说明:
return语句的作用是结束方法的执行,并将方法的结果返回去
如果返回值类型不是void,方法体中必须保证一定有 return 返回值; 语句,并且要求该返回值结果的类型与声明的返回值类型一致或兼容。
如果返回值类型为void时,方法体中可以没有return语句,如果要用return语句提前结束方法的执行,那么return后面不能跟返回值,直接写return ; 就可以。
return语句后面就不能再写其他代码了,否则会报错:Unreachable code
补充:方法的分类:按照是否有形参及返回值
2、类比举例
3、代码示例:
package com.atguigu.test04.method;/*** 方法定义案例演示*/
public class MethodDefineDemo {/*** 无参无返回值方法的演示*/public void sayHello(){System.out.println("hello");}/*** 有参无返回值方法的演示* @param length int 第一个参数,表示矩形的长* @param width int 第二个参数,表示矩形的宽* @param sign char 第三个参数,表示填充矩形图形的符号*/public void printRectangle(int length, int width, char sign){for (int i = 1; i <= length ; i++) {for(int j=1; j <= width; j++){System.out.print(sign);}System.out.println();}}/*** 无参有返回值方法的演示* @return*/public int getIntBetweenOneToHundred(){return (int)(Math.random()*100+1);}/*** 有参有返回值方法的演示* @param a int 第一个参数,要比较大小的整数之一* @param b int 第二个参数,要比较大小的整数之二* @return int 比较大小的两个整数中较大者的值*/public int max(int a, int b){return a > b ? a : b;}
}
5.4 如何调用实例方法
方法通过方法名被调用,且只有被调用才会执行。
1、方法调用语法格式
对象.方法名([实参列表])
2、示例
举例1:调用方法的上面写的代码示例
package com.atguigu.test04.method;/*** 方法调用案例演示*/
public class MethodInvokeDemo {public static void main(String[] args) {//创建对象MethodDefineDemo md = new MethodDefineDemo();System.out.println("-----------------------方法调用演示-------------------------");//调用MethodDefineDemo类中无参无返回值的方法sayHellomd.sayHello();md.sayHello();md.sayHello();//调用一次,执行一次,不调用不执行System.out.println("------------------------------------------------");//调用MethodDefineDemo类中有参无返回值的方法printRectanglemd.printRectangle(5,10,'@');System.out.println("------------------------------------------------");//调用MethodDefineDemo类中无参有返回值的方法getIntBetweenOneToHundredmd.getIntBetweenOneToHundred();//语法没问题,就是结果丢失int num = md.getIntBetweenOneToHundred();System.out.println("num = " + num);System.out.println(md.getIntBetweenOneToHundred());//上面的代码调用了getIntBetweenOneToHundred三次,这个方法执行了三次System.out.println("------------------------------------------------");//调用MethodDefineDemo类中有参有返回值的方法maxmd.max(3,6);//语法没问题,就是结果丢失int bigger = md.max(5,6);System.out.println("bigger = " + bigger);System.out.println("8,3中较大者是:" + md.max(8,9));}
}
举例2:
//1、创建Scanner的对象
Scanner input = new Scanner(System.in);//System.in默认代表键盘输入//2、提示输入xx
System.out.print("请输入一个整数:"); //对象.非静态方法(实参列表)//3、接收输入内容
int num = input.nextInt(); //对象.非静态方法()
5.5 使用的注意点
(1)必须先声明后使用,且方法必须定义在类的内部
(2)调用一次就执行一次,不调用不执行。
(3)方法中可以调用类中的方法或属性,不可以在方法内部定义方法。
正确示例:
类{方法1(){}方法2(){}
}
错误示例:
类{方法1(){方法2(){ //位置错误}}
}
5.6 关键字return的使用
return在方法中的作用:
作用1:结束一个方法
作用2:结束一个方法的同时,可以返回数据给方法的调用者
注意点:在return关键字的直接后面不能声明执行语句
5.7 方法调用内存分析
方法
没有被调用
的时候,都在方法区
中的字节码文件(.class)中存储。方法
被调用
的时候,需要进入到栈内存
中运行。方法每调用一次就会在栈中有一个入栈
动作,即给当前方法开辟一块独立的内存区域,用于存储当前方法的局部变量的值。当方法执行结束后,会释放该内存,称为
出栈
,如果方法有返回值,就会把结果返回调用处,如果没有返回值,就直接结束,回到调用处继续执行下一条指令。栈结构:先进后出,后进先出。
举例分析:
/*** @author 尚硅谷-宋红康* @create 9:21*/
public class Person {public static void main(String[] args) {Person p1 = new Person();p1.eat();}public static void eat() {sleep();System.out.println("人:吃饭");}public static void sleep(){System.out.println("人:睡觉");doSport();}public static void doSport(){System.out.println("人:运动");}
}
内存分析:
5.8 练习
**练习1:**创建一个Person类,其定义如下:
要求:
(1)创建Person类的对象,设置该对象的name、age和sex属性,调用study方法,输出字符串“studying”,调用showAge()方法显示age值,调用addAge()方法给对象的age属性值增加2岁。
(2)创建第二个对象,执行上述操作,体会同一个类的不同对象之间的关系。
**练习2:
**利用面向对象的编程方法,设计圆类Circle,包含属性(半径)和计算圆面积的方法。定义测试类,创建该Circle类的对象,并进行测试。
练习3:
3.1 编写程序,声明一个method方法,在方法中打印一个10*8的*型矩形
,在main方法中调用该方法。
3.2 修改上一个程序,在method方法中,除打印一个10*8的*型矩形
外,再计算该矩形的面积,并将其作为方法返回值。在main方法中调用该方法,接收返回的面积值并打印。
3.3 修改上一个程序,在method方法提供m和n两个参数,方法中打印一个m*n的*型矩形
,并计算该矩形的面积, 将其作为方法返回值。在main方法中调用该方法,接收返回的面积值并打印。
**练习4:
**声明一个日期类型MyDate:有属性:年year,月month,日day。创建2个日期对象,分别赋值为:你的出生日期,你对象的出生日期,并显示信息。
**练习5(课下练习):
**用面向对象的方式编写用户登录程序。
用户类:
- 属性:用户名,密码
- 方法:登录
界面类:
- 在界面类中添加main方法,接受用户输入,并调用用户类的登录方法进行验证。
- 输出:
- 登录失败:用户名或密码错误!
- 登录成功:欢迎你,用户名!
- 输出:
参考代码:
public class User {String name;String password;//密码/*** 实现用户登录的判断** @param inputName 输入的用户名* @param inputPwd 输入的密码*/public void login(String inputName,String inputPwd){if(name.equals(inputName) && password.equals(inputPwd)){System.out.println("登录成功:欢迎你," + name);}else{System.out.println("登录失败:用户名或密码错误!");}}/*** 实现用户登录的判断* @param inputName 输入的用户名* @param inputPwd 输入的密码* @return true:登录成功 false:登录失败*/public boolean login1(String inputName,String inputPwd){
// if(name.equals(inputName) && password.equals(inputPwd)){
// return true;
// }else{
// return false;
// }//简化为:return name.equals(inputName) && password.equals(inputPwd);}}
/**** 用户界面类UserInterface:** - 在用户界面类中添加main方法,接受用户输入,并调用用户类的登录方法进行验证。* - 输出:* - 登录失败:用户名或密码错误!* - 登录成功:欢迎你,用户名!** @author 尚硅谷-宋红康* @create 9:58*/
public class UserInterface {public static void main(String[] args) {User u1 = new User();u1.name = "Tom";u1.password = "abc123";Scanner scanner = new Scanner(System.in);System.out.print("请输入用户名:");String name = scanner.next();System.out.print("请输入密码:");String pwd = scanner.next();//演示1:
// u1.login(name,pwd);//演示2:boolean isLogin = u1.login1(name, pwd);if(isLogin){System.out.println("登录成功:欢迎你," + u1.name);}else{System.out.println("登录失败:用户名或密码错误!");}scanner.close();}
}
面向对象编程(基础)5:类的成员之二:方法(method)相关推荐
- JAVA基础-U7 面向对象编程(基础部分)-类与对象
类与对象(OOP) 快速入门 类是抽象的,概念的,代表一类事物.即它是数据类型 对象是具体的,实际的,代表一个具体事物.即它是实例 类是对象的模版,对象是类的一个个体,对应一个实例 养猫问题: 张老太 ...
- Java面向对象编程(基础部分)
面向对象编程(基础部分) 类与对象 01: public class ObjectWorkDemo {public static void main(String[] args){Cat cat1 = ...
- [.net 面向对象编程基础] (18) 泛型
[.net 面向对象编程基础] (18) 泛型 上一节我们说到了两种数据类型数组和集合,数组是指包含同一类型的多个元素,集合是指.net中提供数据存储和检索的专用类. 数组使用前需要先指定大小,并且检 ...
- [.net 面向对象编程基础] (13) 面向对象三大特性——多态
[.net 面向对象编程基础] (13) 面向对象三大特性--多态 前面两节,我们了解了面向对象的的封装和继承特性,面向对象还有一大特性就是多态.比起前面的封装和继承,多态这个概念不是那么好理解.我们 ...
- java 168转换成861_java实验-java语言面向对象编程基础
java实验-java语言面向对象编程基础 (12页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 8.90 积分 广州大学学生实验报告广州大学学生实验报告 ...
- java面向对象程序_面向对象编程基础(java)
面向对象编程基础 1.1 面向对象概述 在程序开发初期,大家使用的是结构化开发语言,也就是面向过程(opp),但随着市场需求剧增,软件的规模也越来越大,结构化语言的弊端也暴露出来. 开发周期无休止的拖 ...
- [.net 面向对象编程基础] (22) 事件
[.net 面向对象编程基础] (22) 事件 事件(Event)是学习.net面向对象编程很重要的一部分,在学习事件之前,我们实际上已经在很多地方使用了事件,比如控件的click事件等,这些都是. ...
- java面向对象编程基础
java面向对象编程基础 前言:什么是java 是咖啡飘香的清晨 - 是斯坦福校园意浓情深 - 是James的思想睿智 是剁手党双十一挥舞的利刃 是大数据云计算驰骋的平台 - 是ATM上吐出的钞票 - ...
- 【面向对象编程】(4) 类的继承,重构父类中的方法
各位同学好,今天和大家分享一下面向对象编程中,类的三大特征之继承.主要介绍:子类继承父类的基本方法:重写父类的类方法:重构父类的初始化方法:super() 方法.本节主要是单继承,多继承在下一节中介绍 ...
- [Java入门笔记] 面向对象编程基础(二):方法详解
2019独角兽企业重金招聘Python工程师标准>>> 什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能 ...
最新文章
- \r \r\n \t的区别
- 用Kotlin写Android Gradle脚本
- ThinkPHP的field方法的用法总结
- 《C语言及程序设计》程序阅读——文件操作
- 廖的python教程_学廖老师的python教程想到的
- 转发- css(display,float,position)
- android 控件描边取消重叠
- mysql 语句检查_mysql查询语句
- R语言学习笔记(三)多元数据的数据特征、相关分析与图形表示
- 程序员斗图时最爱用哪些表情包?拿走不谢!
- 二维绕任意点旋转_解析几何|对称,平移和旋转
- Python爬虫(一)抓取指定的页面
- LAMP环境搭建教程(转载)——实际安装,可用
- linux的串口驱动分析
- Tomcat安装及idea配置教程
- elementui生产环境图标加载时偶而乱码
- 使用M0 DesignStart 的样例SoC(example system) - 1 SoC组件
- FBI 网站被黑,黑客获取 100 万条联邦特工身份信息
- 小米笔记本android,7代小米笔记本安装凤凰系统(Phoenix OS)显示命令行ANDROID字样
- c++ 复合类型 读书笔记(二)
热门文章
- QtVtk-007-Cone2
- 微信小程序+nginx+php+mysql实现数据库管理【第四期】
- 用matlab解数学问题,用matlab解决一道数学问题
- AI实现艺术品自动生成?太牛了
- 卷毛机器人符文_风暴之怒迦娜:卷毛S5风女天赋符文教学
- Python实例大全(基于Python3.7.4)
- wps交叉表_WPS表格中如何锁定单个单元格?,这几步你要了解
- VM平台添加设备时提示“无效的License组件”的解决方法
- Python输出格式化 格式化字符串语法 format f-string 格式化操作符% 数据类型转换 对齐方式 转换标志字符
- 滴滴有程序员要被祭天了,你们还好吗?滴滴到家付款后显示​...