对象是什么
如何创建对象
对象的赋值
对象是什么
对象是类的一个个体,是具体的,实实在在存在的事物,它有自己的生命周期,由类可以创建出对象,对象也会消亡。
说到对象,我们就要和类已经现实中的对象拉开区别。由类可以创建对象,对象是一个个体,即具体的,而类就是具有相同的属性和功能的事物的抽象的集合,是一个抽象的概念。当然这里的对象和我们现实生活当中讲的对象是完全不一样的,这个大家也明白。
如何创建对象
其格式为: 类名 对象名 = new 类名();
其中:
1.左边的类名 对象名:定义对象的一个名字存储在栈中。
2.new:在堆中创建对象。
3.类名():构造方法,用来初始化对象的属性。
引用类型默认值:null
4.将对象的地址赋给对象名。
例如:
......
Data d = new Data();.....
.............
public class User {
public String name; //属性
int age;
public User() { //构造方法
}
对象有三种创建方式:
1、类名 对象名1 = new 类名();
2、类名 对象名2 = 对象名1;
3、public 类名 方法名(){ return 对象名2 ;} //get方法,方法名 get+属性名首字母大写
对象名3 = 方法名();
对于基本类型的定义:例如:int a =10;
1.int a :就是定义一个int类型的变量名a储存在栈当中;
2.而10代表将10赋给i。
讲到这,我来补充一下栈和堆的概念:
栈:
栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。
栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表。
栈可以用来在函数调用的时候存储断点,做递归时要用到栈!
栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
堆:
堆是一种基本的数据结构。在这里我用数组来形容,在一个二叉堆的数组中,每一个元素都要保证大于等于另外两个特定位置的元素。同时相应的,这些元素又要大于等于另外两个相应位置的元素,整个数据结构以此类推。如果我们将整个数据结构画成树状结构,就能够清晰地看出整个结构的样子。
对象的赋值
倘若“从一个对象到另一个对象”赋值,实际就是将句柄从一个地方复制到另一个地方。这意味着假若为对象使用“C=D”,那么C和D最终都会指向最初只有D才指向的那个对象。
Number n1 = new Number();
Number n2 = new Number();
n1.i = 9;
n2.i = 47;
n1=n2; //相同类的对象之间赋值
System.out.println(n1.i+" "+n2.i); //输出结果为n1.i和n2.i都为47
n1.i=27; //之后再输出n1.i和n2.i都为27
后面改变n1的同时也改变了n2!这是因为无论n1还是n2都包含了相同的句柄,它指向相同的对象(最初的句柄位于n1内部,指向容纳了值9的一个对象。在赋值过程中,那个句柄实际已经丢失;它的对象会由“垃圾收集器”自动清除)。