⑴ 2020-09-10:java里Object类有哪些方法
Java Object类是所有类的父类,主要方法有:
getClass():获取运行时类型,返回值为Class对象
2.hashCode():返回该对象的哈希码值,是为了提高哈希表的性能(HashTable)
3.equals():判断两个对象是否相等,在Object源码中equals就是使用==去判断,所以在Object中equals是等价于==的,但是在String及某些类对equals进行了重写,实现不同的比较。
4.clone():JAVA里除了8种基本类型传参数是值传递,其他的类对象传参数都是引用传递,我们有时候不希望在方法里讲参数改变,这是就需要在类中复写clone方法。此方法只实现了一个浅层拷贝,对于基本类型字段成功拷贝,对嵌套对象,只把地址拷贝了,需要自己重写clone方法进行深度拷贝。
5.toString():返回一个String字符串,用于描述当前对象的信息,可以重写返回对自己有用的信息,默认返回的是当前对象的类名+hashCode的16进制数字。
6.wait():多线程时用到的方法,作用是让当前线程进入等待状态,同时也会让当前线程释放它所持有的锁。直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,当前线程被唤醒
7.notify():多线程时用到的方法,唤醒该对象等待的某个线程
8.notifyAll():多线程时用到的方法,唤醒该对象等待的所有线程
9.finalize():对象在被GC释放之前调用finalize方法。
你明白了吗?
⑵ java里的object类里面有什么方法
查看一下API讲解object的部分吧,这是一个超类,所有的类都是该类的子类。
超类,意思就是所有类的父类,有equals()、hashCode()、wait()、toString()等方法
⑶ Java语言中Object类定义了哪11种方法
Java中所有类(包括用户自己定义的类)都自动继承Object类,即Object类是所有类的父类。
Object中常用方法:
public boolean equals(Object obj)
比较当前对象与obj是否为同一对象,返回值:ture/false
public String toString()
返回当前对象的字符串表达形式
public native int hashCode();
返回对象的Hash码。Hash码是标志对象的唯一值,Hash码相同的对象是同一对象
protected void finalize()throws Throwable
对象销毁时被调用
以下三个函数用于控制线程
public final native void notify();public final native void notifyAll();public final native void wait();
native型方法指由C++语言编写的方法,Java解释器对其进行转义后才执行。
“==”与equals()
"==" 一般用于基本数据类型比较。若用作两个引用对象比较,仅当引用变量引用同一个对象时,才返回true,否则false。
void EqualCompare()
{
String s1 = new String("Hello");
String s2 = new String("Hello");
String s3 = "Hello";
String s4 = "Hello";
//未使用new,s4引用既存的对象(编译器创建对象之前先进行检测"Hello"是否已经存在,若存在,则返回原对象的引用)
System.out.println(s1.equals(s2)); //truex1行
System.out.println(s1 ==s2); // false 两变量引用不同对象
System.out.println(s3.equals(s4)); //true 两变量引用相同对象
System.out.println(s3 ==s4); // true 两变量引用相同对象
}
比较对象时,一般用equal()方法。
Object类方法定义:public boolean equals(Object obj){ return (this == obj);}
不同的类可方便的对该对象进行覆盖。String类就覆盖了Object类的equals()方法,所以x1行输出true.
a==b 如果a,b引用同一对象,则返回true;
a.equals(b) 如果a对象内容和b对象内容相同,则返回true
如果未重载equals()方法的类对象使用该方法与另一个对象进行比较,则调用Object的equals()方法,仍然是对象的比较,返回值为false。
⑷ Java中的Object是什么
Object是所有类的基类,这个你可以查询jdk文档了解,所有类都继承自Object。
1.Object类是所有类的父类,位于java.lang包中。
2.数组也是Object类的子类。
3.Object类的常用方法有:
toString();
equals();
hashCode();
objects这种参数定义是在不确定方法参数的情况下的一种多态表现形式。即这个方法可以传递多个参数,这个参数的个数是不确定的。这样你在方法体中需要相应的做些处理。因为Object是基类,所以使用objects这样的参数形式,允许一切继承自Object的对象作为参数。这种方法在实际中应该还是比较少用的。
obj这样的形式,就是一个Object数组构成的参数形式。说明这个方法的参数是固定的,是一个Object数组,至于这个数组中存储的元素,可以是继承自Object的所有类的对象。
这些基础东西应该多看几遍"Think in java"。
⑸ java object 有哪些方法
Java.lang.object类中有几个方法不是final的,我们会经常用重写它们,
protected Object clone() 创建并返回此对象的一个副本。
boolean equals(Object obj) 指示某个其他对象是否与此对象“相等”。
protected void finalize() 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
int hashCode() 返回该对象的哈希码值。
String toString() 返回该对象的字符串表示。
1、clone()
我们为什么要用clone()?
当我们需要一个与某个对像时一模一样的对像时,但它们又是相互独立的,对它们各自的操作不会影响到另外的一个,这时候用clone()就可以
实现,当然,其他的方法也可以实现,但是重写clone()简单,高效
有一个不没重写clone()的例子,能帮助我们更好的去理解clone(),如下:
public class Test
{
public static void main(String[] args){
A a1=new A();
A a2=new A();
a1.name="a1";
a2=a1;
a2.name="a2";
System.out.println("a1.name="+a1.name);
System.out.println("a2.name="+a2.name);
}
}
class A
{
public String name;
}
输出结果为:a1.name=a2;
a2.name=a2;
下面这个是重写了clone()的例子
public class Test
{
public static void main(String[] args) throws CloneNotSupportedException {
A a1=new A();
A a2=new A();
a1.name="a1";
a2=(A) a1.clone();
a2.name="a2";
System.out.println("a1.name="+a1.name);
System.out.println("a2.name="+a2.name);
}
⑹ 在java中创建对象到底有多少种方法
Java中创建对象的四种方式
1.用new语句创建对象,这是最常见的创建对象的方法。
2.运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。
3.调用对象的clone()方法。
4.运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。
下面演示了用前面3种方式创建对象的过程:
public class Customer implements Cloneable{
private String name;
private int age;
public Customer(){
this("unknown",0);
System.out.println("call default constructor");
}
public Customer(String name,int age){
this.name=name;
this.age=age;
System.out.println("call second constructor");
}
public Object clone()throws CloneNotSupportedException{
return super.clone();
}
public boolean equals(Object o){
if(this==o)return true;
if(! (o instanceof Customer)) return false;
final Customer other=(Customer)o;
if(this.name.equals(other.name) && this.age==other.age)
return true;
else
return false;
}
public String toString(){
return "name="+name+",age="+age;
}
public static void main(String args[])throws Exception{
//运用反射手段创建Customer对象
Class objClass=Class.forName("Customer");
Customer c1=(Customer)objClass.newInstance(); //会调用Customer类的默认构造方法
System.out.println("c1: "+c1); //打印name=unknown,age=0
//用new语句创建Customer对象
Customer c2=new Customer("Tom",20);
System.out.println("c2: "+c2); //打印name=tom,age=20
//运用克隆手段创建Customer对象
Customer c3=(Customer)c2.clone(); //不会调用Customer类的构造方法
System.out.println("c2==c3 : "+(c2==c3)); //打印false
System.out.println("c2.equals(c3) : "+c2.equals(c3)); //打印true
System.out.println("c3: "+c3); //打印name=tom,age=20
}
}
除了以上4种显式地创建对象的方式以外,在程序中还可以隐含地创建对象,包括以下几种情况:
1.对于java命令中的每个命令行参数,Java虚拟机都会创建相应的String对象,并把它们组织到一个String数组中,再把该数组作为参数传给程序入口main(String args[])方法。
2.程序代码中的String类型的直接数对应一个String对象。
3.字符串操作符“+”的运算结果为一个新的String对象。
4.当Java虚拟机加载一个类时,会隐含地创建描述这个类的Class实例.