不积跬步,无以至千里;不积小流,无以成江海。

 

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

 

posted on 2019-12-04 10:02  smile学子  阅读(168)  评论(0编辑  收藏  举报