java中的方法

第一节:方法
1.1 什么是方法

Java的方法类似于其它语言的函数,是一段用来完成特定功能的代码片段
1.2 为什么要声明方法

DRY(Don’t Repeat Yourself)原则,把能被复用的逻辑抽取出来
实现相对独立的逻辑
实现比较复杂的逻辑
可以对具体实现进行隐藏/封装
1.3 方法的作用

简化代码,提高代码的可读性,提高代码的可维护性。
1.4 方法的声明格式

语法:
访问权限修饰符 其他修饰符 返回值类型 方法名称(参数列表) {
//方法体【函数体】
return 返回值;
}
1.4.1方法的分类
​ 根据方法有没有参数,可分为:
​ 1.有参方法
​ 2.无参方法
1.4.2 方法声明中需要注意

a.一个完整的方法包含声明部分和实现部分
b.访问权限修饰符:public,[default],private ,protected【如果没有添加任何的访问权限修饰符,则默认为default,而default不需要显式的写出来】,目前使用的访问权限修饰符都和main函数保持一致,使用public
c.其他修饰符:static 【静态的】,要么不写【非静态函数】,要么写上【静态函数】
d.返回值类型:函数运行之后所得到的结果的数据类型,如果没有运行结果,则直接为void【空】
e.方法名称:标识符【遵循驼峰命名法】,尽量做到见名知意
f.参数列表:如果方法所实现的功能中有未知项参与运算,就可以将未知项设置为参数
实际参数:实参,在方法外面定义,表示实际参与运算的值或者变量,作用为了给形参进行赋值
形式参数:形参,在方法中定义,用于接收实参的值,相当于是一个未被赋值的变量。
g.方法体:抽取出来的具有特殊功能的代码段
h.return 返回值:将当前方法运行之后的结果进行返回,返回给当前函数的调用者
return作用:返回结果,结束方法。
上机练习:

  1. 最简单的方法
    void sum(){
    System.out.println(“加法操作”);
    }
  2. 拥有修饰符的方法
    public static void sum(){
    System.out.println(“加法操作”);
    }
  3. 拥有参数的方法
    public static void sum(int a,int b){
    System.out.pritln(“两数相加结果”+a+b);
    }
    4.拥有返回值的方法
    public static int sum(int a,int b){
    return a+b;
    }
    1.5 方法的调用格式

