java OOP

本文详细介绍了Java中的方法参数传递机制,包括基本类型和引用类型的差异,以及方法重载的概念与应用。同时,讨论了可变参数的使用,并通过实例展示了递归计算和斐波那契数列的实现。此外,还探讨了对象数组的创建与使用,强调了避免空指针异常的重要性。
摘要由CSDN通过智能技术生成

java Integer.toHexString()十进制转成十六进制

引用数据类型 调用 toString() 输出的 是什么? 类型名@16进制哈希值

引用数据类型 打印 的 是 object的 toString();

方法参数的值传递机制

方法的参数传递机制:实参给形参赋值,那么反过来形参会影响实参吗?

  • 方法的形参是基本数据类型时,形参值的改变不会影响实参;
  • 方法的形参是引用数据类型时,形参地址值的改变不会影响实参,但是形参地址值里面的数据的改变会影响实参,例如,修改数组元素的值,或修改对象的属性值。
    • 注意:String、Integer等特殊类型容易错

方法重载Overload

方法重载:同一个类中(本类声明的或继承自父类的)的方法,方法名相同,参数列表不同的情况,这就叫方法重载。

参数列表不同:指的是参数个数不同,数据类型不同,数据类型顺序不同。

注意:与方法的返回值类型无关

案例:用重载实现:

(1)定义方法求两个整数的和

(2)定义方法求三个整数的和

(3)定义方法求两个小数的和

(4)定义方法求一个小数与一个整数的和

可变参数

在JDK1.5之后,如果我们定义一个方法时,此时某个形参的类型可以确定,但是形参的个数不确定,那么我们可以使用可变参数。

格式:

【修饰符】 返回值类型 方法名(【非可变参数部分的形参列表,】参数类型... 形参名){ }

注意:

(1)一个方法最多只能有一个可变参数

(2)如果一个方法包含可变参数,那么可变参数必须是形参列表的最后一个

注意: 这两个方法一样,不叫重载,只能定义一个,都定义会报错,只能改变方法名

`

public int add(int a,int... arr){
    int sum = a;
    for (int i = 0; i < arr.length; i++) {
        sum += arr[i];
    }
    return sum;
}
public int add2(int a,int[] arr){
    int sum = a;
    for (int i = 0; i < arr.length; i++) {
        sum += arr[i];
    }
    return sum;
}

递归 Recursion

  • 递归:指在当前方法内调用自己的这种现象。

递归的分类:递归分为两种,直接递归和间接递归。

直接递归称为方法自身调用自己。

间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。

注意事项:

    • 递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。(无穷递归,类似死循环)

在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。

  1. 示例一:计算1-100之间所有自然数的和

循环实现:

//循环实现
public class RecursionMethod1{
    public static void main(String[] args) {
        int sum = sum(100);
        System.out.println("1-100的和:" + sum);
    }

//递归实现
public class RecursionMethod1{
	public static void main(String[] args) {
		int sum = sum(100);
		System.out.println("1-100的和:" + sum);
	}

	public static int sum(int n){
		if(n == 1){
			return 1;
		}else{
			return n + sum(n-1);
		}
	}
}

递归实现:斐波那契数列。

public class RecursionMethod3{
	public static void main(String[] args) {
		Count c = new Count();
		
		System.out.println("f(10):" + c.f(10));
		System.out.println("f方法被调用的总次数:" + c.total);
	}
}
class Count{
	int total = 0;
	public int f(int n){
		total++;
		if(n <= 1){
			return 1;
		}else{
			return f(n-2) + f(n-1);
		}
	}
}

猴子偷

/*-描述:猴子吃桃子问题,猴子第一天摘下若干个桃子,当即吃了所有桃子的一半,还不过瘾, 又多吃了一个。第二天又将仅剩下的桃子吃掉了一半,又多吃了一个。 以后每天都吃了前一天剩下的一半多一个。到第十天,只剩下一个桃子。 试求第一天共摘了多少桃子? 

public static int peaches(int num){
    if(num == 1){
        return 1;
    }else{
        return (peaches(num-1)+1)*2;
    }
}

对象数组

数组是用来存储一组数据的容器,一组基本数据类型的数据可以用数组装,那么一组对象也可以使用数组来装。

即数组的元素可以是基本数据类型,也可以是引用数据类型。当元素是引用数据类型时,我们称为对象数组。

注意:对象数组,首先要创建数组对象本身,即确定数组的长度,然后再创建每一个元素对象,如果不创建,数组的元素的默认值就是null,所以很容易出现空指针异常NullPointerException。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值