学习java的第十二课——方法及方法重载

方法及方法重载

在这里插入图片描述

带参方法

结合生活案例理解方法中参数的含义及应用

参数使用是的固定规则需要记忆,结合程序运行加深理解

形成用笔记等形式记录重要知识点、常见错误、解决方案等习惯

​ 参数传递注意事项

​ 成员变量与局部变量的使用注意事项

​ 方法重载的特征

在这里插入图片描述

show的()内无东西的是无参方法,()内的东西叫做参数,如果有东西叫做有参方法

在这里插入图片描述

在这里插入图片描述

实际参数可以和形式参数不一致

//榨汁机
public class Test020201_juicer {
	
	//属性:颜色 价格
	String color;
	double price;
	
	//方法:输出信息
	//展示这是xx颜色的榨汁机,价格为xx元
	public void showInfo() {
	
		System.out.println("这是一台"+color+"的榨汁机,价格为:"+price+"元。");
	
	}
	//方法:榨汁-前提:水果,杯数-形式参数(他定义了参数的形式):首先要参数类型  要定义参数名称
	
	public void squeeze(String fruit,int num) {
		
		System.out.println("给你榨"+num+"杯"+fruit+"汁");
		
	}
	
	
}

输出


import java.util.*;

public class Test020201 {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		
		Test020201_juicer juice = new Test020201_juicer();
		juice.color = "白色";
		juice.price =340;
		juice.showInfo();
		
		
		System.out.println("您想要什么果汁");
		String fruit =input.next();
		System.out.println("您想要几杯果汁");
		int num =input.nextInt();
		//()内的是实际参数叫做实参
		juice.squeeze(fruit,num);
		
	}

}

在这里插入图片描述

带参方法的定义

​ <访问修饰符>返回类型<方法名>(<形式参数列表>){

//方法主体

}

带参方法的调用

​ 对象名.方法名(参数1,参数2,…,参数n)

带参方法使用注意事项

在这里插入图片描述

调用方法是不拿指定实参类型!
在这里插入图片描述

形参和实参数据类型要一致!数量也要一致!

带参方法应用

在这里插入图片描述

首先分析,要用到那些属性和用到哪些方法

需要用到的属性:

​ 存放学生姓名的数组

需要用到的方法

​ 增加学生姓名

​ 在固定区间内,查找某个学生

//同学
public class Test020203_student {
	// 属性:存放学生姓名的数组
	String[] names = new String[30];

	// 方法1:增加学生姓名
	// 先判断有没有空位置null,插入到第一个空位置null中
	// 参数类型String 参数名称name
	public void addName(String name) {//参数String name
		
		for(int i =0;i<names.length;i++) {
			if(names[i]==null) {
				names[i]=name;
				break;
			}
			
		}
	}
		
	//方法2:在固定区间内,查找某个学生
	//start:开始位置
	//end:接触位置
	//name:查找的学生姓名
	//返回值类型为boolean
	public boolean searchName(int start,int end,String name){
		boolean flag = false;//是否找到改名学生,false没有找到,反之找到了
		for(int i =start-1;i<end;i++) {
			if(name.equals(names[i])){
				flag=true;
			}
		}
		
		//如果找到了改名学生则最后返回的值为true
		//如果没有找到改名学生则最后返回的值为false
		return flag;//最后输出的是flag的Boolean值;
	}
		
	//方法3:显示本班学生信息
	public void showNames() {
		System.out.println("本班学院列表:");
		for(int i= 0;i<names.length;i++){
			//如果不是null空的,则输出
			if(names[i]!=null) {
				System.out.print(names[i]+"\t");
			}
		}
		
	}
	
	}


输出

import java.util.Scanner;

//测试学生信息管理系统

public class Test020203 {
	public static void main(String[] args) {
		Test020203_student mgr = new Test020203_student();
		Scanner input = new Scanner(System.in);
		for (int i = 0; i < 5; i++) {
			System.out.println("请输入第" + (i + 1) + "个同学的姓名");
			String name = input.next();
			mgr.addName(name);
		}
		mgr.showNames();
		// 查找某个学生的信息
		System.out.println();
		System.out.print("请输入要开始的位置");
		int start = input.nextInt();
		System.out.print("请输入查找结束的位置");
		int end = input.nextInt();
		System.out.print("请输入要查找的学生的名字");
		String findName = input.next();

		boolean flag = mgr.searchName(start, end, findName);

		if (flag == true) {
			System.out.println("找到了");
		} else {
			System.out.println("没有该学生");
		}
	}

}

带参数的方法使用,参数的传递,可以打断点看清楚过程,帮助理解

代码熟练度依然要通过反复练习提升

方法传参-基本&引用数据类型

掌握基本数据类型和引用数据类型在传参时的区别

在这里插入图片描述

结果时,输出8—19

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PKBvtMWa-1634635059492)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211018141658425.png)]

基本数据类型,操作传递的是变量的值。改变一个变量的值不会影响另一个变量的值,引用数据类型(类、数组接口),赋值是把原对象的饮用传递给另一个引用

基本数据类型传递值:传递值

引用数据类传递引用。

方法传参-对象数组

在这里插入图片描述

学生信息相关的类

//学生类
public class Test020204_Student {
	//属性:姓名 成绩
	String name;
	int score;
	
	//方法:输出个人信息
	public void showInfo() {
		System.out.println(name+"的成绩是:"+score);
	}
	
	
}

操作学院成绩相关的类