语法:方法名称(实参列表)
注意:
a.实参的数量和类型必须和形参保持完全的一致,实现书写的顺序也必须和形参中的顺序保持完全一致
b.方法之间只能进行相互的调用,而不能在方法中声明方法,就目前而言声明的方法都和main方法时并列的
c.定义方法的时候,运算的结果会返回给调用者【在哪个方法中调用,运算的结果返回给哪个方法】
1.5.2 方法调用练习
class TextDemo01
{
public static void main(String[] args)
{
//需求:打印多遍九九乘法表
/*
for(int i = 1;i <= 9;i++) {
for(int j= 1;j <= i;j++) {
System.out.print(j + “x” + i + “=” + i * j + " ");
}
System.out.println();
}
for(int i = 1;i <= 9;i++) {
for(int j= 1;j <= i;j++) {
System.out.print(j + “x” + i + “=” + i * j + " ");
}
System.out.println();
}
/

System.out.println(“start”);

print();
print();
print();
print();
System.out.println(“end”);
}

//对于打印九九乘法表的功能提取出来一个函数
/

访问权限修饰符 其他修饰符 返回值类型 函数名称(参数列表) {

//函数体【方法体】

return 返回值;
}
*/
public static void print() {
for(int i = 1;i <= 9;i++) {
for(int j= 1;j <= i;j++) {
System.out.print(j + “x” + i + “=” + i * j + " ");
}

System.out.println();
}
}
}
1.6 方法中的参数
工作原理:调用方法的时候,用实参给形参进行赋值,这个过程被称为传参
​ 形参就是一个变量,实参就是一个常量或者携带着值的变量,传参就是把实参赋值给形参​ 传参时需要注意的事项:实参的数量和类型必须和形参的数量和类型保持一致【相兼容的数据类型】
练习:

//演示参数的使用
class FunctionUsageDemo03
{
public static void main(String[] args)
{
//需求:交换两个变量的值

//实参
int a = 10;
int b = 20;

    //调用函数
    swap(a,b);


System.out.println(“main函数中的a=” + a);//10
System.out.println(“main函数中的b=” + b);//20
}

//分析:需要参数(两个参数)
// 不需要返回值
//形参:没有携带值的变量,多个变量之间使用逗号分隔
public static void swap(int a,int b) {
//定义一个中间的临时变量
int temp = 0;
temp = a;
a = b;
b = temp;

System.out.println(“swap函数中的a=” + a);//20
System.out.println(“swap函数中的b=” + b);//10
}
}
1.7 方法的返回值
​ return关键字的作用:返回结果,结束方法。
​ return关键字的使用
​ a.表示一个方法执行完成之后所得到的结果​ void:表示没有返回值
​ b.return的使用​ 1>在没有返回值的方法中使用return​ return单独成立一条语句,类似于break或者continue,后面不能跟任何的数值​ 作用:结束整个方法
​ 2>在一个有返回值的函数中使用return​ 这种情况下函数中必须出现return​ return后面必须跟一个具体的数值,而且数值的类型和返回值类型必须保持一致​ 作用:结束整个方法,并且返回结果给调用者
​ 3>如果一个自定义的函数有返回值,并且在方法中遇到了分支结构,使用return​ 在每一个分支后面都需要出现一个return。
1.7.1 方法的返回值练习

class ReturnUsageDemo01
{
public static void main(String[] args)
{
show();
}
/*
1>在没有返回值的函数中使用return
return单独成立一条语句,类似于break或者continue,后面不能跟任何的数值
作用:结束整个方法
*/
public static void show() {
System.out.println(“Hello World!”);

int x = 10;
if(x > 5) {
return;//在某些情况下,可以使用return替换break
}

// 错误: 无法访问的语句
System.out.println(“Hello World!========”);
}
}

class ReturnUsageDemo02
{
public static void main(String[] args)
{
int result = add(10,20);
System.out.println(result);

System.out.println(add(11,22));

//如果一个函数返回值类型为void,则不能再调用函数的同时直接打印
// 错误: 此处不允许使用 ‘空’ 类型
//System.out.println(show(11,22));
show(11,22);
}

/*
2>在一个有返回值的函数中使用return
这种情况下函数中必须出现return
return后面必须跟一个具体的数值,而且数值的类型和返回值类型必须保持一致
作用:结束整个方法,并且将返回值携带给调用者
*/

//需求:求两个变量的和
public static int add(int a,int b) {
int sum = a + b;
//谁调用,返回给谁
//return每次只能携带一个数据返回
return sum;
}

public static void show(int a,int b) {

int sum = a + b;
System.out.println(sum);
}
}

class ReturnUsageDemo03
{
public static void main(String[] args)
{
int result = compare(34,67);
System.out.println(result);
}
/*
3>如果一个自定义的函数有返回值,并且在方法中遇到了分支结构,使用return
在每一个分支后面都需要出现一个return
/
//需求:比较两个变量的大小,返回较大的一个
public static int compare(int num1,int num2) {
//多分支
/

if(num1 > num2) {
return num1;
} else if(num1 < num2) {
return num2;
} else {
return num1;
}
*/

//出现的问题:在使用单分支的时候,分支内部有return,这时编译还是不通过
//解决办法:在单分支的外面再添加一个返回值,返回值随意,只要类型和返回值类型匹配就ok
//单分支
if(num1 > num2) {
return num1;
}

//没有实际意义,作用只是为了匹配语法
return 0;
}
}
第二节:方法的重载
2.1 方法重载的概念

同一个类中,方法名字相同,参数列表不同。则是重载
注意:
1. 参数列表的不同包括,参数个数不同,参数数据类型不同,参数顺序不同
2. 方法的重载与方法的修饰符和返回值没有任何关系
2.2 方法重载练习

//演示方法的重载
//测试类
class TextDemo04
{
public static void main(String[] args)
{
//对于重载方法而言,具体调用的是哪个方法,取决于所传的参数
show(“10”);
show(“10”,10);
}
}
//实体类
/*
在同一个类中,如果满足以下的条件,则称为这几个方法之间彼此重载
a.方法名相同
b.参数不同【数量不同或者类型不同】
c.访问权限修饰符和返回值类型没有影响
/
class Check
{
public static void show() {
System.out.println(“无参无返回值的show”);
}

//1.改变参数
public static void show(int a) {
System.out.println(“int的show”);
}

public static void show(String a) {
System.out.println(“String的show”);
}

public static void show(String a,int b) {
System.out.println(“String int的show”);
}

//2.改变返回值:返回值对方法的重载没有任何影响
//只改变返回值类型,其他都不改变,则对于编译器而言,则认为是同一个方法
/

public static String show() {
System.out.println(“String返回值的show”);

return “abc”;
}
/

//3.访问权限修饰符
//只改变访问权限修饰符,其他都不改变,则对于编译器而言,则认为是同一个方法
/

static void show() {
System.out.println(“show”);
}
*/
}
第三节: 递归算法
3.1 递归算法的概念
在一个方法的方法体内调用该方法本身,称为方法的递归
方法递归包含了一种隐式的循环,会重复执行某段代码,但是这种重复不需要使用循环语句来进行控制
出现问题: StackOverFlowError 栈空间溢出异常,所以递归不能一直运行,一定要有结束条件。
3.2 案例: 求斐波那契数列中的某个数

