学Java目前为止已近有1年有余。。。
今天在研究代码的时候发现平时常用的Object类中 的 HashCode()方法,竟然没有实现。。。
莫名开始好奇,光记得写类的时候不重写toString()方法 ,打印的时候会自动调用Object的toString()方法,而Object类中的toStirng ()是打印 类名@hashcode,toString()中也是调用的HashCode()方法。。。想到这就开始茫然了,HashCode()不是没有实现么,怎么打印出内容。
不思不得其解,不停的做实验结果都是打印出了HashCode,偶然间突然发现Object中的HashCode()是这样写的:
//关键点 Native
public native int hashCode();
----------------------------------------------------------------------------------
查找了点关于Native的说明(PS:惭愧这么久了才注意到Native这个关键字)
native是与C++联合开发的时候用的!java自己开发不用的!
使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用。这些函数的实现体在DLL中,JDK的源代码中并不包含,你应该是看不到的。对于不同的平台它们也是不同的。这也是java的底层机制,实际上java就是在不同的平台上调用不同的native方法实现对操作系统的访问的。
1。native 是用做java 和其他语言(如c++)进行协作时用的也就是native 后的函数的实现不是用java写的 2。既然都不是java,那就别管它的源代码了,呵呵
native的意思就是通知操作系统,这个函数你必须给我实现,因为我要使用。所以native关键字的函数都是操作系统实现的, java只能调用。
java是跨平台的语言,既然是跨了平台,所付出的代价就是牺牲一些对底层的控制,而java要实现对底层的控制,就需要一些其他语言的帮助,这个就是native的作用了
分享到:
相关推荐
equals 方法和 hashCode 方法是 Java 语言中两个重要的方法,它们都是在 Object 类中定义的。equals 方法用于比较两个对象是否相等,而 hashCode 方法用于返回对象的哈希码。 在 Java 的 Object 类中,equals 方法...
在Java的Object类中有一个方法: public native int hashCode(); 根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现。 为何Object类需要这样一...
### Java Object类中的核心方法详解 #### 概述 在Java编程语言中,`Object` 类是最基本且最重要的类之一,所有的其他类都是通过继承 `Object` 而来的。因此,深入理解 `Object` 类及其提供的方法对于任何Java...
总的来说,`Object`类提供了所有Java对象的基础行为,而`native`方法则是Java与操作系统或其他底层资源交互的重要手段。了解并掌握`Object`类及其`native`方法对于深入理解Java的运行机制至关重要。
初次遇见 native是在 java.lang.Object 源码中的一个hashCode方法: public native int hashCode(); 为什么有个native呢?这是我所要学习的地方。所以下面想要总结下native。 一、认识 native 即 JNI,Java...
这些方法大多数是native方法,其他类继承了Object后就可以不用重复实现这些方法。 4. getClass()方法 getClass()方法返回当前对象的类对象,该方法是native方法。 5. hashCode()方法 hashCode()方法返回当前对象...
`Object`类提供了基本的方法,这些方法是所有Java对象共有的。下面我们将详细探讨这些方法及其作用。 1. **构造器**: `Object`类有一个默认的无参构造器,它不做任何特别的操作。当你创建一个类的对象时,这个...
在Object类中,hashCode方法是一个native方法,它返回对象的hash值。hashCode方法的目的是为了保证equals相同的两个对象的hashCode结果一致。 hashCode方法的实现是非常重要的,因为它直接影响了基于Hash实现的集合...
这使得Object类中的方法对所有Java类都可用,体现了Java的继承性和多态性。 1. **根父类理解** - Java类层次结构始于Object类,意味着所有类都是Object类的直接或间接子类。即使我们没有显式声明父类,Java编译器...
1. hashCode()方法是一个本地(native)方法,它返回对象的哈希码,用于在哈希表中快速查找对象。不同对象的哈希码通常不同,但如果两个对象通过equals()方法比较是相等的,则它们的hashCode()方法返回的哈希码也应...
- **方法签名**:`protected native Object clone() throws CloneNotSupportedException;` - **功能**:创建并返回此对象的一个副本。这是一个本地方法,如果类没有实现`Cloneable`接口,则抛出`...
- 抽象方法不能是静态的(static),不能是本地方法(native),但可以被synchronized修饰。 11. **静态变量与实例变量** - 静态变量属于类,实例变量属于对象。 12. **==与equals的区别** - ==用于比较两个引用...
- `finalize`:是Object类中的一个方法,用于在对象被垃圾回收前执行清理操作,但不推荐依赖它进行资源释放,因为其执行时机不确定。 2. **Anonymous Inner Class** 可以继承其他类并实现接口。 3. **Static ...
- `abstract`方法也不能是`native`的,因为`native`方法表示本地方法,有具体实现,与`abstract`概念相悖。 - `abstract`方法可以是`synchronized`的,但这在语法上是合法的,但在实际应用中很少见,因为`...
public String nativeSQL(String sql) throws SQLException { return null;} public void setAutoCommit(boolean autoCommit) throws SQLException { } public boolean getAutoCommit() throws SQLException { ...
在Java的`Object`类中定义了一个本地方法(native)`hashCode()`,该方法返回一个`int`类型的数值。这个数值是根据对象的状态计算出来的,通常用于哈希表数据结构,如`HashSet`、`HashMap`和`HashTable`。 哈希表是...
Object类中定义了native修饰的方法,称为本地方法,本地方法的特点是被native修饰的方法,非Java语言编写,是由C++语言编写。本地方法在运行时期进入本地方法栈内存,本地方法栈是一块独立内存的区域。本地方法的...
例如,`hashCode()`方法在`java.lang.Object`类中被声明为`native`,意味着它的具体实现是由JVM(Java虚拟机)提供的,而不是由Java源代码实现的。 要创建一个使用JNI的Java应用,通常需要以下步骤: 1. **声明...