一.方法
1.方法的介绍与定义
Java中的方法,即函数(文中我们统称之为“方法”),是一个固定的一个程序段,或称其为一个子程序,它在可以实现固定运算功能。而且,同时还带有一个入口和一个出口,所谓的入口,就是函数所带的各个参数,我们可以通过这个入口,把函数的参数值传入子程序,供计算机处理;所谓出口,就是指函数的返回值,在程序段执行之后,由此返回值将值传回给调用它的程序。
/*
1.简单的说:方法就是完成特定功能的代码块
在很多语言里面都有函数的定义
函数在Java中被称为方法
*/
方法就是完成特定功能的代码块,为了避免一些重复的代码
2.方法的格式
/*
2.格式:
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…) {
函数体;
return 返回值;
}
*/
3.方法格式的解释
- 修饰符: 目前记住 public static
- 返回值类型: 用于限定返回值的数据类型
- 方法名: 一个名字,为了方便我们调用方法
- 参数类型: 用于接收调用方法时传入的数据的类型
- 参数名: 用于接收调用方法时传入的数据的变量
- 方法体: 完成功能的代码
- return: 结束方法,把返回值带给调用者
4.简单的示例代码(有返回值)
package com.it_01;
/*
* 需求:求两个数的和
* */
public class MethonDemo {
public static void main(String[] args) {
//1.单独调用
//sum(10,20);
//2.输出调用
//System.out.println(sum(10,20));
//3.赋值调用
int result = sum(10,20);
//4.可以对result进行操作
//result += 10;
System.out.println(result);
}
public static int sum(int a, int b ) {
//1.返回方式一
return a+b;
//2.返回方式二
// int c = a+b;
// return c;
}
}
5.几个简单的小练习
1.键盘录入两个数据,返回两个数中的较大值
package com.it_01;
import java.util.Scanner;;
/*
* 键盘录入两个数据,返回两个数中的较大值
* */
public class MethonDemo02 {
public static void main(String[] args) {
//创建一个对象
Scanner sc = new Scanner(System.in);
//接受数据
System.out.println("请输入第一个数字:");
int a = sc.nextInt();
System.out.println("请输入第二个数字:");
int b = sc.nextInt();
int max = getMax(a, b);
System.out.println("max:"+max);
}
/*
* 返回两个数中的较大值
*
* 两个明确:
* 返回值类型:int
* 参数列表:int a,int b
*/
//求出输入的两个数中较大数据的函数
public static int getMax(int a,int b) {
if(a>b) {
return a;
}else {
return b;
}
}
}
2.键盘录入两个数据,比较两个数是否相等
package com.it_01;
import java.util.Scanner;
/*
* 需求:
* 键盘录入两个数据,比较两个数是否相等
* */
public class MethonDemo03 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
//接收数据
System.out.println("请输入第一个数据:");
int x = sc.nextInt();
System.out.println("请输入第二个数据:");
int y = sc.nextInt();
//调用方法
boolean b = compare(x,y);
//输出结果
System.out.println("b:"+b);
}
/*
* 比较两个数是否相等
*
* 两个明确:
* 返回值类型:boolean
* 参数列表:int a,int b
*/
public static boolean compare(int a,int b) {
if(a == b){
return true;
}else {
return false;
}
}
}
3.键盘录入三个数据,返回三个数中的最大值
package com.it_01;
import java.util.Scanner;
/*
* 键盘录入三个数据,返回三个数中的最大值
* */
public class MethonDemo04 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
//接收数据
System.out.println("请输入第一个数据:");
int a = sc.nextInt();
System.out.println("请输入第二个数据:");
int b = sc.nextInt();
System.out.println("请输入第三个数据:");
int c = sc.nextInt();
//调用方法
int max = getMax(a,b,c);
//输出结果
System.out.println("max:"+max);
}
/*
* 返回三个数中的最大值
*
* 两个明确:
* 返回值类型:int
* 参数列表:int a,int b,int c
*/
public static int getMax(int a,int b,int c) {
//1.利用普通的方法进行比较
// if(a > b) {
// if(a > c) {
// return a;
// }else {
// return c;
// }
// }else {
// if(b > c) {
// return b;
// }else {
// return c;
// }
// }
//2.新建一个数组,把数据都放到数组中,然后在进行比较
//定义一个数组,把数据方法数组中来进行比较
int [] arr = {a,b,c};
//选择一个参照物
int max = a;
for(int i = 0;i<arr.length;i++) {
if(max<arr[i]) {
max = arr[i];
}
}
return max;
}
}
6.没有返回值的方法
1.示例代码一
package com.it_02;
/*
* 在控制台打印出10遍HelloWorld
* */
public class MethonDemo {
public static void main(String[] args) {
printHelloWorld();
// System.out.println(printHelloWorld());
}
//在控制台打印出相关的helloWorld
public static void printHelloWorld() {
for(int i = 0;i<10;i++) {
System.out.println("HelloWorld");
}
}
}
2.示例代码二:
package com.it_02;
/*
* 写一个方法,传递一个整数(大于1),在控制台打印1到该数据的值
* */
import java.util.Scanner;
public class MethonDemo02 {
public static void main(String[] args) {
//创建一个对象
Scanner sc = new Scanner(System.in);
//接收数据
System.out.println("请输入一个数字:");
int a = sc.nextInt();
printNum(a);
}
public static void printNum(int a) {
for(int i = 1;i<=a;i++) {
System.out.println(i);
}
}
}
3.示例代码三:
package com.it_02;
/*
* 写一个方法,把所有的水仙花数打印在控制台
* */
public class MethonDemo03 {
public static void main(String[] args) {
printNarcissisticNumber();
}
public static void printNarcissisticNumber() {
for(int i = 100;i<=1000;i++) {
int ge = i%10;
int shi = i/10%10;
int bai = i/100%10;
if(ge*ge*ge+shi*shi*shi+bai*bai*bai==i) {
System.out.println(i);
}
}
}
}
二.方法的重载
java中方法重载必须满足的条件:
/*
1.在同一个类中
2.方法名必须相同
3.方法的参数类不同 (和返回值类型没有关系)
ps:方法的参数类不同包括:
(1).参数的个数不同
(2).参数的类型不同
(3).参数的顺序不同(这个指的是参数存在多种类型的数据类型,如果只存在同一种类型的数据,则不适用)
*/
示例代码一:
package com.it_03;
/*
* 方法重载:在同一个类中,出现了方法名相同的情况。
* 方法重载的特点:
* 方法名相同,参数列表不同。与返回值无关。
* 参数列表不同:
* 参数的个数不同
* 参数对应的数据类型不同
* 参数的顺序不同(参数中存在多种数据类型的时候)
*
* 注意:
* 在调用方法的时候,java虚拟机会通过参数列表的不同来区分同名的方法。
*/
public class MethonDemo {
public static void main(String[] args) {
//定义变量
int a = 10;
int b = 20;
//求和方法
int result = sum(a,b);
// System.out.println("result:"+result);
//求和方法
float e = 100;
float f = 300;
float result2 = sum(e,f);
// System.out.println("result2:"+result2);
float result4 = sum(e,a);
System.out.println("result4:"+result4);
//定义变量
int c = 30;
//求和方法
int result3 = sum(a,b,c);
// System.out.println("result3:"+result3);
}
//定义两个数的求和方法
public static int sum(int a, int b) {
return a+b;
}
//定义两个数的的求和方法(float)
public static float sum(float a,float b) {
return a+b;
}
//
public static float sum(int a,float b) {
System.out.println("float1");
return a+b;
}
public static float sum(float a,int b) {
System.out.println("float2");
return a+b;
}
//定义三个数的求和方法
public static int sum(int a,int b,int c) {
return a+b+c;
}
}
示例代码二:
package com.it_03;
/*
* 比较两个数据是否相等。参数类型分别为两个byte类型,两个short类型,两个int类型,两个long类型,并在main方法中进行测试
*/
public class MethonDemo02 {
public static void main(String[] args) {
//int 类型
//System.out.println(compare(10, 20));
//byte类型
//System.out.println(compare((byte)10, (byte)20));
//short类型
//System.out.println(compare((short)10, (short)20));
//long类型
System.out.println(compare(10L, 20L));
}
//byte
public static boolean compare(byte a,byte b) {
System.out.println("byte");
return a == b;
}
//short
public static boolean compare(short a,short b) {
System.out.println("short");
return a == b;
}
//int
public static boolean compare(int a,int b) {
System.out.println("int");
return a == b;
}
//long
public static boolean compare(long a,long b) {
System.out.println("long");
return a == b;
}
}
三.java中参数传递问题
参数传递一般有两种,一种是“传值”(基本数据类型),另一种是“传地址值”(引用数据类型)。传值是指在调用方法时,把参数的值传递给方法,而传地址值则是给方法提供参数的地址值。Java中的参数传递方法都为传值调用。
java中的方法中的参数可以是基本数据类型和引用数据类型,我们可以这样简单的来理解:
1.当实际参数是基本数据类型的时候,形式参数的改变不影响实际参数的变化
2.当实际参数是引用数据类型的时候,形式参数的改变会影响实际参数的变化
示例代码一:(实际参数为基本数据类型的时候)
package com.it_04;
/*
* 方法的参数如果是基本数据类型:形式参数的改变不影响实际参数。
*
* 形式参数:用于接收实际参数的变量
* 实际参数:实际参与运算的变量
*/
public class ArgsDemo {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("a:"+a+",b:"+b);//a:10,b:20
change(a,b);
System.out.println("a:"+a+",b:"+b);// a:10,b:20
}
public static void change(int a,int b) {//a=10,b=20
System.out.println("a:"+a+",b:"+b);//a:10,b:20
a = b;//a=20
b = a + b;//b=40
System.out.println("a:"+a+",b:"+b);//a:20,b:40
}
}
示例代码图解:
示例代码二:(引用数据类型)
package com.it_04;
/*
* 如果参数是引用数据类型:
* 形式参数的改变直接影响实际参数
*/
public class ArgsDemo02 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
for(int x=0; x<arr.length; x++) {
System.out.print(arr[x]+",");
}
System.out.println();
change(arr);
for(int x=0; x<arr.length; x++) {
System.out.print(arr[x]+",");
}
}
public static void change(int[] arr) {
for(int x=0; x<arr.length; x++)
{
if(arr[x]%2==0)
{
arr[x]*=2;
}
}
}
}
示例代码图解:
java方法的几个小练习:
1.数组遍历练习
package com.it_05;
/*
* 把遍历数组改进为方法实现,并调用方法
*/
public class ArgsDemo {
public static void main(String[] args) {
int [] arr = {1,2,3,4,5};
printArray(arr);
}
//基本打印出来的格式
// public static void printArray(int [] arr) {
// for(int i=0;i<arr.length;i++) {
// System.out.println(arr[i]);
// }
//
// }
// 把打印出来的格式变成为[1,2,3,4,5]
public static void printArray(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]+",");
}
}
}
}
2.数组求最值练习:
package com.it_05;
/*
* 把获取数组最值改进为方法实现,并调用方法
*
*/
public class ArgsDemo02 {
public static void main(String[] args) {
int [] arr = {31,11,56,79,80,100};
int max = getMax(arr);
System.out.println("max:"+max);
int min = getMin(arr);
System.out.println("min:"+min);
}
// 最大值
public static int getMax(int [] arr) {
int max = arr[0];
for(int i = 0;i<arr.length;i++) {
if(max<arr[i]) {
max=arr[i];
}
}
return max;
}
//最小值
public static int getMin(int [] arr) {
int min = arr[0];
for(int i = 0;i<arr.length;i++) {
if(min>arr[i]) {
min=arr[i];
}
}
return min;
}
}
3.数组求和练习
package com.it_05;
public class ArgsDemo03 {
public static void main(String[] args) {
int [] arr = {31,11,56,79,80,100};
int sum =sum(arr);
System.out.println("sum:"+sum);
}
public static int sum(int [] arr) {
int sum = 0;
for(int i = 0;i<arr.length;i++) {
sum+=arr[i];
}
return sum;
}
}