变量、引用、引用数组和引用对象(1)

为了更好的理解这些基本概念,在这里把基本类型变量和引用类型变量做一个比较, 按惯例前者简称为引用,后者简称为变量;数组

我相信这里面的逻辑是一致的,所以假使站在引用的角度看待变量会是个什么感受?对象

int a;编译

int a = 10;class

声明一个整型变量a;容器

给a初始化为10;变量

这里实际上已经默认建立了一个类 叫作引用

public class Int{集合

};错误

这样 上面就能够陈述为 建立一个int类的对象a,把这个对象a初始化为10;由于它是Java自带的,所以不须要new,也就是新建的意思。new

新建一个类,新建一个包,实质上都是在new一个还没有存在的事物;

话说回来,当咱们新建一个非自带的类时,好比

 

public class Student{

 };

这时,想建立一个Student类的对象,则须要new

 

Student a   = new    Student( );

此时默认调了一个无参构造

public class Student{

Student( ){

}

 };

后面那个括号是参数列表容器吗(这个是我为了好理解本身捏造的概念)?说白了参数列表就是一个变量集合,也就是一个属性集,用来表征引用对象。

咱们不可能建立一个不传参的引用对象,那没有实际意义,即不实例化的建立一个对象自己是不符合逻辑的。

所以抽象类才变的有了实用的逻辑意义。

反过来再来看int,假设它也有默认无参构造也须要new

public class Int{

int(){

}

};

 

 

int a;

int a = new int( );

一对比就知道这个是没有意义的,由于int已是基本类型变量,你传参没有意义。

10 就是 10,这个整型对象10是一个基本元素。

一个Student类的对象a,不能说是a 就是10,你能说一个整数是10,但你不能说一个学生a是10;

你能够说a的年龄是10,由此我彷佛明白了引用的深层意味;

引用对象a(注意相对于基本对象 10)的属性参数并无存在栈中,栈中只是存了它,和它的地址;

它的地址就像一个路径指向堆中的变量 

咱们说a的年龄是10,名字张三,十、张三都保存在堆中。这个地址其实也是咱们本身创建的:

 

public class Student{

Student( ){

}

 };

Student a = new Student( );

 

此时仅仅是建立了一个对象a,并无初始化(没有实例化)的状态;

我认为地址就是经过两段代码创建的对应的一个路径。

即Student这个关键字,它就是一个地址关键因素,由于假使

public class Student{

Student( ){

}

 };

Teacher a = new Student( ); // 这个是要报编译错误,也就是典型的牛头对马嘴

Teacher a = new Teacher( ); /这个就跟Student无关,即创建关联路径(地址),就是风马牛不相及;

那接下来说数组。

数组也是引用,咱们知道int[ ]  a = new int[ 4 ];

是声明(建立了)一个整型数组对象a,这时 a ( a 也是一个变量)的类型就会是一个整型数组,这个数组里面包含着一些整型变量;

重点来了,当咱们给a里面的元素初始化时,咱们是这么干的,以给a的第1个元素初始化来讲!

a [ 0 ] = 10;   

注意这里不须要new,为何?由于前面已经说了,int是基本类型变量,所以不要要new;

可是!你给引用数组(int[ ]算是基本数组)初始化你就得new了并且传参,由于引用数组里面的成员是引用;

建立一个Student类的对象,则须要new

Student  a   = new    Student( );

传参了就是初始化这个a

这两步合在一块儿即声明并初始化(实例化)1个引用对象a;

声明并初始化1个基本对象就不须要new了 好比 int a = 10;

注意区分辨析概念

建立引用数组对象 和为引用数组对象中的元素赋值  都须要new  前者new个引用数组对象,后者new个引用类型的引用数组的元素;

相关文章
相关标签/搜索