不积跬步,无以至千里;不积小流,无以成江海。
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
浙公网安备 33010602011771号