Java 对象与引用 绝对理解!(初学者必看)

首先

什么是对象:是类的实例化。是一组相关数据的组织单位(状态)围绕这组数据的各种操作(方法)

【数据(属性)有两种类型:基本类型和引用类型】

什么又是引用?:用来操作对象。

基本要点【以下图片内容○代表“引用”,□代表“对象”】

1·引用指向对象

a.同一时刻,要么指向对象,要
么不指向对象(null)
b.对象不能指向引用,也没有对
象指向对象一说。
在这里插入图片描述
在这里插入图片描述
可以将引用理解为《火影忍者》中的傀儡术,勘九郎利用查克拉线来控制蝎的傀儡,使其发动攻击。引用—>勘九郎使用查克拉线,对象就是—>蝎。

2、引用支持的运算符有哪些?

仅有:【a.赋值运算符“=” ,b.比较运算符 “==、!=”】这三个运算符。

3、解引用运算符

通过引用操作对象——来获取对象中的值/修改对象中的数据。
例:int [] a=new int []{1,2,3,4}
“.”:通过a.length来获取a所指向对象的长度。
“[ ]”:通过a[0]来获取a所指向对象第零号下标的值:1。
在这里插入图片描述
切记:如果解引用时,引用不指向任何对象(null),就会报错。例如:a指向null时,a.length,会出现NullpointerException“索引越界”的异常提示。

4、引用具备“共享”的特性

eg:long [] a={1,2,3,4,5};
long [] b=a //让a、b指向同一个对象。
a[0]=99; //通过a解引用修改了对象中的数据
System.out.println(b[0])显示出的是什么值? 答案:99

解析:因为a与b同时指向同一个对象,通过a解引用修改对象数据后,再通过b对其对象数据进行获取,获取得到的结果就是99。

初步了解之后,让我们通过二维数组来深入了解对象与引用。

【预备知识:java中的数据类型(2种)1、基本数据类型(byte/short/int/long/char/float/double/boolean)2、引用数据类型】
数组:long []是引用类型,所有的数组类型都是引用类型。数组的元素,长度信息都放在对象中(数组对象)

long []a=null;在这里插入图片描述
a=new long[]{1,2,3,4,5};
在这里插入图片描述
long []b=a;
在这里插入图片描述
long[][] a=null

long[][] a=new long[5][ ]:定义了一个元素类型是long[](引用类型)的数组,数组长度是5。
在这里插入图片描述
补充知识:【变量的默认值:是零的变形】
数值类型 默认值——0
boolean 默认值——false
引用类型 默认值——null

eg:long[]a=new long[5];默认数组对象中的元素是0;
此时long[][]a=new long[5][];理解为:默认数组对象中的元素是long[],该数组长度是5;
所以,a[0]=a[1]=a[2]=a[3]=a[4]=null,即所有的元素(引用)不指向任何对象。

想一想:
a[0][0]=10,执行该操作时,会发生什么?

解析:通过a引用,找到其指向的对象。
a[0]得到其下标为0的元素——long[]——不指向任何对象
所以通过a[0][0]找到其指向对象的元素,将其修改为10,会报错!是因为a[0]==null,所以无法进行对指向空的引用进行解引用。

接下来再通过几个例子来深入理解一下:

例1:试画出以下改动后的图:
a[0]=new long[3];
a[1]=new long[3];
a[1][2]=99;
在这里插入图片描述

例2:画出如下二维数组的效果图
在这里插入图片描述
答案:
在这里插入图片描述
拓展问题:
long [] t=a[2];
a[2]=a[3];
a[3]=t;
System.out.println(Arrays.toString(t));
结果的效果图:
在这里插入图片描述

谢谢大家观看,若有知识点错误请评论中指出,谢谢!

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
分治和递归算法是计算机科学的两种重要算法思想,它们可以帮助我们解决很多复杂的问题。下面我介绍一下这两种算法以及它们在Java的实现。 1. 分治算法 分治算法是指将一个大问题分成若干个小问题,然后逐个解决这些小问题,最后将所有小问题的解合并起来得到大问题的解。分治算法通常采用递归的方式来实现。 Java代码示例: ```java public int divideAndConquer(int[] nums, int left, int right){ if(left == right) return nums[left]; // 如果数组只有一个元素,则直接返回该元素 int mid = (left + right) / 2; // 将数组分成两部分 int leftSum = divideAndConquer(nums, left, mid); // 递归求解左半部分的和 int rightSum = divideAndConquer(nums, mid + 1, right); // 递归求解右半部分的和 return leftSum + rightSum; // 合并左右两部分的和 } ``` 上面的代码实现了求解一个数组所有元素的和的问题。首先将数组分成两部分,然后递归地求解左右两部分的和,最后将左右两部分的和合并起来得到整个数组的和。 2. 递归算法 递归算法是指在函数的定义调用自身的算法。递归算法通常用于解决具有递归结构的问题,比如树和图等数据结构。递归算法需要满足两个条件:基本情况和递归情况。 Java代码示例: ```java public int fibonacci(int n){ if(n <= 1) return n; // 基本情况 return fibonacci(n-1) + fibonacci(n-2); // 递归情况 } ``` 上面的代码实现了求解斐波那契数列的第n项的值的问题。斐波那契数列的第一项和第二项都是1,从第三项开始,每一项都是前两项的和。递归算法,基本情况是当n小于等于1时直接返回n,递归情况是求解前两项的和,然后递归求解前两项的每一项。 希望这些示例代码能够帮助你理解分治和递归算法的基本思想和Java实现方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值