Java学习day05
函数/方法
什么是方法:方法的本质就是行为(3w1h,who,where,why,how)
位置:在类的内部与main函数并列。
哪里使用方法:方法必声明在类(文件)中,方法可以在方法中调用,静态代码块中。
怎么使用:1. 声明一个方法 2. 调用一个方法
为什么使用方法:避免代码冗余,提高代码的可维护性可扩展性。
语法: public static void 方法名() { // 方法体(函数代码块) } // 方法名需要具有描述性,符合驼峰命名规范
函数的调用:函数名();只要在代码中出现,一定执行。
方法的返回值:
什么是返回值:返回值本质就是函数/方法的执行结果(行为的目的)
为什么使用返回值:因为任何函数/方法都有执行结果,根据执行结果来处理后续的业务代码(因为任何行为都有其目的性,如果行为的目的既是这个行为本身那么这个行为就是该行为)
在哪里使用返回值:在调用函数时,如果这个函数没有返回值,这个函数的返回值和函数就一起被使用了,如果有返回值需要这其进行消化(使用的两种方式:1.使用赋值运算符来进行使用,2通过实参方式对其返回值进行使用,必须使用返回值。)
怎么使用返回值:使用的两种方式:1.使用赋值运算符来进行使用,2通过实参方式对其返回值进行使用,必须使用返回值。
例:
public class TestA {
public static void main(String[] args) {
if (1 == name()) {
for (int i = 1; i <= name(); i++) {
System.out.println(name());
}
}
}
public static int name() {
System.out.println("谢谢");
return 1;
}
}// 注意,函数调用则使用,for循环比较调用函数方法两次。故最后还打印一次。(实参方式使用)
参数
定义:调用方法时,所传入的数据称为参数,参数的作用就是丰富函数的内容,使其函数变得更加灵活(就是行为具象化的必要手段)
为什么使用函数:因为函数本身时宏观的概念,如果要将其微观化就必须使用到参数
在哪里使用参数:参数只能够在函数中使用,使用可分为形参和实参使用。
怎么使用参数:根据目前的业务情况传入对应的数据类型或者对应的值来完成带参函数的执行。
形式参数:只能够用于函数的声明/创建中。
书写格式:数据类型 + 参数名(小写,驼峰)多个参数要使用逗号来隔开,可以定义N个形参。
实参只能出现在方法/函数的调用上面。
实参格式:数值/地址,多个实参用逗号隔开,而且实参的数据类型和顺序必须与形参一致。
return
指的就是结束当前函数并返回对应数据(为行为实现目的)
Return在带有返回值的
多级调用
优先执行方法代码
递归:自己调用自己,实际项目不推荐使用,风险较高,如果产生无穷递归会导致整个程序崩溃!
例子:
// 斐波那契数列
public static int One(int n) {
if (n == 1 || n == 2) { // 递归出口
return 1;
} else if (n == 0) {
return 0;
}
return One(n - 1) + One(n - 2);
}
// 阶乘数列
public static int JieChen(int n) {
if (n == 1) { // 出口
return 1;
}
return n * JieChen(n - 1);
}
案例:控制台简易对打小游戏
开始游戏函数
import java.util.Random;
import xiaoyouxi.wangzhe.Ake;
import xiaoyouxi.wangzhe.YaSe;
public class GameStart {
public static void main(String[] args) {
Ake ake = new Ake();
ake.setName("阿轲");
ake.setBloodNumber(1000);
ake.setAttckNumber(200);
YaSe yaSe = new YaSe();
yaSe.setName("亚瑟");
yaSe.setBloodNumber(2000);
yaSe.setAttckNumber(100);
while (true) {
int choos = new Random().nextInt(2);
if (choos == 0) {
yaSe.attck(ake);
if (ake.getBloodNumber() <= 0) {
yaSe.successMsg();
return;
}
} else if (choos == 1) {
ake.attck(yaSe);
if (yaSe.getBloodNumber() <= 0) {
ake.susuccessMsg();
return;
}
}
try { // 异常处理
Thread.sleep(1000); // 攻击间隔一秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
定义Ake的函数
public class Ake {
int bloodNumber;
String name;
int attckNumber;
public void attck(YaSe yaSe) {// ake攻击了yase
// 受到的伤害
yaSe.setBloodNumber(yaSe.getBloodNumber() - this.getAttckNumber());
// 攻击
System.out.println(this.getName() + "攻击了" + yaSe.getName() + "并对其造成了"
+ this.getAttckNumber() + "点伤害," + "还剩血量"
+ yaSe.getBloodNumber());
}
public void susuccessMsg() { // 胜利宣言
System.out.println("我自天上来,尔等受死");
}
public int getBloodNumber() {
return bloodNumber;
}
public void setBloodNumber(int bloodNumber) {
this.bloodNumber = bloodNumber;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAttckNumber() {
return attckNumber;
}
public void setAttckNumber(int attckNumber) {
this.attckNumber = attckNumber;
}
}
定义yase的函数:
public class YaSe {
int bloodNumber;
String name;
int attckNumber;
public void attck(Ake ake) {// yase攻击ake
// 受到的伤害
ake.setBloodNumber(ake.getBloodNumber() - this.getAttckNumber());
// 攻击
System.out.println(this.getName() + "攻击了" + ake.getName() + "并对其造成了"
+ this.getAttckNumber() + "点伤害," + "还剩血量"
+ ake.getBloodNumber());
}
public void successMsg() { // 胜利的宣言
System.out.println("无可匹敌的存在");
}
public int getBloodNumber() {
return bloodNumber;
}
public void setBloodNumber(int bloodNumber) {
this.bloodNumber = bloodNumber;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAttckNumber() {
return attckNumber;
}
public void setAttckNumber(int attckNumber) {
this.attckNumber = attckNumber;
}
}