首先来说一下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源代码分析的更多相关文章

  1. 【小白的java成长系列】——面向对象基础

    今天来说说java面向对象的知识点~事实上.java在其发展过程中可以成功.非常大一部分原因是其面向对象的思想~ 1.概念 如今来说面向对象思想.也不是什么新的知识点了,我们知道如今非常多语言都有面向 ...

  2. 【小白的java成长系列】——java ide 开发工具eclipse的操作

    今天看了一下自己的博客文章,里面的内容还是比較杂的,有好多技术,有好多语言,都没有突出自己的强项,能够说,从博客里面,看不出我究竟是做哪块的..加上今天被授予了博客准专家勋章,自己想了一下,还是得梳理 ...

  3. 【小白的java成长系列】——javakeyword

    准备出一个系列的内容啦,今天就从keyword開始说起吧~ 类型 keyword 说明 keyword 说明 訪问控制权限 public 公共的.公开的. protected 受保护的.用来修饰属性或 ...

  4. 【小白的java成长系列】——windows下搭建和配置java环境

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/enson16855/article/details/25967851 基于非常多原因,还是得说说ja ...

  5. java中普通的顶级类是不能使用static关键字修饰的。只有内部类可以使用static修饰,也可以不使用staitc关键字修饰。

    java中普通的顶级类是不能使用static关键字修饰的.只有内部类可以使用static修饰,也可以不使用staitc关键字修饰. java中的类可以是static吗?答案是可以.在java中我们可以 ...

  6. Java中特殊的类——Object类

    Java中特殊的类--Object类 1.Object类的概述 Object类是java默认提供的类.Java中除了Object类,所有的类都是有继承关系的.默认会继承Object类,即所有的对象都可 ...

  7. Java并发系列[5]----ReentrantLock源码分析

    在Java5.0之前,协调对共享对象的访问可以使用的机制只有synchronized和volatile.我们知道synchronized关键字实现了内置锁,而volatile关键字保证了多线程的内存可 ...

  8. java集合系列之LinkedList源码分析

    java集合系列之LinkedList源码分析 LinkedList数据结构简介 LinkedList底层是通过双端双向链表实现的,其基本数据结构如下,每一个节点类为Node对象,每个Node节点包含 ...

  9. java多线程系列(九)---ArrayBlockingQueue源码分析

    java多线程系列(九)---ArrayBlockingQueue源码分析 目录 认识cpu.核心与线程 java多线程系列(一)之java多线程技能 java多线程系列(二)之对象变量的并发访问 j ...

随机推荐

  1. HDU 1535 Invitation Cards (POJ 1511)

    两次SPFA. 求 来 和 回 的最短路之和. 用Dijkstra+邻接矩阵确实好写+方便交换.可是这个有1000000个点.矩阵开不了. d1[]为 1~N 的最短路. 将全部边的 邻点 交换. d ...

  2. 使用函数指针和多态代替冗长的if-else或者switch-case

    在编程中,if-else和switch-case是很常见的分支结构,很少在程序中不用这些控制语句.但是不能否认,在一些场景下,由于分支结构过分长,导致代码不美观且不容易维护,在<重构>一书 ...

  3. 使用HtmlAgilityPack批量抓取网页数据

    原文:使用HtmlAgilityPack批量抓取网页数据 相关软件点击下载登录的处理.因为有些网页数据需要登陆后才能提取.这里要使用ieHTTPHeaders来提取登录时的提交信息.抓取网页  Htm ...

  4. Enum的简单了解

    Enum可以将一组具名的有限集合创建成一种新的类型,而这些具名的值可以作为常规的程序组件使用. 在创建enum时,编译器会为你生成一个相关的类,这个类继承自java.lang.Enum,所以enum本 ...

  5. 从零开始学C++之动态创建对象

    回顾前面的文章,实现了一个简单工厂模式来创建不同类对象,但由于c++没有类似new "Circle"之类的语法,导致CreateShape 函 数中需要不断地ifelse地去判断, ...

  6. 解决SQL查询总是超时已过期

    解决SQL查询总是超时已过期 .在WIN8里提示:OLE DB 或 ODBC 错误 : 查询超时已过期; HYT00 1.由于数据库设计问题造成SQL数据库新增数据时超时 症状:   Microso ...

  7. 命令模式在MVC框架中的应用

    事实上在项目开发中,我们使用了大量的设计模式,不过这些设计模式都封装在框架中了,假设你想要不只局限于简单的使用,就应该深入了解框架的设计思路. 在MVC框架中,模式之中的一个就是命令模式,先来看看模式 ...

  8. Android开发 更改返回button的图标

    非常多的Android应用左上角都有返回button 在默认的情况下 ADT会默认给一个返回图标 而作为开发需求 非常多都要求定制一个新的图标 在Android的站点上 发现了2种能够更改的方法 1. ...

  9. POJ 2151 Check the difficulty of problems (动态规划-可能DP)

    Check the difficulty of problems Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4522   ...

  10. hdu2713(dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2713 题意:有N个点,每个点都有一个值x,每次进行跳跃,当跳到自己所跳的第奇数个点是+x,第偶数个点时 ...