易截截图软件、单文件、免安装、纯绿色、仅160KB

Java中方法在内存中的表示


将某 class 产生出一个 instance 之后,此 class 所有的 instance field 都会新增一份,那么所有的 instance method 是否也会新增一份?答案是不会,我们用field表示字段,用method表示方法,那么加上static区分后就 有四种:
class field:有用static修饰的field
class method:有用static修饰的method
instance field:没有用static修饰的field
instance method:没有用static修饰的method
那么他们在内存中的表示为:
class field:共用一块记忆体
class method:共用一块记忆体
instance field:随着每个instance各有一块记忆体
instance method:共用一块记忆体
如果instance method也随着instance增加而增加的话,那内存消耗也太大了,为了做到共用一小段内存,Java是根据this关键字做到的,比如:instance1.instanceMethod(); instance2.instanceMethod(); 在传递给对象参数的时候,Java编译器自动先加上了一个this参数,它表示传递的是这个对象引用,虽然他们两个对象共用一个方法,但是他们的方法中所产生的数据是私有的,这是因为参数被传进来变成call stack内的entry,而各个对象都有不同call stack,所以不会混淆。其实调用每个非static方法时,Java编译器都会自动的先加上当前调用此方法对象的参数,有时候在一个方法调用另一个方法,这时可以不用在前面加上this的,因为要传递的对象参数就是当前执行这个方法的对象。
为什么静态方法中不能调用非静态方法?这是因为静态方法直接跟class相关,调用此方法的时候是类直接调用的,而不是对象,所以Java编译器就没有对象参数可以传递,这样,如果你在静态方法内部调用非静态方法,那么Java编译器怎么判断这个非静态方法是哪个对象调用的?对吧,所以Java编译器就会报错,但是也不是绝对的,Java编译器是隐式的传递对象参数,那么我们总可以显示的传递对象参数吧,如果我们把某个对象的引用传递到static方法里,然后通过这个引用就可以调用非静态方法和访问非静态数据成员了。


相关文档:

Java设计模式之:Iterator链表模式

先来了解一下链表模式的原理:
首先写一个JavaBean,内容是要添加的元素和该元素的节点。
public class NodeBean implements Serializable
{
   
    private Object data; //元素本身
    private NodeBean next; //下一个节点
   
  &n ......

java的多线程同步互斥:synchronized的乱用

在java的多线程同步互斥处理中,synchronized是别不可少的东西.
但是如果不清晰的编程的话,也就是乱用synchronized的话,死锁的发生就是离你很近的话题了.
在前面的一个维护中就发现一个死锁的bug.究其原因是开发者没有真正明白多线程的同步互斥,没有意识到死锁的发生,或者说自己认为写的代码不会发生死锁.
死锁的发生一般 ......

Java写的一个mp3播放器

基于Java的mp3播放器源代码
 (1 folders, 2 files, 1.38 KB, 962.53 KB in total.)


 源码
 (1 folders, 2 files, 1.38 KB, 961.15 KB in total.)


 Java写的一个m ......

java学习录

学习了几周,玩得很开心。
学习java的第一件事就是做一个程序生成Huffman编码。
在这里我学会了LinkedList的使用,它可以保存任何类型的对象。
如下是我的编码结构体
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package HuffmanTree;
......

thinking in java 学习笔记(一) 接口于多重继承






<!--
@page { margin: 0.79in }
P { margin-bottom: 0.08in }
PRE.western { font-family: "Nimbus Roman No9 L" }
PRE.cjk { font-family: "Nimbus Roman No9 L" }
H1 { margin-bottom: 0.08in }
H1.western { font-family: "Nimbus Sans L", sans-ser ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号