第三节 方法
3.1方法的定义及简单使用
public class people {
/*
* 最简单的一个方法定义
*/
void speak() {
System.out.println("我叫张三");
}
public static void main(String[] args) {
people zhangsan=new people();
zhangsan.speak();
}
}
/我叫张三/
public class people2 {
//形参、入参
void speak(String name) {
System.out.println("我叫"+name);
}
public static void main(String[] args) {
people2 zhangsan=new people2();
zhangsan.speak("张三");
}
}
/我叫张三/
public class people3 {
//形参、入参
void speak(String name,int age,String...hobbies) {
System.out.println("我叫"+name+",我今年"+age+"岁了");
}
public static void main(String[] args) {
people3 zhangsan=new people3();
zhangsan.speak("张三",23);
}
}
/我叫张三,我今年23岁了/
public class people4 {
//返回类型
int speak(String name,int age,String...hobbies) {
System.out.println("我叫"+name+",我今年"+age+"岁了");
System.out.print("我的爱好:");
for(String hobby:hobbies) {
System.out.print(hobby+" ");
}
//获取爱好的长度
int totalHobbies=hobbies.length;
return totalHobbies;
}
public static void main(String[] args) {
people4 zhangsan=new people4();
int n=zhangsan.speak("张三",23,"游泳","唱歌","跳舞");
System.out.println("\n有"+n+"个爱好");
}
}
/我叫张三,我今年23岁了
我的爱好:游泳 唱歌 跳舞
有3个爱好/
3.2方法的值传递和引用传递(重点)
/*
* 三围类
*/
class SanWei{
int b;//胸围
int w;//腰围
int h;//臀围
}
public class people5 {
/*
* 报三围
* @param age 年龄
* @param sanwei
*/
void speak(int age,SanWei sanwei) {
System.out.println("我今年"+age+"岁了,我的三围是:"+sanwei.b+","+sanwei.w+","+sanwei.h);
age=24;
sanwei.b=80;
}
public static void main(String[] args) {
people5 xiaoli=new people5();
int age=23;
SanWei sanwei=new SanWei();
sanwei.b=90;
sanwei.w=60;
sanwei.h=90;
//age传递的是值,sanweiz传递的是引用(地址),c里叫指针
xiaoli.speak(age,sanwei);
System.out.println(age);
System.out.println(sanwei.b);
}
}
/我今年23岁了,我的三围是:90,60,90
23
80/
3.3方法的重载
方法重载:在同一个类中处理不同数据的多个相同方法名的多态手段。
定义:方法名称相同,但是参数的类型或者参数的个数不同。
public class Demo {
int add(int a,int b) {
System.out.print("方法一:");
return a+b;
}
/*
* 方法的重载,参数个数不一样
*/
int add(int a,int b,int c) {
System.out.print("方法二:");
return a+b+c;
}
/*
* 方法的重载,参数的类型不一样
*/
int add(int a,String b) {
System.out.print("方法三:");
return a+Integer.parseInt(b);
}
public static void main(String[] args) {
Demo demo=new Demo();
System.out.println(demo.add(1, 2));
System.out.println(demo.add(1,2,3));
System.out.println(demo.add(1,"3"));
}
}
/方法一:3
方法二:6
方法三:4/
3.4 static静态方法与普通方法
static 方法:方法属于类本身; 调用方式:1,类名.方法;2,对象.方法
普通方法: 方法属于类的对象;调用方式:1,对象.方法
public class Demo2 {
void fun1() {
System.out.println("这是一个普通方法");
}
static void fun2() {
System.out.println("这是一个静态方法");
}
public static void main(String[] args) {
Demo2 demo2=new Demo2();
//调用普通方法 对象,方法
demo2.fun1();
//调用静态方法 类名,方法
Demo2.fun2();
//调用静态方法 对象,方法
demo2.fun2();
}
}
/这是一个普通方法
这是一个静态方法
这是一个静态方法/
3.5 递归方法
public class Demo3 {
/*
* 非递归
*/
static long notDiGui(int n) {
long result=1;
for(int i=1;i<=n;i++) {
result=result*i;
}
return result;
}
/*
* 递归
*/
static long diGui(int n) {
if(n==1) {
return 1;
}
return diGui(n-1)*n;
}
public static void main(String[] args) {
System.out.println("非递归:"+Demo3.notDiGui(5));
System.out.println("递归:"+Demo3.diGui(5));
}
}
/非递归:120
递归:120/
作业:
1,用递归实现斐波那契数列1、1、2、3、5、8、13、21、……
F(1) = 1, F(2) = 1
F(N) = F(N - 1) + F(N - 2)
public class Demo4 {
static long diGui(int n) {
if(n==1) {
return 1;
}
if(n==2) {
return 1;
}
return diGui(n-1)+diGui(n-2);
}
public static void main(String[] args) {
System.out.println(Demo4.diGui(1));
}
}