喵星之旅-成长的雏鹰-java面向对象-2-方法

方法的参数传递

如何使用带参数的方法

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
this.print();

调用构造方法(如果使用,必须是构造方法中的第一条语句)

1
this();

方法重载

方法重载:
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不会给局部变量赋予初始值

在同一个方法中,不允许有同名局部变量
在不同的方法中,可以有同名局部变量

在同一个类中,成员变量和局部变量同名时,局部变量具有更高的优先级

文章目录
  1. 方法的参数传递
    1. 例子
    2. 值传递和引用传递
  2. 构造方法
    1. 构造方法
    2. 构造方法重载
    3. this关键字的用法
  3. 方法重载
  4. 成员变量和局部变量
|