不积跬步,无以至千里;不积小流,无以成江海。
Java语言基础
Java的 Object 类
Object类是一个特殊的类,是所有类的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类。
Object类是所有类的顶层父类,所有的类都直接或间接的继承自他。
Object类位于Java.lang包中,Java.lang 中包括着Java最基础的核心类在编译时会自动导入。
Object类包括的常用方法:
1. public final Class getClass() //a:返回此 Object 的运行时类。 2. public int hashCode() //a:返回该对象的哈希码值。默认情况下,该方法会根据对象的地址来计算。 3. public boolean equals(Object obj) //判断其他对象与此对象是否“相等” 4. protected native Object clone() throws CloneNotSupportedException //创建并返回此对象的一个副本 5. public String toString() //返回对象的字符串表示 6. public final native void notify() //唤醒在此对象监视器上等待的单个线程 7. public final native void notifyAll() //唤醒在此对象监视器上等待的所有线程 8. public final native void wait(long timeout) throws InterruptedException //使当前对象的线程等待 timeout 时长 9. public final void wait(long timeout, int nanos) throws InterruptedException //使当前对象的线程等待 timeout 时长,或其他线程中断当前线程 10. public final void wait() throws InterruptedException //使当前对象的线程等待 11. protected void finalize() throws Throwable {} //垃圾回收时调用该方法
-
getClass()方法
返回此 Object 的运行时类。
package Allmethod; class Person{ private int age; private String name; public Person(int age, String name) { this.age = age; this.name = name; } public void eat() { System.out.println("person is eating!"); } public void play(){ System.out.println("person is playing!"); } } public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Person p = new Person(24, "tutu"); System.out.println(p); p.eat(); System.out.println(p.getClass()); System.out.print(p.getClass().getSimpleName()); } }
程序输出:
Allmethod.Person@15db9742 person is eating! class Allmethod.Person Person
-
hashcode()方法
是Object类的native方法,返回值为int类型,根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的字段等)映射成一个数值,这个数值称作为散列值。
package Allmethod; class Person{ private int age; private String name; public Person(int age, String name) { this.age = age; this.name = name; } public void eat() { System.out.println("person is eating!"); } public void play(){ System.out.println("person is playing!"); } } public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Person p = new Person(24, "tutu"); Person p1 = new Person(25, "tutu"); System.out.println(p); p.eat(); String str = "123"; String str1 = "1" + "23"; String str2 = new String("123"); System.out.println(p.hashCode()); System.out.println(p1.hashCode()); System.out.println(str.hashCode()); System.out.println(str1.hashCode()); System.out.println(str2.hashCode()); System.out.println(str == str2); } }
程序输出:
Allmethod.Person@15db9742 person is eating! 366712642 1829164700 48690 48690 48690 false
- equals()方法
判断两个对象是否等价,通过某个特征值来判断两个对象是否“等价”,当这两个对象等价时,判断结果为true,否则结果为false。
在很多情况下,并不是要求两个对象只有引用相同时(此时二者为一个对象)才“判定为等价”,这就需要程序员来界定两个实例对象判断等价的条件,即设定要比较的特征值。
举个例子,当两个人的名字相等时,则为true:
package Allmethod; class Person{ private int age; private String name; public Person(){ } public Person(int age, String name) { this.age = age; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name){ this.name = name; } public boolean equals(Object object){ if(this == object){ return true; } if(object == null){ return false;//非空性:对于任何非空引用x.equals(null)为false } if(object instanceof Person){ Person other = (Person) object; //需要比较的字段相等,则两个对象相等,返回true return other.getName() == this.getName(); } return false; } } public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Person p = new Person(24, "tututu"); Person p1 = new Person(25, "tutu"); Person p2 = new Person(26, "tutu"); System.out.println(p.equals(p1)); System.out.println(p1.equals(p2)); System.out.println(p.hashCode()); System.out.println(p1.hashCode()); System.out.println(p2.hashCode()); } }
程序输出;
false true 366712642 1829164700 2018699554
- toString() 方法
获取一个对象的完整信息
public String toString();
示例:
class Car{ public void say() { System.out.println("I am car"); } } public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Car per = new Car(); System.out.println(per); System.out.println(per.toString()); } }
程序输出:
jwj.Car@15db9742 jwj.Car@15db9742
这个方法调用与不调用的效果一样,Java 内部输出对象,默认就是 toString();
以后开发中,对象信息的获得可以覆写此方法:
class Car{ private String name; private double price; public Car(String name, double price){ this.name = name; this.price = price; } public String toString() { return "name: " + this.name + "、price: " + this.price ; } } public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Car per = new Car("car", 10.00); System.out.println(per); } }
程序输出:
name: car、price: 10.0