由Java里static引发的感受

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">市面上各种所谓的Java宝典和Java学习书籍对static的理解可谓是各有千秋啊,有的人说不该翻译为静态变量,他和静态没有关系,他的实质就是属于类本身的。有的人说,翻译的对,就该叫“静态”。于是乎,这些人都互相文字攻击,声称自己理解的透彻。</span>

谈观点之前,有个前提,如果你是什么计算机基础的人都没有,涉足计算机这个行业,不管是软件也好还是硬件也罢,要想混的久远,那么就不要浮躁,不要以为会用Java编写个小项目就精通Java,不要以为高级语言已掌握,打遍天下都不怕。其实你只是个“工程师”这三个字里第一个字“工”,就好比你会砌砖砌瓦,你会用米尺丈量房屋建造过程中的各种方式等等,你只是混在行业的底层。我认为真正的想在行业混的人,就不该去质疑要不要学《数据结构和算法分析》,《计算机组成原理》,《编译原理》,《操作系统》,《计算机网络》,更不要总在论坛问来问去这个难不难要不要学......之类的话。没人帮了你职业未来,你想混的好,就不要有这么多问题,你有这会儿担忧的功夫都已经把数据结构第一章学完了。如果再犹豫几天,你本应有时间把接下来的几章都过一遍了,犹豫什么啊?

为什么考软件或者计算机之类的研究生的时候以上几门课都会成为初试的科目?又为什么出去好点的大公司面试的时候都先考考你以上几门专业课的知识?而后才看看你用哪些高级语言做过些什么项目经历,开发过什么类型的项目等等。就是因为他们的重要好比盖房子的“砖瓦“。这些知识点相互联系交叉,都要学到融会贯通的程度才行。修炼出来后你学高级语言也好,学高级数据库也罢,都是相当高效的。简单具体例子。我同学好多是本科其他专业,研究生转入本行业,刚刚开始就上手Java编程,对那些稍微专业点的术语都感觉步履维艰,再加上稍微涉及点内存分析的知识,就已经要被打败了,于是乎他一遍又一遍地学,看视频。我想说,你在看10遍,100遍视频也学不好,送他四个字:空中楼阁。你懂得。

作为初学者的我(本科计算机相关专业:电子信息工程),对于static的探究可谓是坚持不懈打破沙锅问到底啊,所以谈谈我的感受。接下来我从static这个关键字来说一说我以上观点的论据。Java语言与其他语言的区别是Write Once, Run Anywhere ,这里就有问题了,编译!那个鼓吹说学高级语言的程序员不需要了解内存,编译原理。我想说,那你永远别说自己想成为Java工程师。为什么?慢慢你就知道了。科普一下啊:

静态和动态的区别:在为一个语言设计一个编译器时,我们所面对的最重要的问题之一是编译器能够对一个程序做出哪些判定。如果一个语言使用的策略支持编译器静态决定某个问题,那么我们说这个语言使用了静态策略,或者说这个问题可以在编译时刻决定。另外一方面,一个只允许在运行程序的时候做出决定的策略被称为动态策略,或者被认为需要在运行的时刻做出决定。


我们继续说Java,他的JVM即Java Virtual Machine 帮他做了很多事情,大多数人都知道,但是做了什么事情呢?如何做的呢?详细请见《深入java虚拟机 第二版》这本书。在这里我只简单说下Java虚拟机内存分配问题。内存有堆内存,栈内存。堆内存里新生代和老年代,一般Java对象的创立是放在新生代中的,老年代放的就是static修饰的属于类本身的变量或者方法。为什么属于类本身,注意static修饰的变量或者方法,不是指的作用域,而是编译器确定用于存放被声明的对象的内存位置方式,可以在程序运行之前的编译时刻(compile time)决定,这个名称是相对于只允许在运行程序的时候做出决定的策略的动态策略而来的。

例如:

public static int x;
使用x成为一个类变量,也就是不管创建了多少个这个类的对象,只存在一个X的拷贝。此外,编译器可以确定内存中 的被用于存放整数X的位置。反过来,如果这个声明中省略了”static“,那么这个类的每个对象都会有他自己的用于存放X的位置,编译器没有办法在运行程序之前预先确定所有这些位置。

(注:我提到的专业词汇你不懂的话马上去恶补一下Java虚拟机的知识,花不了多长时间,绝对对你理解Java中那些死规定和语法有很大的帮助。那么如果你看Java虚拟机某些章节是发现计算机组成原理里的某些知识你又不明白,还是那句话,回去恶补,直到任督二脉都打通为止



       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值