Java - day5 - 方法
方法是什么
- 方法是一种语法结构,它可以把一段代码封装成一个功能,以方便重复调用。
使用方法的好处是?
- 提高了代码的复用性。
- 让程序的逻辑更清晰。
实例:
public class one_方法 {
public static void main(String[] args) {
int c1 = sum(15,50);
System.out.println(c1); //65
int c2 = sum(80,50);
System.out.println(c2); //130
}
public static int sum(int a ,int b){
int c = a + b;
return c;
}
}
方法定义的完整格式
修饰符 返回值类型 方法名(形参列表){
方法体代码(需要执行的功能代码)
return返回值;
}
示例: 使用方法对2个整数求和并返回。
public static int sum(int a ,int b){
int c = a + b;
return c;
}
方法的调用格式
- 方法必须调用才可以跑起来,调用格式:
方法名(.….);
方法格式的注意点
- 方法的修饰符:暂时都使用public static修饰。
- 方法申明了具体的返回值类型,内部必须使用return返回对应类型的数据。
- 形参列表可以有多个,甚至可以没有;如果有多个形参,多个形参必须用“,”隔开,且不能给初始化值。
方法的其他写法
- 方法定义时:返回值类型、形参列表可以按照需求进行填写。
如果方法不需要返回结果,不需要接收参数,应该怎么办,要注意什么?
- 方法不需要返回结果,则申明返回值类型为void;方法不需要参数,则形参列表可以不写。
- 方法没有申明返回值类型,内部不能使用return返回数据。
实例:
public class Void方法 {
public static void main(String[] args) {
print();
}
public static void print() {
for (int i = 0; i < 3; i++) {
System.out.println("hello");
}
}
}
方法常见问题
- 方法的编写顺序无所谓。
- 方法与方法之间是平级关系,不能嵌套定义。
- 方法的返回值类型为void(无返回值),方法内则不能使用return返回数据,如果方法的返回值类型写了具体类型,方法内部
则必须使用return返回对应类型的数据。 - return语句下面,不能编写代码,因为永远执行不到,属于无效的代码。
- 方法不调用就不执行,调用时必须严格匹配方法的参数情况。
- 有返回值的方法调用时可以选择定义变量接收结果,或者直接输出调用,甚至直接调用;无返回值方法的调用只能直接调用一下。
方法定义的技巧说明
- 修饰符:
public static
(暂时固定的) - 方法名称:自己取名,有意义,英文小写,驼峰模式。(有意义的名字即可)
- 方法体代码:完成自己需要写的功能代码即可。(具体需求具体实现)
真正需要关注的就两点:
- 分析方法是否需要申明返回值类型;
- 分析方法是否需要接收参数。
实例:
public class 一减N {
public static void main(String[] args) {
System.out.println("1~5的和:" + sum(5));
System.out.println("1~100的和:" + sum(100));
}
public static int sum(int n) {
int sum = 0;
for (int i = 0; i <=n; i++) {
sum += i;
}
return sum;
}
}
实例:
public class 奇数偶数 {
public static void main(String[] args) {
check(3);
check(4);
}
public static void check(int number) {
if (number % 2 == 0){
System.out.println(number + "偶数");
}else{
System.out.println(number + "奇数");
}
}
}
实例:
public class 最值 {
public static void main(String[] args) {
int[] ages ={4,56,67,1};
int max = maxData(ages);
System.out.println("最大值为:" + max);
}
public static int maxData(int[] arr) {
int max = arr[0];
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max){
max = arr[i];
}
}
return max;
}
}
方法的调用流程-内存图解
- 方法没有被调用的时候,在方法区中的字节码文件中存放方法被调用的时候,需要进入到栈内存中运行
- 方法的运行区域在哪里? —— 栈内存。
实例:
public class 方法调用流程 {
//吃饭,学习,睡觉
public static void main(String[] args) {
study();
}
public static void sleep(){
System.out.println("睡觉");
}
public static void eat(){
System.out.println("吃饭");
}
public static void study(){
eat();
System.out.println("学习");
sleep();
}
}
Java的参数传递机制:值传递
- 在传输实参给方法的形参的时候,并不是传输实参变量本身,而是传输实参变量中存储的值,这就是值传递。
注意:
- 实参:如在方法内部定义的变量。
- 形参:如在定义方法时,“()”中所声明的参数。
形参和实参各指什么?
- 形参:以方法为例,就是方法定义时的变量。
- 实参:在方法内部定义的变量。
java的参数传递机制是什么样的?
- 值传递,传输的是实参存储的值。
实例:
public class 值传递 {
public static void main(String[] args) {
int a =10;
change(a);
System.out.println(a); //10
}
public static void change(int a) {
System.out.println(a); //10
a = 30;
System.out.println(a);//30
}
}
引用类型的参数传递
实例:
public class 引用类型的参数传递 {
public static void main(String[] args) {
int[] arr = {10,20,50};
acv(arr);
System.out.println(arr[1]); //203
}
public static void acv(int[] arr) {
System.out.println(arr[1]); //20
arr[1]=203;
System.out.println(arr[1]); //203
}
}
基本类型和引用类型的参数在传递的时候有什么不同?
- 都是值传递。
- 基本类型的参数传输存储的数据值。
- 引用类型的参数传输存储的地址值。
实例:
public class 打印整型数组内容 {
public static void main(String[] args) {
int[] ages = {10,50,555,88};
print(ages);
int[] numbers = {3,2,88};
print(numbers);
}
public static void print(int[] arr) {
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
// if (i == arr.length - 1){
// System.out.print(arr[i]);
// }else {
// System.out.print(arr[i] + ",");
// }
//三元运算符来表达可简化
System.out.print(i == arr.length - 1 ? arr[i] : arr[i] + ",");
}
System.out.println("]");
}
}
实例:
public class 数组查询指定元素的索引 {
public static void main(String[] args) {
int[] arr ={11,55,155,1748,77};
int index =search(arr,155);
System.out.println("数组查询指定元素的索引:" + index);
}
public static int search(int[] arr, int data) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == data){
return i; //在数组内输出其索引
}
} return -1; //在数组外输出 “-1”
}
}
实例:
public class 两个数是一样的吗 {
public static void main(String[] args) {
int[] arr1 = {10,80,87};
int[] arr2 = {10,80,87};
System.out.println(compare(arr1,arr2));
}
public static boolean compare(int[] arr1,int[] arr2) {
if (arr1.length == arr2.length){
for (int i = 0; i < arr1.length; i++) {
if (arr1[i] != arr2[i]){
return false;
}
}
return true;
}else {
return false;
}
}
}
方法重载的作用
- 可读性好,方法名称相同提示是同一类型的功能,通过形参不同实现功能差异化的选择,这是一种专业的代码设计。
实例:
public class MethodDemo1 {
public static void main(String[] args) {
//目标:识别方法重载的形式。并理解其调用流程,最后需要知道使用方法重载的好处。fire();
fire();
fire("岛国");
fire("岛国", 1000);
}
public static void fire() {
System.out.println("默认发射一枚武器给米国~~~");
}
public static void fire(String location) {
System.out.println("默认发射一枚武器给" + location + " ~~");
}
public static void fire(String location,int number) {
System.out.println("默认发射" + number + "枚武器给" + location + " ~~~");
}
}
方法重载的识别技巧
- 只要是同一个类中,方法名称相同、形参列表不同,那么他们就是重载的方法,其他都不管!
(如︰修饰符,返回值类型都无所谓) - 形参列表不同指的是:形参的个数、类型、顺序不同,不关心形参的名称。
实例:
public class ReturnDemo {
public static void main(String[] args) {
//目标:明确return关键字的作用。
//输出main开始。。您输入的数据有问题,除数不能是0!! main结束。。
System.out.println( "main开始。。");
chu( 10 , 0);
System.out.println( "main结束。。");
}
public static void chu(int a, int b){
if(b == 0){
System.out.println("您输入的数据有问题,除数不能是0!! ");
return; ////立即跳出当前方法,并结束当前方法的执行。
}
int c = a / b;
System.out.println("结果是:" + c);
}
}
Comments | NOTHING