一、Object对象
2016-06-08 19:03
579 查看
今天简单看了一下Object.大多是native方法.突然有一种把native翻出来看看的冲动.吼吼.废话不多说了。贴代码.看注释
Object内容学习
Object分析
transient关键字
MainActivity.class
TestActivity.class
打印结果:
结果解释:transient修饰的age没有传值过来.
Object内容学习
Object分析
transient关键字
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.classpublic 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没有传值过来.
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Python动态类型的学习---引用的理解
- 土人系列AS入门教程 -- 对象篇
- C#托管堆对象实例包含内容分析
- C#实现获取不同对象中名称相同属性的方法
- javascript asp教程第十一课--Application 对象
- PowerShell中使用Out-String命令把对象转换成字符串输出的例子
- VBS教程:对象-正则表达式(RegExp)对象
- c# 所有类型都从Object类型派生
- C#检查指定对象是否存在于ArrayList集合中的方法
- sql2008启动代理未将对象应用到实例解决方案
- C#编程自学之类和对象
- C++中对象的常引用、动态建立和释放相关知识讲解
- C# Dynamic关键字之:解析dynamic就是Object
- php中将一个对象保存到Session中的方法
- php对象和数组相互转换的方法
- PHP中把对象转换为关联数组代码分享
- 什么是DAO Database Access Object
- C#写入对象或集合类型数据到xml文件的方法
- C#利用反射来判断对象是否包含某个属性的实现方法