方法是什么
方法是一种语法结构,可以把代码封装成一个功能,以便于方法重复调用。
方法的好处
- 提高了代码的复用率
- 让程序逻辑更加清晰
方法定义的形式
方法的调用格式
这里需要强调,因为定义的返回值类型是int所以有返回值,且返回值必须是int类型,如果返回值类型是double,那么返回值就必须是double类型,如果返回值类型是void那么就没有返回值。
方法格式的注意点
package 方法;
import java.util.Scanner;
public class way {
public static void main(String[] args) {
isEvenNumber();
}
// 定义一个方法判断一个数是否是偶数。
public static void isEvenNumber(){
Scanner sc = new Scanner(System.in);
System.out.println("please input number");
int num = sc.nextInt();
if(num % 2 == 0){
System.out.println(true);
}else {
System.out.println(false);
}
}
}
案例:设计一个方法用于打印三个数中较大的数
package 方法;
import java.util.Scanner;
public class way {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("please input");
int a = sc.nextInt();
System.out.println("please input");
int b = sc.nextInt();
System.out.println("please input");
int c = sc.nextInt();
getmax(a,b,c);
}
// 定义一个方法用于打印较大的数
public static void getmax(int a,int b,int c){
int middle = a > b ? a:b;
int max = middle >c ? middle:c;
System.out.println(max);
}
}
形参与实参
形参:方法定义中的参数 等同于变量定义格式,例如:int number
实参:方法调用中的参数等同于使用变量或常量,例如: 10 number
带返回值方法的定义和调用
package 方法;
import java.util.Scanner;
public class way {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("please input");
int a = sc.nextInt();
System.out.println("please input");
int b = sc.nextInt();
System.out.println("please input");
int c = sc.nextInt();
int max = getmax(a,b,c);
System.out.println("最大值为" + max);
}
// 定义一个方法用于打印较大的数
public static int getmax(int a,int b,int c){
int middle = a > b ? a:b;
int max = middle >c ? middle:c;
// System.out.println(max);
return max;
}
}
package 方法;
public class way2 {
public static void main(String[] args) {
int a = 10;
int b = 20;
boolean res = iseven(a,b);
System.out.println(res);
}
public static boolean iseven(int a,int b){
if (a == b){
return true;
}else {
return false;
}
}
}
方法使用的常见问题
方法不能嵌套定义
void表示无返回值,可以省略return,也可以单独的书写return,后面不加数据
package 方法;
import java.util.Scanner;
public class way2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("please input n:");
int n = sc.nextInt();
int all = sum(n);
System.out.println("sum is "+all);
}
public static int sum(int n){
int sum = 0;
for(int i = 0;i < (n+1);i++){
sum += i;
}
return sum;
}
}
package 方法;
import java.util.Scanner;
public class way2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("please input n:");
int n = sc.nextInt();
// int all = sum(n);
// System.out.println("sum is "+all);
boolean bool = jiou(n);
if(bool == true){
System.out.println(n + "是偶数");
}else {
System.out.println(n + "是奇数");
}
}
public static int sum(int n){
int sum = 0;
for(int i = 0;i < (n+1);i++){
sum += i;
}
return sum;
}
public static boolean jiou(int a){
if(a % 2 == 0){
return true;
}else {
return false;
}
}
}
方法的调用流程
以上图为例,再方法执行时候,先执行Test,随后执行sum方法,最后执行方法add。再执行方法add时候,传入实参10与20,调用方法将其传入并执行,最终执行输出语句。
以上图为例,方法之间是平级的,可以相互调用,再方法区,先执行mian语句,调用方法study语句;其中study方法中,先执行eat语句,再执行输出语句,最后执行sleep语句;执行完毕。
方法的运行区域在哪里?:栈内存。
Java的参数传递机制–值传递
重点:java传递的不是变量本身,是变量中存储的数值,如果是数组的话就是传递数组的地址
package 方法;
public class way3 {
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 = 20;
System.out.println(a); // 20
}
}
这里最初我们定义的整型形参10,传入change中,传入的不是变量的本身,而是一个拷贝值,所以change中的第一个输出是10,经过赋值后输出20,change执行完毕,注意这时候a的实际数值并没有变换,还是10,因为刚才改变的只是形参的一个拷贝值。
引用类型的参数传递
package 方法;
public class way3 {
public static void main(String[] args) {
int a = 10;
// change(a);
// System.out.println(a); // 10
int [] arr = {1,2,3,4};
System.out.println(arr[1]); // 2
change(arr); // 200
System.out.println(arr[1]);
}
public static void change(int a){
System.out.println(a); // 10
a = 20;
System.out.println(a); // 20
}
// 方法复用;后面介绍。
public static void change(int[] arr){
arr[1] = 200;
}
}
再讲解这道题目之前,还是先介绍一下区别:
System.out.println()这种语法默认是对输入的数据进行换行;而System.out.print()不会对数据进行换行。
package 方法;
public class way4 {
public static void main(String[] args) {
int[] arr = {15,50,58,90,45};
ArrayDemo(arr);
}
public static void ArrayDemo(int[] arr){
if (arr != null && arr.length>0){
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.println("]");
}else {
System.out.println("您输入的数据有误!!!");
}
}
}
package 方法;
import org.w3c.dom.ls.LSOutput;
public class way4 {
public static void main(String[] args) {
int[] arr = {15,50,58,90,45};
int[] arr1 = null;
// ArrayDemo(arr1);
// getindex(arr1,85); // the arr has some problem
int index = getindex(arr,100);
System.out.println("您输入的元素的索引是" + index);
}
public static int getindex(int[] arr,int index){
if(arr != null && arr.length > 0){
for (int i =0;i < arr.length;i++){
if(arr[i] == index){
return i;
}
}
System.out.println("查无此数,默认返回-1");
}else {
System.out.println("the arr has some problem");
}
return -1;
}
package 方法;
import org.w3c.dom.ls.LSOutput;
public class way4 {
public static void main(String[] args) {
int[] arr1 = {15,50,58,90,45};
int[] arr2 = {15,50,58,90,45};
int[] arr3 = null;
int[] arr4 = {};
boolean x = compare(arr1,arr4);
System.out.println(x);
}
public static boolean compare(int[] arr1,int[] arr2){
if ( (arr1 != null) && (arr2 != null) &&(arr1.length >0) && (arr2.length > 0)&&(arr1.length == arr2.length)){
for(int i = 0;i < arr1.length;i++){
if(arr1[i] == arr2[i]){
return true;
}else {
return false;
}
}
}
return false;
}
public static int getindex(int[] arr,int index){
if(arr != null && arr.length > 0){
for (int i =0;i < arr.length;i++){
if(arr[i] == index){
return i;
}
}
System.out.println("查无此数,默认返回-1");
}else {
System.out.println("the arr has some problem");
}
return -1;
}
public static void ArrayDemo(int[] arr){
if (arr != null && arr.length>0){
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.println("]");
}else {
System.out.println("您输入的数据有误!!!");
}
}
}
方法重载
可读性好,方法名称相同提示是同一类型的功能,通过形参不同实现功能差异化的选择,这是一种专业的代码设计。
package 方法;
public class way5 {
public static void main(String[] args) {
fire();
fire("xxxx");
fire("xxxx",5);
}
public static void fire(){
System.out.println("##################");
}
public static void fire(String location){
System.out.println("默认向"+location+"发射一枚##");
}
public static void fire(String location,int num){
System.out.println("默认向"+location+"发射"+num +"枚##");
}
}
方法重载的识别技巧
方法重载举例:
package 方法;
public class way6 {
public static void main(String[] args) {
}
// 新方法
public static void open(){}
// 方法重载
public static void open(int a){}
// 方法重载
public static void open(int a ,int b){}
// 方法重载
public static void open(int a,double b){}
// 新方法
public static void OPEN(){}
}
return关键字
package 方法;
public class way6 {
public static void main(String[] args) {
chu(10,0);
}
public static void chu(int a,int b){
if (b == 0){
System.out.println("输入有误,分母不能为0");
return;
}else {
int c = a / b;
System.out.println("a / b = "+ c);
}
}
}