//操作学员成绩
public class Test020204_ModifyScore {
	// 修改小于60份同学的成绩
	public void modifyStuScore(Test020204_Student[] stus) {
		// 参数是学生数组
		// 调用的是Test020204_Student类中的属性和方法

		for (int i = 0; i < stus.length; i++) {
			if (stus[i].score < 60) {
				stus[i].score += 2;
			}
		}

	}

//展示本组学生成绩信息

	public void showStus(Test020204_Student[] stus) {
		for(Test020204_Student stu:stus) {//遍历数组输出
			stu.showInfo();//本类中的方法可以互相调用
		}
	}
}

输出展示

//输出
public class Test020204 {

	public static void main(String[] args) {
		//声明要引用的操作学员成绩类
		Test020204_ModifyScore out = new Test020204_ModifyScore();
		
		//声明要引用的学生类,属性赋值
		Test020204_Student s1 =new Test020204_Student();
		s1.name="罗小洋";
		s1.score=43;
		
		Test020204_Student s2 =new Test020204_Student();
		s2.name="冯小洲";
		s2.score=98;
		
		Test020204_Student s3 =new Test020204_Student();
		s3.name="徐小豪";
		s3.score=59;
		
		//声明一个长度为3的数组
		Test020204_Student[] stus =new Test020204_Student[3];
		//将上面的属性赋值到数组中
		stus[0]=s1;
		stus[1]=s2;
		stus[2]=s3;
		
		//显示修改前学生信息
		out.showStus(stus);
		//修改学生的成绩
		out.modifyStuScore(stus);
		//显示修改后学生成绩
		out.showStus(stus);
	
	}

}

构造方法

在这里插入图片描述

Student s1 = new Student();
    //Student()也是一种方法,一种特殊的方法,叫做构造方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ahSjqOlM-1634635059496)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211018155342484.png)]

构造方法写法

​ //访问修饰符(public) 构造方法名(){

​ //初始化代码

​ }

public class Student {
	// 属性:姓名 成绩
	String name;
	int score;
	
	//系统默认提供这个无参构造方法
	public Student() {};
	// 方法:输出个人信息
	public void showInfo() {
		System.out.println(name + "的成绩是:" + score);
	}
}

​ 1.无返回值类型

​ 2.方法名与类名相同

作用

​ 对象初始化

​ 系统提供默认无参构造方法

​ 可以指定参数

//带参构造方法
	/*public Test020204_Student(String name, int score) {
		//前面的name是上方属性中的String name
		//后面的name是参数中的String name
		name = name;
		
	}*/
	
	//带参构造方法 this:指代当前对象
	public Test020204_Student(String name, int score) {
		//前面的name是上方属性中的String name
		//后面的name是参数中的String name
		this.name = name;
		this.score = score;
		
    }

this的含义是指代当前对象

输出:

Student s1 = new Student("罗小洋",43);
//this的当前对象是s1
Student s2 = new Student("冯小洲",98);
//this的当前对象是s2
Student s3 = new Student("徐小豪",58);
//this的当前对象是s3


在这里插入图片描述

	public void showInfo() {
		System.out.println(name + "的成绩是:" + score);
	}
	public void test1() {
		showInfo();//等同于:this.showInfo();
		
	}

在这里插入图片描述

public Student(String name, int score) {
		//前面的name是上方属性中的String name
		//后面的name是参数中的String name
		this.name = name;
		this.score = score;
		
	}
	
	public Student(String name, int score,int age){
		this(name,score);//调用构造方法Student(String name, int score)
        //必须要放在方法中的第一行代码
		this.age =age;
	}

系统默认提供这个无参构造方法

但是如果自定义了带参构造方法,系统就不再默认提供构造方法了。如果想要用,必须是显式声明

public Student() {}
在这里插入图片描述

构造方法不能拥有返回值也不能有void

构造方法:

​ 作用:对象初始化

​ 每个类都有默认无参构造方法

​ 可以自定义带参构造方法,此时系统不再提供默认无参构造方法

this

​ 对一个对象的默认引用

方法重载

在这里插入图片描述

方法名相同,参数项不同,是可以的,是一种构造方法重载

与返回值,访问修饰符无关

方法重载

​ 同一个类中

​ 方法名相同

​ 参数个数或者类型不同

​ 与返回值,访问修饰符无关

在这里插入图片描述

//类和方法

//类和方法
public class Test020205_add {
	int shu1;
	int shu2;
	double fuDian1;
	double fuDian2;
	double fuDian3;

	public void add(int shu1 , int shu2) {
		this.shu1=shu1;
		this.shu2=shu2;
		System.out.println(shu1+shu2);
	}
	
	public void add(double fuDian1 , double fuDian2,double fuDian3) {
		this.fuDian1=fuDian1;
		this.fuDian2=fuDian2;
		this.fuDian3=fuDian3;
		System.out.println(fuDian1+fuDian2+fuDian3);
	}
	
}

输出

//输出
public class Test020205 {

	public static void main(String[] args) {

		Test020205_add suan1 = new Test020205_add();
		suan1.add(1, 2);
		suan1.add(1.1, 2.2, 3.3);
		
	}

}

成员变量和局部变量

在这里插入图片描述

成员变量(全局变量)作用域是整个类中

局部变量:作用域是一个方法或者一个语句块

局部变量超出其作用域后不可用!!!

在这里插入图片描述

成员变量会给赋值一个初始值

局部变量则没有初始值,必须初始化赋值后,才能使用

两个不同的方法 作用域中可以有两个相同名称的成员变量

但是在同一个方法 作用域中不可以有同名的局部变量

在同一个类中,局部变量和全局变量可以同名,但是同名时局部变量的优先级会更高

参数也是一种变量,它是一种局部变量

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值