关键词:对象,对象引用,基本数据类型,传值
对象声明
- 定义Person类:
(为了方便说明,我们定义的类)
public class Person{
int number
String name; //对象属性;
public void setName(String name){
this.name = name;
} //对象方法;
} - 声明语句:
Person one = new Person();
那么问题来了,上述语句前后的Person是啥意思勒?都是Person对象?都是Person类?还是对象与类的组合?
语句拆分
- new Person():这一句应该最好理解,即使用new在堆内存中创建Person对象的内存空间;
- Person one :这句话其实是让程序在栈内存中创建一个名为one的Person对象的引用;
- =:将二者匹配,使得引用指向所开辟的具体空间位置。
你可以将Person one看成电视控制器, new Person()看成电视,遥控器指向电视。
对应关系
- 一个对象引用指向0-1个对象;例如
- Person one;//定义引用无指向
- Person one = new Person(); //引用指向对象空间
- 一个对象可能有0-无穷个对象引用
0指向;例如- Person one = new Person();
one = null; //失去(所有)引用指向,等待GC回收的对象实例;
- Person one = new Person();
- 多个或无穷;例如
- Person one = new Person();
Person two;
two = one; //指向同一对象空间
- Person one = new Person();
primitive类型与其他类型
java中基本数据类型包括:
- 基本类型
int number;
number = 1;(8类数据在创建不需要new等关键字开辟存储空间,且做局部变量时number在栈中存值)
System.out.print(number); //输出number的值 - 其他类型
Person one;
one = new Person();
Person.number ; //在声明引用指向后,未定义的实例变量系统默认为0或null等(依照变量类型而定,例Person.number = 0而Person.name = null)
System.out.print(one); //运行结果Person@15db9742(类名加地址值)
注:8种数据是不是对象呢,它们存在的意义在哪呢?我也理解的不是很透彻。。。。
引用传递和值传递
- 引用类型:除了在函数传值的时候是"引用传递",在任何用"="向对象变量赋值的时候都是"引用传递"。
- 值传递:*基本类型的传递都属于值传递,和C语言一样,当把Java的基本数据类型(如int,char,double等)作为入口参数传给函数体的时候,传入的参数在函数体内部变成了局部变量,这个局部变量是输入参数的一个拷贝,所有的函数体内部的操作都是针对这个拷贝的操作,函数执行结束后,这个局部变量也就完成了它的使命,它影响不到作为输入参数的变量。这种方式的参数传递被称为"值传递"。