一、Object类
1.Object类是所有类的父类
声明一个类的时候,实际上已经默认继承了Object类
package property; public class Hero extends Object{
String name;
float hp;
float armor;
int moveSpeed; public void useItem(Item i){
System.out.println("Hero use item");
i.effect();
} public Hero(){
System.out.println("Hero的无参构造方法");
} public Hero(String name){
System.out.println("Hero的有参构造方法");
this.name=name;
} public static void main(String[] args){
new Hero();
}
}
2.toString()方法
Object类提供一个toString()方法,所以所有的类都有toString()方法,返回当前对象的字符串表达
package property;
public class Hero{
String name;
protected float hp; public String toString(){
return name;
} public static void main(String[] args){
Hero h=new Hero();
h.name="demo";
System.out.println(h.toString());
System.out.println(h);//直接打印对象就是打印对象的toString()返回值
}
}
3.finalize()方法
当一个对象没有任何引用指向的时候,它就满足垃圾回收的条件,当他被垃圾回收的时候,他的finalize()方法就会被调用
finalize()方法不是开发人员主动调用的方法,而是由JVM调用的。
package property; public class Hero{
public String name;
protected float hp; public String toString(){
return name;
} public void finalize(){
System.out.println("这个对象正在被回收");
} public static void main(String[] args){
Hero h;//只要一个引用
for(int i=0;i<100;i++){
/*不断生成新的对象
每次创建一个对象,前一个对象,就没有引用指向了,那些对象就满足
垃圾回收的条件,当垃圾堆积的比较多的时候,就会触发垃圾回收
一旦这个对象被回收,它的finalize()方法就会被调用。 */
h=new Hero();
}
}
}
4.equals()方法
用于判断两个对象的内容时候相同,java里的equals方法是交给开发者去重写的,自己定义满足条件的Object是equal的
package property;
public class Hero{
public String name;
protected float hp; public boolean equals(Object o){
if(o instanceof Hero){
Hero h=(Hero)o;
return this.hp==h.hp;
}
return false;
} public static void main(String[] args){
Hero h1=new Hero();
h1.hp=20;
Hero h2=new Hero();
h2.hp=30;
System.out.println(h1.equals(h2));
}
}
5.==
这个不是Object的方法,但是用于判断两个对象是否相同,更确切的说是,判断两个引用,是否指向同一个对象。
package property;
public class Hero{
public String name;
protected float hp; public boolean equals(Object o){
if(o instanceof Hero){
Hero h=(Hero)o;
return this.hp==h.hp;
}
return false;
} public static void main(String[] args){
Hero h1=new Hero();
h1.hp=30;
Hero h2=new Hero();
h2.hp=30;
System.out.println(h1==h2);
}
}
6.hashCode()方法
返回一个对象的哈希值,hashcode存在主要是为了查找的快捷性,用来在散列表存储结构中确定对象的存储地址的。
- 如果两个对象的equals相等,那么这两个对象的hashcode一定相同
- 如果对象的equals方法被重写,那么对象的hashcode方法也要重写
- 如果对象的hashcode相同,不代表两个对象就相同,
举个例子:Set集合里元素不可以重复,那么原理是什么,set是根据equals方法来判断两个元素是否相等的,比如set里面已经有了100个元素,那么第101个元素进来的时候,最多能调用100次equals方法,如果equals方法写得复杂,对比的东西很多,那么效率大大降低。
使用hashcode就不一样了,比如HashSet,底层是基于HashMap实现的,先通过Hashcode取一个模,这样就一下子固定到某个位置了,如果这个位置上没有元素,那么就可以肯定HashSet中必定没有和新添加元素equals的元素,就可以直接存放,不用比较,如果这个位置上有元素了,逐一比较,先比较HashCode,如果HashCode都不同接下来不用比了,肯定不一样,如果HashCode相等时,在用equals()方法比较,如果相等就不存,不相等就存。
7.线程同步相关的方法
Object还提供线程同步的方法:wait() notify() notifyAll()
8.getClass()方法
会返回一个对象的类对象。属于反射,获取当前对象的类型。
比如:Class class="Hello".getClass();得到的就是字符串类型。
反射:理解为在运行时期获取对象类型信息的操作。传统的编程方法要求程序员在编译阶段决定使用的类型,但是在反射下,可以童泰获取这些信息
编写更加具有可移植性的代码。
一、Object类的更多相关文章
- Object类和常用方法
Object类是java语言的根类,要么是一个类的直接父类,要么就是一个类的间接父类.所有对象(包括数组)都实现这个类的方法. 引用数据类型:类/接口/数组,引用数据类型又称之位对象类,所谓的数组变量 ...
- JS面向对象(3) -- Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...
- Object类clone方法的自我理解
网上搜帖: clone()是java.lang.Object类的protected方法,实现clone方法: 1)类自身需要实现Cloneable接口 2)需重写clone()方法,最好设置修饰符mo ...
- Java中的Object类介绍
Object类是所有类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承Object类. Object类中的所有方法适用于所有子类 Object中比较常见的方法: ...
- Object类的toString方法
Object类是所有Java类的祖先.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个类的方法.在不明确给出超类的情况下,Java会自动把Object作为要定义类的超类 ...
- Yii2的深入学习--yii\base\Object 类
之前我们说过 Yii2 中大多数类都继承自 yii\base\Object,今天就让我们来看一下这个类. Object 是一个基础类,实现了属性的功能,其基本内容如下: <?php namesp ...
- 重写Object类中的equals方法
Object是所有类的父亲,这个类有很多方法,我们都可以直接调用,但有些方法并不适合,例如下面的student类 public class Student { //姓名.学号.年纪 private S ...
- Java中Object类
Object类是所有类的父类,如果一个类没有使用extends关键字明确标识继承另一个类,那么这个类默认继承Object类. Object类中的方法,适合所有子类. Object中的几个重要方法: 1 ...
- Object类概述
Object:类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.每个类都直接或者间接的继承自Object类. Object类的方法:public int hashCode() ...
- java之Object类介绍
1.Object类是所有java类的基类 如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类,ex: public class Person{ ~~~~~ } 等价于 p ...
随机推荐
- HCNP学习笔记之子网掩码的计算和划分详细
0x00 子网掩码的计算 TCP/IP网间网技术产生于大型主流机环境中,它能发展到今天的规模是当初的设计者们始料未及的.网间网规模的迅速扩展对IP地址模式的威胁并不是它不能保证主机地址的唯一性,而是会 ...
- CF#338D. GCD Table
传送门 简单的中国剩余定理练习. 首先行数一定是$lcm$,然后只要确定最小的列数就能判定解合不合法了. 我们可以得到线性模方程组: $y \equiv 0 \pmod{a_1}$ $y+1 \equ ...
- CentOS 7下搭建配置SVN服务器
CentOS 7下搭建配置SVN服务器 1. 安装 CentOS通过yum安装subversion. $ sudo yum install subversion subversion安装在/bin目录 ...
- 20145335郝昊《网络攻防》Exp7 网络欺诈技术防范
20145335郝昊<网络攻防>Exp7 网络欺诈技术防范 实验内容 本次实践本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法. 简单应用SET工具建立冒名网站. ...
- vs2012添加自定义资源步骤
1.新建Win32工程 2.选中Resource Files -> add resource 点击打开 这里需要你填写一个Resource Type ,假如你之前已经有了,就直接输入,没有的话在 ...
- Eclipse的快捷键使用总结
最近一直在使用Idea开发项目,导致之前一直使用的Eclipse快捷键忘记的差不多了,现在稍微整理了一些,方便以后可以快速切换回来. 常用的Eclipse快捷键总结: Ctrl+S 保存当前正在编辑的 ...
- Python3基础 file open 打开txt文件并打印出全文
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- gvim写html代码时如何快速地跳转到一个标签的结束位置: 终极插件: matchit.vim
gvim写html代码时如何快速地跳转到一个标签的结束位置 参考这个vimrc的配置, 里面有一些 很好的东西, 配置很有用, 以前没有用到: http://www.cnblogs.com/wangj ...
- 3、CommonChunkPlugin提取公共js-以提取一个jquery为例
cnpm install css-loader --save-dev //css-loader 是将css打包进js cnpm install style-loader --save-dev ...
- socket编程时使用了inet_ntoa函数,存储到链表中的数据总是自动改变
这和inet_ntoa的返回值有关系: 函数声明:char *inet_ntoa (struct in_addr); 返回点分十进制的字符串在静态内存中的指针. 所在头文件:<arpa/inet ...