【前言】
思考源头: Java 除 8 种基本数据类型外, 剩下的都是引用数据类型。而我们平常熟知的引用类型是“字符串等等”,那“ 等等”中到底包含什么?
常见引用数据类型
百度百科:引用类型 由类型的实际值引用(类似于指针)表示的数据类型。如果为某个变量分配一个引用类型,则该变量将引用(或“指向”)原始值。不创建任何副本。
-
常见引用数据类型:String字符串、类、接口、数组。
-
引用数据类型的两种比较
- (常用) 比较两者的值是否相等——用
equals
。 - 比较两者是否指向同一个对象——用
==
。若为同一个对象则地址应相同 - 比较 a b 分别对应不同的对象,此时 a b 中的地址 一定是不同的了 ,此时比较的是对象的值 ,因此这里的比较只能用equals
- (常用) 比较两者的值是否相等——用
-
我们可以把引用当作一个指针,当创建对象并出现
new
关键字时,分配堆空间。 -
内存分为:栈,堆,方法区,方法区内的常量池。基本数据类型才是真正存放在栈中,引用数据类型的常量放在在常量池中
-
局部变量和成员变量的区别
-
定义的位置不一样
局部变量定义在方法中,成员变量定义在方法外面,类的里面 -
作用域不同
局部变量的作用域就是所定义的大括号,成员变量的作用域:在整个类中都可以使用,并且,成员变量的作用域跟变量修饰付有关系,如果修饰符不是private,在其他的类中也可以使用 -
在内存中的位置不一样
局部变量存在于栈中,会随着作用域的结束而消失,成员变量存在堆中,是和对象的生命周期相同 -
初始化不同
局部变量在使用之前一定要手动的进行初始化,而成员变量,如果没有进行手动初始化,java会给它一个默认值,
整数类型:0,long:0L,小数类型:0.0,引用类型:null
-
Java创建对象做了什么
引用数据类型又称为对象数据类型
- 将
.class
文件加载到内存的方法区。方法区中内容只有一份,且只有第一次创建对象时加载一次 - 在栈中创建一块空间——栈帧,再给对象起个名字
- 看见
new
,就在堆中开辟一块空间 - 给成员变量进行默认的初始化。
int
型为0,引用类型默认值为null
- 显示初始化(成员变量)
- 将对象的引用(指针)交给变量
创建对象 与 static的关系
- static修饰的变量称为静态变量,用static修饰的方法称为静态方法,这些变量和方法是在
.class
文件加载时进行创建的,【先于对象创建】 - 非静态的方法可以访问静态的方法或属性,反之不行
- 在静态方法中不能使用非静态的成员变量,如果想要使用,要先创该类的对象
- 静态方法也不能有this、super