方法及方法重载
带参方法
结合生活案例理解方法中参数的含义及应用
参数使用是的固定规则需要记忆,结合程序运行加深理解
形成用笔记等形式记录重要知识点、常见错误、解决方案等习惯
参数传递注意事项
成员变量与局部变量的使用注意事项
方法重载的特征
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
基本数据类型,操作传递的是变量的值。改变一个变量的值不会影响另一个变量的值,引用数据类型(类、数组接口),赋值是把原对象的饮用传递给另一个引用
基本数据类型传递值:传递值
引用数据类传递引用。
方法传参-对象数组
学生信息相关的类
//学生类
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()也是一种方法,一种特殊的方法,叫做构造方法
构造方法写法
//访问修饰符(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);
}
}
成员变量和局部变量
成员变量(全局变量)作用域是整个类中
局部变量:作用域是一个方法或者一个语句块
局部变量超出其作用域后不可用!!!
成员变量会给赋值一个初始值
局部变量则没有初始值,必须初始化赋值后,才能使用
两个不同的方法 作用域中可以有两个相同名称的成员变量
但是在同一个方法 作用域中不可以有同名的局部变量
在同一个类中,局部变量和全局变量可以同名,但是同名时局部变量的优先级会更高
参数也是一种变量,它是一种局部变量