Java数组内存分配;数组常见报错;面向对象;类;局部变量和成员变量;封装;this;构造方法

本文详细阐述了Java中数组的内存分配、异常处理、长度获取以及遍历方法。同时,介绍了面向对象编程的基本概念,如类、对象、成员变量和方法,强调了封装、继承和多态的重要性。此外,还讲解了方法参数传递、构造器的使用以及this关键字的含义和应用。
摘要由CSDN通过智能技术生成

Java数组内存示意图

两个数组内存分配方式:

在这里插入图片描述

两个数组引用指向同一个数组内存:

在这里插入图片描述
如果访问数组元素的时候,索引编号并不存在,那么将会发生数组索引越界异常ArrayIndexOutOfBoundsException
原因: 索引编号写错了。
解决: 修改编号。

所有的引用类型变量,都可以赋值一个null值,代表其中什么都没有。
数组必须进行new初始化才能使用其中的元素。
如果只是赋值一个null,没有进行new创建,
那么将会发生
空指针异常:NullPointerException
原因:忘记了new
解决:补上new

如何获取数组的长度

格式:

数组名称.length

这将会得到一个int数字,代表数组的长度。
数组一旦创建,程序运行期间,长度不可改变。

遍历数组:说的就是对数组当中的每一个元素进行逐一、挨个儿处理。默认的处理方式就是打印输出。
数组的遍历简写形式

数组名.fori     
例如数组名为:Array1.
Array1.fori
展开后的形式:
for (int i = 0; i < Array1.length; i++) {   
}

数组可以作为方法的参数:
当调用方法的时候,向方法的小括号进行传参,传递进去的其实是数组的地址值。
一个方法可以有0,1,多个参数;但是只能有0或者1个返回值,不能有多个返回值。
如果希望一个方法当中产生了多个结果数据进行返回,怎么办?
解决方法: 使用一个数组作为返回值类型即可。
数组作为方法的参数、返回类型:
任何数据类型都能作为方法的参数类型,或者返回值类型。
数组作为方法的参数,传递进去的其实是数组的地址值。
数组作为方法的返回值,返回的其实也是数组的地址值。
如果需要返回多个数值时,可以使用数组作为返回值。

完成一个项目(或功能)的思路:

1、根据问题需求,选择问题所针对的现实世界中的实体。
2、从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类。
3、把抽象的实体用计算机语言进行描述,形成计算机世界中的定义。即借助某种程序语言,把类构造成计算机能够识别和处理的数据结构。
4、将类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具。

面向对象:

面向对象:当需要实现一个功能的时候,不关心具体的步骤,而是找一个已经具有该功能的人,来帮我做事儿。

System.out.println();的简写 “sout”

在字符与字符相加时,一定要使用双引号“”;
例如:

System.out.print(arr[i]+",");

单引号是错误的,单引号是字符,字符与数值相加会得到int型数据。
面向对象的三大特征:封装、继承和多态。
理解“万事万物皆对象”??
1、在Java语言范畴中,我们都将功能、结构等封装到类中,通过类的实例化,来调用具体的功能结构。
2、涉及到Java语言与前端HTML、后端的数据库交互时,前后端的结构在Java层面交互时,都体现为类、对象。

什么是类

类: 是一组相关属性和行为的集合。可以看出是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。
现实中,描述一类事物:
属性: 就是该事物的状态信息。
行为: 就是该事物能够做什么。

类与对象的关系

1、类是对一类事物的描述,是抽象的。
2、对象是一类事物的实例,是具体的。
类是对象的模板,对象是类的实体。

类的成员

成员变量(属性)别名:field;域、字段:
成员方法(行为)别名:函数;method:
成员方法当中不能有“static”。例如:public void eat(){}
定义类注意事项:
1、成员变量是直接定义在类当中的,在方法外边。
2、成员方法不要写static关键字。

通常情况下,一个类并不能直接使用,需要根据类创建一个对象,才能使用。

使用方法步骤:

1、导包:也就是指出需要使用的类,在什么位置。

import 包名称.类名称;

对于和当前类属于同一包的情况,可以省略导包语句不写。
2、创建
格式:

类名称 对象名 = new 类名称()

3、使用,分两种情况:
使用成员变量

对象名.成员变量名

使用成员方法

对象名.成员方法名(参数)

(也就是,想用谁,就用对象点谁。)
注意事项:
如果成员变量没有进行赋值,那么将会有一个默认值,规则和数组一样。

一个对象的内存图:

在这里插入图片描述

两个对象使用同一个方法内存图

在这里插入图片描述

两个引用指向同一个对象的内存图

在这里插入图片描述

对象作为参数进行传参的内存图

在这里插入图片描述

自定义类作为返回值内存图

在这里插入图片描述

