Java面向对象-方法

1.定义及简单使用

(1)无参的方法

public class Student {
	
	public void speak() {
		System.out.println("我是张三");
	}
	
	public static void main(String[] args) {
		Student zhangsan=new Student();
		zhangsan.speak();
	}
}

(2)有参的方法

public class Student {
	
	public void speak(String name) {
		System.out.println("我是"+name);
	}
	
	public static void main(String[] args) {
		Student zhangsan=new Student();
		zhangsan.speak("张三");
	}
}

还可以有多个参数,用逗号隔开

public class Student {
	
	public void speak(String name,int age) {
		System.out.println("我是"+name+",我今年"+age+"岁");
	}
	
	public static void main(String[] args) {
		Student zhangsan=new Student();
		zhangsan.speak("张三",18);
	}
}

参数还可以不固定个数

public class Student {
	//String...hobbies类似于一个String类型的hobbies数组
	public void speak(String name,int age,String...hobbies) {
		System.out.println("我是"+name+",我今年"+age+"岁");
		for (String hobby : hobbies) {
			System.out.print(hobby+" ");
		}
	}
	
	public static void main(String[] args) {
		Student zhangsan=new Student();
		zhangsan.speak("张三",18,"唱歌","跳舞");
	}
}

(3)有返回值的方法

public class Student {
	//String...hobbies类似于一个String类型的hobbies数组
	public int speak(String name,int age,String...hobbies) {//返回int类型
		System.out.println("我是"+name+",我今年"+age+"岁");
		for (String hobby : hobbies) {
			System.out.print(hobby+" ");
		}
		return hobbies.length;
	}
	
	public static void main(String[] args) {
		Student zhangsan=new Student();
		int b=zhangsan.speak("张三",18,"唱歌","跳舞");//接收爱好的个数
		System.out.println("共有"+b+"个爱好");
	}
}

2.方法的值传递和引用传递

(1)方法的值传递
值传递 在方法里改变变量的值 作用范围仅仅是方法里,对外面不影响

public class Student {

	public static void speak(int age) {
		System.out.println("我今年"+age+"岁");
		age=20;// 作用范围是方法里
	}
	public static void main(String[] args) {
		Student zhangsan=new Student();
		int age=23;
		zhangsan.speak(age);
		System.out.println(age);
	}
}

运行结果
在这里插入图片描述
(2)方法的引用传递
引用传递,传递的是地址,对象里的属性在方法里值修改,对外面有影响,我们通过对象.属性可以获取到最新的数据

class SanWei{
	int b; // 胸围
    int w; // 腰围
    int h; // 腿围
}
public class Student {

	 public void speak(int age,SanWei sanwei) {
		System.out.println("我今年"+age+"岁了,我的三围是:"+sanwei.b+","+sanwei.w+","+sanwei.h);
		 sanwei.b=80; // 胸围改成80
	}
	public static void main(String[] args) {
		Student zhangsan=new Student();
		SanWei sanwei=new SanWei();
		int age=23;
		sanwei.b=90;
		sanwei.w=60;
		sanwei.h=90;
		// age传递的是值 ,sanWei是对象,传递的是引用(地址,c里叫指针)
		zhangsan.speak(age,sanwei);
		System.out.println(sanwei.b);
	}
}

运行结果
在这里插入图片描述
3.方法的重载
类里面有两个或者多个重名的方法,但是方法的参数个数、类型、顺序至少有一个不一样,这时候就构成方法重载

public class test1 {
	public static int add(int a,int b) {
		return a+b;
	}
	//参数个数引起的重载
	public static int add(int a,int b,int c) {
		return a+b+c;
	}
	//参数类型引起的重载
	public static double add(double a,int b) {
		return a+b;
	}
	//参数顺序引起的重载
	public static double add(int b,double a) {
		return a+b;
	}
	public static void main(String[] args) {
		System.out.println(add(1,2));
		System.out.println(add(1,2,3));
		System.out.println(add(1.0,2));
		System.out.println(add(1,2.0));
	}
}

:如参数个数和类型一样,返回值不一样,不能算重载。

4.静态方法与普通方法
静态方法:static修饰的方法,使用时 一般用类名.方法调用,也可以用对象.方法 调用。
普通方法:无static修饰的方法,使用时用对象.方法 调用。

public class test2 {
	public void add() {
		System.out.println("普通方法");
	}
	public static void add1() {
		System.out.println("静态方法");
	}
	public static void main(String[] args) {
		test2 t=new test2();
		t.add();//普通方法只能对象名调用
		
		test2.add1();//类名调用静态方法
		t.add1();//对象名调用静态方法
	}
}

:普通方法中可直接调用静态方法,静态方法中不可直接调用普通方法

5.递归
所谓递归,也就是方法自己调用自己

如下面求阶乘的代码

public class test3 {
	public static int digui(int n) {
		if(n==0||n==1) {//递归出口
			return 1;
		}else {//递归体
			return n*digui(n-1);
		}
	}
	public static void main(String[] args) {
		int a=digui(5);//求5的阶乘
		System.out.println(a);
	}
}

递归非常的耗时,不建议使用,一般用循坏代替。

上面求阶乘用循环实现如下

public class test4 {
	public static int xunhuan(int n) {
		int result=1;
		for (int i = 1; i <=n; i++) {
			result*=i;
		}
		return result;
	}
	public static void main(String[] args) {
		int a=xunhuan(5);
		System.out.println(a);
	}
}
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值