Java方法
何谓方法
方法就是语句的集合,在一起剋以在执行一个功能。
方法的命名规则,首字母小写+驼峰规则。
方法包含于类或对象中。
方法在程序中被创建,在其他地方被引用。
设计方法原则:一个方法只完成一个功能,保持方法的原子性,有利于后期的扩展。
方法的定义与调用
修饰符 返回值类型 方法名(参数类型 参数名字){
...
方法体
...
return 返回值
}
修饰符:public 、static、final、private...可选
返回值类型:没有返回值用void。如果有返回值,用return。
参数类型:参数可选。实参:调用该方法时,实际传递的参数。形参:定义方法时随便编的参数。
public static void main(String[] args) {
int sum=add(1,2);
System.out.println(sum);
}
public static int add(int a,int b){
return a+b;
}
}
a,b是形参,1,2是实参。
方法体:方法中包含的具体语句,定义该方法的功能。
关于return
我写的代码,输出结果为空的,啥也没有。
public static void main(String[] args) {
max(1,2);
}
public static int max(int a ,int b){
if(a>b){
return a;
}else if(a<b){
return b;
}else {
System.out.println("a和b一样大");
return 0;
}
正确的代码:
public static void main(String[] args) {
int m=max(1,2);
System.out.println(m);
}
public static int max(int a ,int b){
int result=-1;
if(a>b){
result= a;
}else if(a<b){
result= b;
}else {
System.out.println("a和b一样大");
return 0;
}
return result;
}
return除了有返回返回值之外,还有终止程序的意思;
方法支持两种调用方式:根据方法是否有返回值来选择:
当方法返回一个值的时候,方法调用通常被当作一个值,如:
int m=max(10,20);
system.out.println(m);
如果方法返回值是void,方法调用一定是一条语句。
system.out.println("hello,IGOT7");
调用方法:对象名.方法名(实参列表)
值传递:Java是值传递。【拷贝】值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。
引用传递: 引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身。
方法重载
重载就是在一个类中,有相同的函数名称,但形参不同的函数。
重载规则:
方法名称必须相同;参数列表必须不同(个数不同、或类型不同、参数排列顺序不同);方法的返回值类型可以相同也可以不相同;仅仅是返回类型不同不足以成为方法的重载。
命令行传参
希望运行一个程序的时候再传递消息,要靠传递命令行参数给main()函数实现。
在命令行传递参数。
可变参数
Java支持传递同类型的可变参数给一个方法。
在方法声明中,在指定参数类型后加一个省略号…
一个方法中只能指定一个可变参数,它必须是方法的最后一个参数,任何普通的参数必须在他之前声明。
public static void main(String[] args) {
Demo04 d=new Demo04();
d.test(1);
}
public void test(int ...i){
System.out.println(i[0]);
}
递归
A方法调用A方法,就是递归。就是用有限的语句来定义对象的无限集合。
递归包括:
递归头:定义了什么时候有不调用自身的方法,没有头会进入死循环。
递归体:什么时候需要调用自身方法。
public static void main(String[] args) {
System.out.println(f(3));
}
public static int f(int n){
if(n==1){
return 1;
}else {
return n*f(n-1);
}
}
实现简易计算器:
要求练习到循环、switch、方法调用。
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
double a=scanner.nextDouble();
String op=scanner.next();
double b=scanner.nextDouble();
double r=0;
while(scanner.hasNext()){
switch (op){
case "+":
r=add(a,b);
break;
case "-":
r=subtract(a,b);
break;
case "*":
r=multiply(a,b);
break;
case "/":
r=divide(a,b);
break;
}
System.out.println(r);
}
}
public static double add(double a,double b){
return a+b;
}
public static double divide(double a,double b){
return a/b;
}
public static double subtract(double a,double b){
return a-b;
}
public static double multiply(double a,double b){
return a*b;
}
错误:没有实现持续输入处理。
修改后:
package javademo;
import java.util.Scanner;
public class Demo04 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
while(scanner.hasNext()){
double a=scanner.nextDouble();
String op=scanner.next();
double b=scanner.nextDouble();
double r=0;
switch (op){
case "+":
r=add(a,b);
break;
case "-":
r=subtract(a,b);
break;
case "*":
r=multiply(a,b);
break;
case "/":
r=divide(a,b);
break;
}
System.out.println(r);
}
}
public static double add(double a,double b){
return a+b;
}
public static double divide(double a,double b){
return a/b;
}
public static double subtract(double a,double b){
return a-b;
}
public static double multiply(double a,double b){
return a*b;
}
}