Java学习day06
方法
1.方法的概念
方法的概念:一些列代码指令的集合,用于实现特定的功能,可以被反复调用
3.方法的定义
public static void 方法名称(){
//方法体
}
3.方法的调用
在需要调用方法的位置,直接书写方法名即可
方法书写完毕后,必须调用才会执行,我们可以通过debug模式观察方法调用执行的过程
package com.linx.demo.demo1;
/**
* 方法:
* 概念:一系列代码指令的集合,用于实现特定的功能,可以被反复调用
* 调用:在需要使用方法的位置 直接书写方法名即可
*
*/
public class Test1<printSign, printSign2> {
public static void main(String[] args) {
System.out.println("空山新雨后,");
System.out.println("天气晚来秋。");
System.out.println("明月松间照,");
System.out.println("清泉石上流。");
printSign2(16);
int a = 19;
printSign2(a);
int b = 3;
printSign2(a-b);
System.out.println("长安一片月,");
printSign1();
System.out.println("万户捣衣声。");
printSign1 ();
System.out.println("秋分吹不尽,");
printSign1();
System.out.println("总是与关情。");
printSign1();
}
//定义方法打印空格和换行
public static void printSign1(){
for (int i = 0; i < 10; i++) {
System.out.print("-");
}
System.out.println();
}
}
4.参数
多数情况下,方法与调用者之间需要数据的交互;调用者必须提供必要的数据,才能使方法完成相应的功能。
形参:是指在方法定义的时候书写的参数
形参规定了参数的
个数、类型、顺序
,要求调用者在调用方法时必须传入与形参相同的个数、类型、顺序
的实参实参:实际参数 调用方法时传入的参数
4.1单个参数
/**
* 带参数方法
* @param num
*/
public static void printSign2(int num){
for (int i = 0; i < num; i++) {
System.out.print("=");
}
System.out.println();
}
4.2多个参数
我们可以使用多个参数 来增加方法的灵活性
package com.linx.demo.demo2;
/**
* 方法多个参数
*/
public class Test1 {
public static void main(String[] args) {
System.out.print("空山新雨后");
printSign(1,",");
System.out.print("天气晚来秋");
printSign(1,"。");
System.out.print("明月松间照");
printSign(1,",");
System.out.print("清泉石上流");
printSign(1,"。");
printSign(15,"=");
printSign(15,"=");
System.out.print("长安一片月");
printSign(1,",");
printSign(1,",");
System.out.print("万户捣衣声。");
printSign(1,"。");
System.out.print("秋分吹不尽,");
printSign(1,",");
System.out.print("总是与关情。");
printSign(1,"。");
}
public static void printSign(int number,String sign){
for (int i = 0; i < number; i++) {
System.out.print(sign);
}
System.out.println();
}
}
5.返回值和返回类型
如果方法执行完毕后,需要放回具体的数据,需要用return关键字来返回
- 方法定义的时候返回值类型 写为具体的返回数据类型(任何类型都可以写)
- 方法最终使用return关键字返回的的数据,必须和方法声明时书写的类型保持一致
return关键字表示中断方法并且返回内容
package com.linx.demo.demo2;
/**
* 返回值和返回类型
*/
public class Test1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入动物名:");
String name = input.next();
System.out.print("请输入该动物的年龄(整数):");
int age = input.nextInt();
aiInfo(name,age).printInfo();
}
public static animal aiInfo(String s,int a){
animal a1 = new animal(s,a);
return a1;
}
}
class animal{
private int age;
private String name;
public animal(String name,int age) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void printInfo(){
System.out.println("该动物的名称是:"+name+"\t年龄是:"+age);
}
}
6.return关键字的其他用法
- return关键字在分支结构中使用,必须保证每一条分支都有正确的返回值返回
- 在返回值类型为void的方法中 依然可以使用return 此时return关键字之后不能加任何内容
package com.linx.demo.demo2;
import java.util.Scanner;
/**
* 方法多个参数
*/
public class Test2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入你追逐时长:");
double time = input.nextDouble();
System.out.print("请输入你花费的money数:");
double money = input.nextDouble();
if(checkSucess(time,money)){
System.out.println("恭喜你抱得女神归!");
}else{
System.out.println("抱歉,你还没有舔到位,继续加油吧!!");
}
}
public static boolean checkSucess(double time,double money){
if(time*money >= 1000000){
return true;
}else{
return false;
}
}
}
package com.linx.demo.demo3;
/**
* 在返回值类型为void的方法中 依然可以使用return 此时return关键字之后不能加任何内容
* 此时return只表示中断方法
*/
public class Test1 {
public static void main(String[] args) {
m1();
}
public static void m1(){
for (int i = 0; i < 10; i++) {
if(i == 4){
return;
// break;
}
System.out.println("for循环内部");//return只能执行到这里
}
System.out.println("zhgelishifor循环外部");//break可以执行到这里
}
}
7.方法重载
方法重载:同一个类中,方法名相同,参数列表不同(参数的
个数、类型、顺序
),即可称之为方法重载 overload方法重载的优点:屏蔽使用差异,提高阅读性,扩展性
如 :编写一些方法实现多个数的加法计算
package com.linx.demo.demo3;
/**
* 方法重载
* 含义:
* 同一个类中方法名相同
* 参数列表不同(个数、类型、顺序) 即为方法重载
* 优点:屏蔽使用差异 提高阅读性、扩展性
*/
public class Test2 {
public static void main(String[] args) {
int a = 1;
int b = 1;
int c = 1;
int d = 1;
System.out.println( "a+b="+ add(a,b));
System.out.println("a+b+c="+add(a,b,c));
System.out.println("a+b+c+d="+add(a,b,c,d));
}
public static int add(int a,int b){
return a+b;
}
public static int add(int a,int b,int c){
return a+b+c;
}
public static int add(int a,int b,int c,int d){
return a+b+c+d;
}
}
8.多级调用
方法与方法之间可以互相调用,直接书写方法名即可(注意别死循环)
package com.atguigu.test8;
/**
* @author WHD
* @description TODO
* @date 2022/7/12 16:29
* 多级调用
*/
public class Test1 {
public static void main(String[] args) {
m1();
}
public static void m1(){
System.out.println("m1 method start");
m2();
System.out.println("m1 method end");
}
public static void m2() {
System.out.println("m2 method start");
System.out.println("m2 method end");
}
}
9.递归
递归: 递归属于将一个复杂的问题拆分成简单的哥哥小问题
递归的两个必要条件:
1.当前问题可以拆分为小的问题
2.必须有递归的出口(回归的条件)
package com.linx.demo.demo4;
import java.util.Scanner;
/**
* 递归():属于将一个复杂的问题 拆分为简单的各个小问题
* 递归的两个必要条件:
* 1.当前问题可以拆分为小的问题
* 2.必须有递归的出口(回归条件)
*
*/
public class Test1 {
public static void main(String[] args) {
Scanner input =new Scanner(System.in);
int i;
do{
System.out.print("请输入你要求的阶乘数(0退出):");
i= input.nextInt();
System.out.println(i+"的阶乘是:"+getFactoria(i));
System.out.println();
}while(i != 0);
System.out.println("程序结束!");
}
private static int getFactoria(int i) {
if(i==1){
return i = 1;
}
return i*getFactoria(i-1);
}
}