局部变量和成员变量:

**局部变量:**声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量。

1、定义的位置不一样【重点】

局部变量: 在方法的内部。
成员变量: 在方法的外部,直接写在类当中。

2、作用范围不一样【重点】

局部变量:只有方法当中才可以使用,出了方法就不能再用了
成员变量:整个类全部都可以通用。

3、默认值不一样【重点】

局部变量:没有默认值,如果要想使用,必须手动进行赋值,特别地:形参在调用时赋值即可。
成员变量:如果没有赋值,会有默认值,规则和数组一样。
方法的参数就是局部变量;参数在方法调用的时候,必然会被赋值的。
4、内存的位置不一样(了解)
局部变量:位于栈内存
成员变量:位于堆内存
5、生命周期不一样(了解)
局部变量:随着方法进栈而诞生,随着方法出栈而消失。
成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失。
6、权限修饰不同
成员变量:可以在声明属性时,指明其权限,使用权限修饰符。
局部变量:不可以使用权限修饰符的。

关于变量赋值:

1、如果变量是基本数据类型,此时赋值的是变量所保存的数据值。
2、如果变量是引用数据类型,此时赋值的是变量所保存的数据的地址值。

方法的形参的传递机制,值传递

1、形参:方法定义时,声明的小括号内的参数。
实参:方法调用时,实际传递给形参的数据。
2、值传递机制:
如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值。
如果参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值。

封装

面向对象三大特征:封装、继承、多态。
封装性在Java当中的体现:
1、方法就是一种封装。
2、关键字private也是一种封装
一旦使用了private进行修饰,那么本类当中仍然可以随意访问。
但是!超出了本类范围之外就不能再直接访问。

间接访问private成员变量,就是定义一对Getter/Setter方法
必须名命为setXxx或者是getXxx命名规则。
对于Getter来说,不能有参数,返回值类型和成员变量对应。
对于Setter来说,不能有返回值,参数类型和成员变量对应。
对于基本类型当中的boolean值,Getter方法一定要写成isXxx的形式,而setXxxx规则不变。

我们程序设计追求“高内聚,低耦合”。
高内聚:类的内部数据操作细节自己完成,不允许外部干涉;
低耦合:仅对外暴露少量的方法用于使用。

拓展:封装性的体现:①对类的成员变量进行私有化操作;②不对外暴露的私有的方法;③单例模式…

this关键字

当方法的局部变量和类的成员变量重名的时候,根据”就近原则“,优先使用局部变量。
如果需要访问本类中的成员变量,需要使用格式:this.成员变量名。
”通过谁调用的方法,谁就是this.“
this只能写在方法当中。

1、this可以用来修饰、调用:属性、方法、构造器
2、this修饰属性和方法:

this理解为:当前对象或当前正在创建的对象。
在类的方法中,我们可以使用"this.属性"或“this.方法”的方式,调用当前对象属性或方法,但是。通常情况下,我们都选择省略“this.”。特殊情况下,如果方法的形参和类的属性同名时,我们必须显式的使用"this.变量"的方式,表明此变量是属性,而非形参。
3、this调用构造器
①我们在类的构造器中,可以显示的使用“this(形参列表)”方式,调用本类中指定的其他构造器
②构造器中不能通过“this(形参列表)”方式调用自己。
③如果一个类中有n个构造器,则最多有n-1构造器中使用了“this(形参列表)”。
④规定:“this(形参列表)”必须声明在当前构造器的首行。
⑤构造器内部,最多只能声明一个“this (形参列表)”,用来调用其他的构造器。

构造方法

构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法。
构造器的作用:创建对象;给对象进行初始化。
格式:

public  类名称(参数类型  参数名称){
方法体
}

注意事项:
1、构造方法的名称必须和所在的类名称完全一样,就连大小写也要一样。
2、构造方法不要写返回值类型,连void都不写。
3、构造方法不能return一个具体的返回值。
4、如果没有编写任何构造方法,那么编译器将会默认赠送一个构造方法(构造器的权限是根据类的权限进行设置的),没有参数、方法体什么事情都不做。例如:public Student(){}.
5、一旦编写了至少一个构造方法,那么编译器将不再赠送。
6、构造方法也可以进行重载的。

一个标准的类通常要拥有下面四个组成部分:

1、所有的成员变量都要使用private关键词修饰。
2、为每一个成员变量编写一对Setter和Getter方法
3、编写一个无参数的构造方法。
4、编写一个全参数的构造方法。

这样标准的类也叫做Java Bean。

总结:

属性赋值的先后顺序
属性赋值的存在的地方:
①默认初始化
②显示初始化
③构造器中赋值
④通过方法进行赋值。
赋值的顺序:①②③④
其中①②③都只能执行一次,所以可以认为其为初始化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值