一、Object对象

今天简单看了一下Object.大多是native方法.突然有一种把native翻出来看看的冲动.吼吼.废话不多说了。贴代码.看注释

Object内容学习

Object分析

package java.lang;


public class Object {

    /**
    *
    *transient修饰的变量只存在于内存中
    *需要注意的是.用intent传递参数时.transient修饰的变量是不会传递的。也不会存到设备中
    *shadow$_klass_ 和 shadow$_monitor_用来支持brooks pointer
    */
    private transient Class<?> shadow$_klass_;
    private transient int shadow$_monitor_;

    /**
     * 构造函数.
     */
    public Object() {
    }

    //clone 函数.实际调用的是native函数internalClone.internalClone等以后编译framework再讲咯
    protected Object clone() throws CloneNotSupportedException {
        if (!(this instanceof Cloneable)) {
            throw new CloneNotSupportedException("Class " + getClass().getName() +
                                                 " doesn't implement Cloneable");
        }

        return internalClone();
    }

    /*
     * Native helper method for cloning.
     */
    private native Object internalClone();

    //当是对象的时候(没有被重写时).equals其实是用==号实现的.这里的==号是比较对象的内存地址
    public boolean equals(Object o) {
        return this == o;
    }

    //内存回收的方法.
    @FindBugsSuppressWarnings("FI_EMPTY")
    protected void finalize() throws Throwable {
    }

    public final Class<?> getClass() {
      return shadow$_klass_;
    }

    //产生hashCode的方法.这个方法感兴趣的朋友.可以仔细研究一下
    public int hashCode() {
        int lockWord = shadow$_monitor_;
        final int lockWordStateMask = 0xC0000000;  // Top 2 bits.
        final int lockWordStateHash = 0x80000000;  // Top 2 bits are value 2 (kStateHash).
        final int lockWordHashMask = 0x0FFFFFFF;  // Low 28 bits.
        if ((lockWord & lockWordStateMask) == lockWordStateHash) {
            return lockWord & lockWordHashMask;
        }
        return System.identityHashCode(this);
    }



    //默认情况.打印的是16位的 hashCode. 
    public String toString() {
        return getClass().getName() + '@' + Integer.toHexString(hashCode());
    }

    //线程的方法
    public final native void notify();

    public final native void notifyAll();

    public final native void wait() throws InterruptedException;

    public final void wait(long millis) throws InterruptedException {
        wait(millis, 0);
    }
    public final native void wait(long millis, int nanos) throws InterruptedException;
}

transient关键字

TransientTest.class

public class TransientTest implements Serializable {
    //为了测试简单,get set 省略了
    public String name;
    public transient int age;

    @Override
    public String toString() {
        return "TransientTest{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

MainActivity.class

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TransientTest transientTest = new TransientTest();
        transientTest.age=11;
        transientTest.name="helloworld";
        Log.e("MainActivity=",transientTest.toString());
        Intent intent = new Intent(this,TestActivity.class);
        intent.putExtra("test",transientTest);
        startActivity(intent);
    }
}

TestActivity.class

public class TestActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        TransientTest transientTest = (TransientTest) getIntent().getSerializableExtra("test");

        Log.e("TestActivity=", transientTest.toString());
    }
}

打印结果:

MainActivity=: TransientTest{name='helloworld', age=11}
TestActivity=: TransientTest{name='helloworld', age=0}

结果解释:transient修饰的age没有传值过来.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值