class DiGuiUsageDemo01
{
public static void main(String[] args){
/*
斐波那契数列
1,2,3,4,5,6, 7, 8, 9,10,11,…
1,1,2,3,5,8,13,21,34,55,89…

分析:
1.第一个位置和第二个位置上的数是固定的,都是1
2.第n个位置上的数 = 第n - 1个位置上的数 + 第n - 2个位置上的数

fun(1) = 1
fun(2) = 1
fun(3) = fun(2) + fun(1) = 1 + 1
fun(4) = fun(3) + fun(2) = fun(2) + fun(1) +fun(2)
fun(5) = fun(4) + fun(3) = fun(3) + fun(2) + fun(2) + fun(1) = fun(2) + fun(1) + fun(2) + fun(2) + fun(1)

fun(n) = fun(n - 1) + fun(n -2)
*/
int result1 = fun(10);
System.out.println(result1);
}
//需求:报个数,获取在斐波那契数列中对应的数
public static int fun(int n) {
if(n == 1 || n == 2) {
return 1;
} else {
int num1 = fun(n - 1);
int num2 = fun(n -2);
int sum = num1 + num2;
System.out.println(“num1=” + num1 + “,num2=” + num2);
return sum;
}
}
}
3.3 案例二:求1~某个数之间所有整数的和

class DiGuiUsageDemo02
{
public static void main(String[] args)
{
int result = total(100);
System.out.println(result);
}

//需求:求1~某个数之间所有整数的和
//普通方式
public static int add(int n) {
int sum = 0;
for(int i = 1;i <= n;i++) {
sum += i;
}
return sum;
}

//使用递归实现
/*
total(1) = 1
total(2) = total(1) + 2
total(3) = total(2) + 3 = total(1) + 2 + 3

total(n) = total(n - 1) + n
*/
public static int total(int n) {
if(n == 1) {
return 1;
} else {
return total(n - 1) + n;
}
}
}

4.1 练习

class PracticeDemo01
{
public static void main(String[] args)
{
method1();
method2(10);
}
public static void method1() {
//输出100~200之间能被3整除的数
for(int i = 100;i <= 200;i++) {
if(i % 3 != 0) {
continue;
}

System.out.println(i);
}
}
public static void method2(int num) {
//判断一个数是否为质数
//质数:除了1和本身能整除,如果出现一个数可以将这个数整除的话,那么这个数就不是质数
//1.假设是质数
boolean isPrime = true;
//2.寻找能够整除num的数,只要出现一个,则原来的假设被推翻
for(int i = 2;i < num;i++) {
//3.大对小求余
if(num % i == 0) {
//4.修改原来假设的状态
isPrime = false;
break;
}
}
return isPrime;
}
}

class PracticeDemo02
{
public static void main(String[] args)
{
getNum(100);
getNum1(10);
}

//1.求1–某个数之间可以被7整除的数的个数
public static int getNum(int n) {
int count = 0;
for(int i = 1;i <= n;i++) {
if(i % 7 == 0) {
count++;
}
}
return count;
}
}
第五节:总结
​ 1 方法:完成特定功能的一段代码。
​ 声明方法
​ 访问修饰符 其他修饰符 返回类型 方法名(参数列表){
​ 方法体
​ }
​ public static void method1(){
​ }
​ public static void method2(int x){
​ }
​ public static int method(){
​ return 10;
​ }
​ 方法调用:
​ 方法名();
​ 方法名(参数);
​ 2 方法重载
​ 同一个类中,方法名相同,参数类别不同
​ (1) 参数列表不同: 个数不同,类型不同,顺序不同
​ (2)和修饰符、返回值没有关系
​ 3 递归算法 : 在一个方法内部调用自己本身。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值