首页 > 代码库 > 浅谈变量,数据变量与引用变量

浅谈变量,数据变量与引用变量

Java是一种面向对象语言

Java程序中一切皆对象,也就是说运行中的Java程序其实是很多对象依照设计要求不断 创建 修改 联系其他对象 修改其他对象 完成使命后被垃圾收集器回收。

那么程序设计就要求定义对象的功能,设置对象之间的联系(接口),设计对象之间相互操作的顺序,根据操作结果的不同再进行更多不同的操作。

对象的定义指对对象的准确描述(对象有什么属性特点,具备什么能力—方法),定义对象的文件我们称之为类,所以类可以有属性和方法;

(其实对象是非常非常非常抽象的,它的抽象体现在

1.范围广:一切皆可以定义为对象

2.随意性:任何人都可以任意定义自己需要的对象,前提是可以准确描述

3.描述性:一般描述性体现在两方面(属性和行为),但有意思的是属性是很重要的描述要素,但它可以被忽略,个人认为属性是区分同一类型的不同对象的标识,有意思的是虽然可以对象随意定义,但是所有描述的对象必须有行为,但可以不必须有属性,怎么理解这个?如果用“所有类继承自Object类”解释是没错,但是差点味,其实从程序设计角度考虑,对象是用来操作的(如果不描述 行为 这个对象就不可被操作,也不可操作别的对象),它是孤立的无意义的!!! 

有点啰嗦,还没转到正题,前面做了那么多铺垫其实是想告诉大家变量是描述属性和行为(方法)的具体实现。

好吧:看似眼花缭乱的程序其实也是由简单的元素组成,类似看似复杂的计算机其实是由0和1组成的,或者缤纷纷繁的世界其实是由阴和阳组成的,欲了解复杂必先熟悉基础。

先说说数据变量,其实就是基本变量(int、double、boolean、folat、short、char、byte、long),它与引用变量的本质区别是他的值直接赋的,比如int i = 8;这句在执行是计算机会直接把8赋值给i,不用管8从哪来,8就在那里,你直接用就行,什么都不用管,如果另一个变量 int a = 8;这两个8没关系,不会存在你操作a,i也随之受影响。

说说数据变量在内存中的位置吧,其实数据变量既然是基本变量,其实它无处不在,或者变量可以存在的地方它都存在,方法区,堆、栈,程序计数器,要说再理解深刻一点就是,数据变量和它的值(所有数据变量一定有值,这是一定的,你如果没赋值它也被系统默认赋值了)在同一区域,就是不会存在变量在栈而它的值在方法区或堆里面;注意这很重要,对于区分引用变量。

再说说引用变量,第一要先创建对象(对象创建好后,实体是在堆中,string在常量池),引用变量的生命表示在指定位置开辟此变量空间,如果不赋值就只有变量,什么值也没有(也就是null),如果给它赋值,它的值就是一串指向对象的标识(指针),也就是引用变量的值其实是一个地址,只是这个地址指向了一个对象。当然堆中的引用变量值也是地址,这个地址指向堆中的其他变量;

程序由对象组成,对象由属性和方法组成,属性和方法由变量组成;引用变量又离不开对象,是不是有点凌乱,其实最终都是由数据变量组成,方法是(数据变量组合顺序的封装),对象是属性和方法的封装。

再说一下对象,对象创建好后实体在堆中,所有对象都在堆中,怎么找到他们呢,这就要引用变量,引用变量个我们标记好对象,我们可以通过它找到并操作对象;

有这种情况,如果多个引用变量都指向一个对象,一个引用变量对对象进行修改,其他引用变量取到的值也被修改了,这就很不好,有什么办法呢,设置权限,有权限的引用才能修改,一般具体方法是:属性设置为私有(private),方法设置为公有(public),这样外部引用变量不允许修改对象属性,对象方法只能调用又不可能被修改所以设置成共有(其实方法是对外提供操作本对象的接口,所以本应设置为公有,否则对象无法被操作,没有存在意义);

当然,多个引用变量是造成线程安全的原因,造成线程安全有两个因素:缺一不可1.程序并发运行;2.存在多个引用变量操作同一对象,这个下次有机会再好好聊聊。

 

浅谈变量,数据变量与引用变量