【小白的java成长系列】——顶级类Object源代码分析
首先来说一下api文档使用,api这个词对有一定开发经验的java编程人员来说是非常喜爱的~
java当然也提供了api开发文档,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 找到以下的:
下载自己喜爱的版本号就可以,解压,点击~/jdk-7u60-apidocs/api/index.html就能够查看其api了:
跟上网一样一样的,点击对应链接就能够查看其信息了。
进入正题,说说Object这个类:
先奉上去掉凝视的源代码:能够看到这里面出现了非常多nativekeyword,这个前面也有介绍,它是调用本地的方法,这边说得直白一点,就是调用jvm底层的方法,也是C/C++方法的,我们知道,jvm非常大程度上是依赖于C/C++开发出来的~
package java.lang;
public class Object {
private static native void registerNatives();
static {//静态块,默认调用registerNatives()方法
registerNatives();
}
<span style="white-space:pre"> </span>//返回执行时的Class,一般在反射过程中用的比較多
public final native Class<?> getClass();
<span style="white-space:pre"> </span>//得到jvm执行时的hash值
public native int hashCode();
<span style="white-space:pre"> </span>//比較方法,两个对象进行比較
public boolean equals(Object obj) {
return (this == obj);
}
<span style="white-space:pre"> </span>//克隆方法
protected native Object clone() throws CloneNotSupportedException;
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>//转换成String,这个就说明了为什么我们在打印对象的时候,控制台会看到xx@xxx的信息,事实上是调用的是这种方法
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
<span style="white-space:pre"> </span>//唤醒线程,即唤醒某个处于睡眠的线程——>对象的线程
public final native void notify();
<span style="white-space:pre"> //唤醒</span>线程<span style="white-space:pre">,即唤醒</span>全部<span style="white-space:pre">处于睡眠的</span>线程<span style="white-space:pre">——>对象的</span>线程
public final native void notifyAll();
<span style="white-space:pre"> </span>//线程休眠等待
public final native void wait(long timeout) throws InterruptedException;
<span style="white-space:pre"> </span>//线程休眠等待
public final void wait(long timeout, int nanos) throws InterruptedException {
if (timeout < 0) {
throw new IllegalArgumentException("timeout value is negative");
} if (nanos < 0 || nanos > 999999) {
throw new IllegalArgumentException(
"nanosecond timeout value out of range");
} if (nanos >= 500000 || (nanos != 0 && timeout == 0)) {
timeout++;
} wait(timeout);
}
<span style="white-space:pre"> </span>//线程休眠等待
public final void wait() throws InterruptedException {
wait(0);
}
<span style="white-space:pre"> </span>//GC回收(垃圾回收)收尾工作
protected void finalize() throws Throwable {
}
}
解释如上,会有下面一些问题:
1、为什么会用到native这个词?
这个还真不好回答,先来介绍java的一门技术——JNI(Java Native Interface),这个的出现非常大程度上是丰富了java语言的,它同意java语言调用其它语言的东东,有一些java不好实现的东东,就能够使用其它语言进行实现,然后供给java调用。上面出现这么多native方法,说得难听一点就是java实现不了的功能,在JVM层次使用了C\C++实现了,丰富了java应用层的api。
2、finalize()方法?
这个是要跟GC结合来说明,后面会重点介绍~
3、非常多方法声明为final?
声明为final的方法表示终结,不能被重写~即方法的作用功能不能进行改动
【小白的java成长系列】——顶级类Object源代码分析的更多相关文章
- 【小白的java成长系列】——面向对象基础
今天来说说java面向对象的知识点~事实上.java在其发展过程中可以成功.非常大一部分原因是其面向对象的思想~ 1.概念 如今来说面向对象思想.也不是什么新的知识点了,我们知道如今非常多语言都有面向 ...
- 【小白的java成长系列】——java ide 开发工具eclipse的操作
今天看了一下自己的博客文章,里面的内容还是比較杂的,有好多技术,有好多语言,都没有突出自己的强项,能够说,从博客里面,看不出我究竟是做哪块的..加上今天被授予了博客准专家勋章,自己想了一下,还是得梳理 ...
- 【小白的java成长系列】——javakeyword
准备出一个系列的内容啦,今天就从keyword開始说起吧~ 类型 keyword 说明 keyword 说明 訪问控制权限 public 公共的.公开的. protected 受保护的.用来修饰属性或 ...
- 【小白的java成长系列】——windows下搭建和配置java环境
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/enson16855/article/details/25967851 基于非常多原因,还是得说说ja ...
- java中普通的顶级类是不能使用static关键字修饰的。只有内部类可以使用static修饰,也可以不使用staitc关键字修饰。
java中普通的顶级类是不能使用static关键字修饰的.只有内部类可以使用static修饰,也可以不使用staitc关键字修饰. java中的类可以是static吗?答案是可以.在java中我们可以 ...
- Java中特殊的类——Object类
Java中特殊的类--Object类 1.Object类的概述 Object类是java默认提供的类.Java中除了Object类,所有的类都是有继承关系的.默认会继承Object类,即所有的对象都可 ...
- Java并发系列[5]----ReentrantLock源码分析
在Java5.0之前,协调对共享对象的访问可以使用的机制只有synchronized和volatile.我们知道synchronized关键字实现了内置锁,而volatile关键字保证了多线程的内存可 ...
- java集合系列之LinkedList源码分析
java集合系列之LinkedList源码分析 LinkedList数据结构简介 LinkedList底层是通过双端双向链表实现的,其基本数据结构如下,每一个节点类为Node对象,每个Node节点包含 ...
- java多线程系列(九)---ArrayBlockingQueue源码分析
java多线程系列(九)---ArrayBlockingQueue源码分析 目录 认识cpu.核心与线程 java多线程系列(一)之java多线程技能 java多线程系列(二)之对象变量的并发访问 j ...
随机推荐
- 获取Exe文件版本信息的函数(使用GetFileVersionInfo得到TFileVersionInfo结构体,包含12项内容)
Type TFileVersionInfo = Record FixedInfo:TVSFixedFileInfo; {版本信息} Comp ...
- Common Lisp第三方库介绍 | (R "think-of-lisper" 'Albertlee)
Common Lisp第三方库介绍 | (R "think-of-lisper" 'Albertlee) Common Lisp第三方库介绍 一个丰富且高质量的开发库集合,对于实际 ...
- Memcahce(MC)系列(一)Memcache介绍、使用、存储、算法、优化
写在前面:前不久在工作中被问到关于MC一致哈希的问题,由于时隔太久差点儿忘记,特前来恶补一下MC,下面是前几年在工作中学习MC时的一些资料,来历不明,特整理一下,希望对大家的学习也能有帮助. 32 的 ...
- 蜘蛛侠天堂,打死我mac键盘
今天是周末,在我租住的房间,以一个离奇事件. 一个蜘蛛侠天堂,趴在我的假期车窗玻璃,爬下沿着玻璃.特别糟糕.可以飞檐走壁. 可惜体力不支,摔死在我的mac键盘上. 有图有视频. 视频链接:http:/ ...
- HNCU1099:堆积木
http://hncu.acmclub.com/index.php?app=problem_title&id=111&problem_id=1099 题目描述 小明的侄子要过生日了,小 ...
- IP Editor IP控件(对比一下封装IP控件)
HWND hIpEdit; void __fastcall TForm2::FormCreate(TObject *Sender) { hIpEdit = CreateWindow(WC_IPADDR ...
- PS中模式算法
详见地址:http://www.68ps.com/zt/cs5/hh_zhengpian.htm
- nginx 源码安装
安装环境: 操作系统:Ubuntu 12.04 Nginx: V1.4.2 PCRE: V8.33 zlib: V1.2.8 下载上述源包到当前用户主目录(本机:/hom ...
- android Vibrator 用法
private Vibrator mvibrator; 1.服务的句柄 mvibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE); 或者 ...
- 基于CORS的geoserver同源访问策略
这个问题理顺整个2天.终于攻克.记录下来. 1.下载文件 首先下载cors压缩包,解压,得到的是org/mortbay/servlets/CrossOriginFilter.class文件,把此文件拷 ...