一、方法的定义
语句的集合,一个方法只完成一个功能。
System. out. println()
类 对象 方法
二、方法的格式
1.修饰符(可选):定义方法的访问类型
2.返回值数据类型:void表示返回空,即没有返回值;int表示返回int类型数据
3.方法名:包含方法名,参数表
4.参数类型:在定义方法时,参数是形参,形参用于在方法被调用时接受外界的数据。当方法被调用时,实际被传给方法的数据为实参。
5.方法体:定义该方法的功能
三、方法的调用
方法有两种调用方式
对象名.方法名(实参列表)
1.当方法返回一个值时,方法调用通常被当做一个值
int larger=max(10,20);
2.当方法返回值为void时,方法调用一定是一条语句
System.out.println(“hello,world”);
5)值传递(Java)和引用传递
Java都是值传递
区别
四、方法重载
1.定义:在一个类中,方法名相同,但形参不同的方法。
2.规则
1)方法名相同,参数列表不同(个数、数据类型、排列顺序)
2)返回值类型可以相同或不同,但只有返回类型不同不是方法重载
public class Demo04 {
public static void main(String[] args) {
int max1=max(1,2); //这里会根据返回是什么类型来判断调用哪一个max函数
double max2=max(1.0,2.0);
System.out.println(max1);
System.out.println(max2);
}
public static int max(int a,int b){
if (a==b){
return 0;
}
if (a>b){
return a;
}else {
return b;
}
}
public static double max(double a,double b){
if (a==b){
return 0;
}
if (a>b){
return a;
}else {
return b;
}
}
}
五、命令行传递参数
//命令行参数,在cmd中运行,接收并输出参数
public class Demo05 {
public static void main(String[] args) {
for (int i=0;i< args.length;i++){
System.out.println("第"+i+"个词为"+args[i]);
}
}
}
运行如下
#javac Demo05.java
报错:编码GBK的不可映射字符
修改为javac Demo10.java -encoding utf-8
#java Demo05
报错找不到或无法加载主类 Demo05
java.lang.NoClassDefFoundError: com/rzd/method/Demo05
于是,退回到com目录前,也就是src目录下
修改命令为java com.rzd.method.Demo05 hello world,运行成功。
六、可变参数
1.可变参数的格式为
public static void test(int... i)
2.规则:
1)在方法声明的参数列表中,在可变参数的数据类型后加...
2)一个方法只能指定一个可变参数,必须是方法的最后一个参数。
3.使用
一个可变参数
public class Demo06 {
public static void main(String[] args) {
//Demo06 demo06 = new Demo06();
//demo06.test(1,2,3);
test(1, 2, 3);
}
public static void test(int... i) {
System.out.println(i[0]);
//System.out.println(i);这里输出i的话不能输出该数组的值
}
}
调用可变参数计算数组的最大值
public class Demo06 {
public static void main(String[] args) {
max(1,23,444.0,5,6.0,77);
}
public static void max(double... d){
double result=d[0];
if (d.length==0){
System.out.println("no argument passed");
return;
}
for (int i=1;i<d.length;i++){
if (d[i]>result){
result=d[i];
}
}
System.out.println("最大值为"+result);
}
}
七、递归方法
我们可以把” 递归 “比喻成 “查字典 “,当你查一个词,发现这个词的解释中的某个词仍然不懂,于是你开始查这第二个词。第二个词里仍然有不懂的词,于是查第三个词,这样查下去,直到有一个词的解释是你完全能看懂的,那么递归走到了尽头,然后你开始后退,逐个明白之前查过的每一个词,最终,你明白了最开始那个词的意思。(摘自知乎的一个回答)
当我们遇到一个问题时,我们是怎么判断该题用递归来解决的?
1)子问题需与原问题为同样的事,且规模更小;
2)程序具备停止条件。
/*递归
计算阶乘:n!=1*2*3*...*(n-1)*n
f(1)=1;
f(2)=2*f(2-1)=2*f(1)=2*1
f(3)=3*f(3-1)=3*f(2)=3*2*f(2-1)=3*2*1
f(n)=n*f(n-1)
*/
public class Demo07 {
public static void main(String[] args) {
int f=f(10);
System.out.println(f);
}
public static int f(int n){
if (n<1){
return 0;
}
//停止条件
if (n==1){
return 1;
}else{
return n*f(n-1);
}
}
}