方法的参数传递
如何使用带参数的方法
1 2 3 4
| <访问修饰符> 返回类型 <方法名>(<形式参数列表>) { //方法的主体 }
|
调用带参数的方法
1 2
| 对象名.方法名(参数1, 参数2,……,参数n)
|
例子
使用带参方法实现学员信息管理
增加学员姓名
在保存了多个学生姓名的数组中,指定查找区间,查找某个学生姓名并显示是否查找成功
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| /** * * 实现学生信息的管理 * */ public class StudentsBiz { String[] names = new String[30]; // 学员姓名数组 /** * 增加学生姓名 * @param name要增加的姓名 */ public void addName(String name){ for(int i =0;i<names.length;i++){ if(names[i]==null){ names[i]=name; break; } } } /** * 显示本班的学生姓名 */ public void showNames(){ System.out.println("本班学生列表:"); for(int i =0;i<names.length;i++){ if(names[i]!=null){ System.out.print(names[i]+"\t"); } } System.out.println(); } /** * 在一定区间查找学生姓名 * @param start 开始位置 * @param end 结束位置 * @param name 查找的姓名 * @return find 是否查找成功 */ public boolean searchName(int start,int end,String name){ boolean find = false; // 是否找到标识 // 指定区间数组中,查找姓名 for(int i=start-1;i<end;i++){ if(names[i].equals(name)){ find=true; break; } } return find; } }
import java.util.Scanner;
public class TestSearch { /** * 调用带3个参数的方法 */ public static void main(String[] args) { StudentsBiz st = new StudentsBiz(); Scanner input = new Scanner(System.in); for(int i=0;i<5;i++){ System.out.print("请输入学生姓名:"); String newName = input.next(); st.addName(newName); } st.showNames(); System.out.print("\n请输入开始查找的位置:"); int s = input.nextInt(); System.out.print("请输入结束查找的位置:"); int e = input.nextInt(); System.out.print("请输入查找的姓名:"); String name = input.next(); System.out.println("\n*****查找结果*****"); if(st.searchName(s,e,name)){ System.out.println("找到了!"); } else{ System.out.println("没找到该学生!"); } } }
|
值传递和引用传递
基本数据类型和引用数据类型数据在传参时区别。
基本数据类型,操作传递的是变量的值,改变一个变量的值不会影响另一个变量的值。引用数据类型(类、数组和接口),赋值是把原对象的引用(可理解为内存地址)传递给另一个引用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public class Test { public void calc1(int num){ num=num+1; } public void calc2(Student student){ student.age=student.age+1; } }
//测试类 Test test=new Test(); int n=8; test.calc1(n); Student stu=new Student(); stu.age=18; test.calc2(stu); System.out.println(n+"---"+stu.age);
|
构造方法
构造方法
作用:对象初始化
特点:无返回值类型\方法名与类名相同\可以指定参数
1 2 3 4
| 访问修饰符 构造方法名 ( ) { //初始化代码 }
|
无参构造方法,每个类都有个默认无参构造方法,系统提供默认无参构造方法 。
构造方法重载
自定义构造方法:
1、方法名相同
2、参数项不同
3、与返回值、访问修饰符无关
此时系统不再提供默认无参构造方法
1 2 3 4 5 6
| public Student(){} public Student(String name,int age){ this.name=name; this.age=age; }
|
带参构造方法this关键字
是对一个对象的默认引用这里用以区分同名成员变量
this关键字的用法
调用属性
1 2 3
| this.health = 100; this.name = "大黄";
|
调用方法
调用构造方法(如果使用,必须是构造方法中的第一条语句)
方法重载
方法重载:
1、同一个类中
2、方法名相同
3、参数个数或类型不同
4、与返回值、访问修饰符无关
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public class Calc { public int getSum(int num1,int num2){ System.out.println("int"); return num1+num2; } public double getSum(double num1,double num2){ System.out.println("double"); return num1+num2; } public double getSum(double num1,double num2,double num3){ return num1+num2+num3; } public static void main(String[] args) { Calc calc=new Calc(); System.out.println(calc.getSum(67, 89)); System.out.println(calc.getSum(67, 89,78.4)); } }
|
成员变量和局部变量
变量声明的位置决定变量作用域
变量作用域确定可在程序中按变量名访问该变量的区域
定义在类中的、方法外的是成员变量,也称属性;
定义在方法范围内的为局部变量。
作用域不同:
局部变量的作用域仅限于定义它的方法
成员变量的作用域在整个类内部都是可见的
初始值不同:
Java会给成员变量一个初始值
Java不会给局部变量赋予初始值
在同一个方法中,不允许有同名局部变量
在不同的方法中,可以有同名局部变量
在同一个类中,成员变量和局部变量同名时,局部变量具有更高的优先级