这是我作为一个还未毕业的小菜鸟的自学笔记,慎看!(当然如果有前辈指出我的错误我是非常感谢的哦~)
使用方法的注意事项
1、方法定义的顺序无所谓
2、返回值是void类型的,最后一行的“return;”可以省略不写
3、一个方法中可以有多个return语句,但是不可以同时执行
方法重载
方法重载:方法名称相同,但是参数列表不一样。
参数列表不同:
- 参数个数不同
- 参数类型不同
- 多参数类型的顺序不同
注意:方法重载与返回值类型和修饰符无关!!
数组
数组的三个特点:
1、数组是一种引用数据类型
2、一个数组只能存放同一种数据类型
3、数组的长度一旦定义就不可以改变
定义数组的两种种方式及简化方式:
-
动态初始化:数据类型[] 数组名 = new 数据类型[数组长度]
-
静态初始化:数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, …}
-
静态初始化的省略格式:数据类型[] 数组名 = {元素1, 元素2, …}
注意:
- 其中省略格式不可以分成两部分来写,其他的可以;静态初始化时也会有自动分配默认值的步骤,但是很快就分配了给定的值。
- 如果直接打印数组名,得到的结果是数组内存地址的哈希值
- 如果一个方法要返回多个值,可以用数组做为其返回值类型 (任何数据类型都可作为方法的返回值类型或者是参数类型)
Java内存划分的五个部分
Java中内存划分为5个部分:
-
栈(Steak):存放的都是方法中的局部变量,且方法的运行一定要在栈中运行
局部变量:方法的参数,或者时方法体中的变量,一旦超出作用域就会从栈内存中消失。 -
堆(heap):凡是new出来的东西都在堆内存中
堆中的东西都有一个地址值:16进制
堆内存中的数据都有默认值:
整数 —> 0
浮点数 —> 0.0
字符 —> ‘\u0000’
布尔型 —> false
引用类型 —> null -
方法区:存储.class的相关信息,包含方法的信息
-
本地方法栈:与操作系统相关
-
寄存器:与CPU相关
两个数组的内存图:
(此图源自于学习视频的截图)
面向对象
面向过程:每一个步骤都要自己亲历亲为,自己来做
面向对象:不关心具体的步骤,利用已经有的方法来帮自己实现功能
类
Java中类的定义:
普通事物的要素:属性(是什么)、行为(可以做什么)
Java中的类:成员变量 —> 属性
成员方法 —> 行为
注意:
1、成员变量定义在类中,而不是方法中
2、成员方法没有关键字static
类的使用:
通常情况下,一个类不可以直接使用,要创建一个对象才可以使用,三个步骤:导包、创建、使用:
1、导包
指出当前需要使用的类在什么位置,如果需要使用的类和自己在同一个包中则不需要导包
格式: import 包名.类名;
2、创建
类名 对象名 = new 类名();
3、使用
对象名.成员变量名 对象名.成员方法名
注意:
- 如果成员变量没有赋值,将会有一个默认值
- new出的对象在堆内存中,对象的成员方法保存的是类中的成员方法地址(类的信息在方法区中)
( 该图片来自学习视频的截图) - 两个对象使用同一方法,但是互不干扰
(该图片来自学习视频的截图)
- 两个引用指向同一对象的内存图:
(该图片来自学习视频的截图)
使用对象类型作为方法参数,实际上传入的是此对象的地址
使用对象类型作为方法的返回值,返回的其实就是该对象的地址值
(该图片源自学习视频的截图)
局部变量和成员变量的区别:
- 定义的位置不一样:
局部变量:在方法的内部
成员变量:在方法外部,直接写在类中 - 作用范围不一样:
局部变量:只有在方法中才可以使用,出了方法就消失了
成员变量:在整个类中都可以使用 - 默认值不一样:
局部变量:没有默认值,必须要赋值才可以使用(注意:方法的参数也是局部变量但是方法参数有默认值)
成员变量:有默认值 - 内存位置不一样
局部变量:位于栈内存中
成员变量:位于堆内存中 - 生命周期不一样
局部变量:随着方法进栈而产生,随着方法出栈而消失
成员变量:随着对象创建而产生,随着对象被回收而消失
关键字this的使用
当方法的局部变量和类的成员变量重名的时候,根据就近原则使用局部变量,如果需要访问本类中的成员变量,需要使用this.成员变量名(通过哪个对象调用的方法,哪个对象就是this)
定义一个成员方法sayHello():
在main方法中调用刚刚创建的成员方法:
结果:
构造方法
构造方法是专门用来创建对象的方法,当我们用new创建对象时,其实就是调用了构造方法。
格式:public 类名(){ 方法体 }
注意:
- 构造方法名必须与类名一致,且无返回值,构造方法中不能有return
- 如果没有写构造方法,编译器会自动赠送一个无参无方法体的构造方法,一旦自己写了一个构造方法,那么编译器将不会赠送
- 构造方法可以重载