常用类-Object

一.Object类

类object是类层次结构的根类。每个类都使用Object作为超类(父类)。所有对象(包括数组)都实现这个类的方法。

1.public int hashCode()

返回该对象的哈希值,hashCode()--->通过哈希算法(哈希表:hashtable)--->地址值(不是实际意义上的地址值!)

2.public final Class getClass()

返回Object运行时的类(涉及Java反射机制,后续补充!)

3.Class类中的方法:public String getName()

String的形式返回此Class对象所表示的实体(类、接口、数组类、基本类型或void)名称
package day_10_10_28.object01;

public class ObjectDemo {
	public static void main(String[] args) {
		//创建学生对象
		Student s1 = new Student();
		System.out.println(s1);   //day_10_10_28.object01.Student@15db9742
		/**
		 *public int hashCode()返回该对象的哈希码值
		 **/
		System.out.println(s1.hashCode());		//1097112149返回的是该对象的哈希值,每次执行值不同
		System.out.println("------------");
		System.out.println("hello".hashCode());  //99162322哈希值不变,每次执行结果相同
		System.out.println("------------");
		/**
		 *public final Class getClass()返回此 Object 的运行时类
		 **/
		Student s2 = new Student();
		Class c1 = s2.getClass();
		System.out.println("c1 = "+c1);		//c1 = class day_10_10_28.object01.Student
		System.out.println("------------");
		
		/**
		 *public String getName():获取当前正在运行的这类的全路径名称!
		 **/
		String name = c1.getName();
		System.out.println("name = "+name);	//name = day_10_10_28.object01.Student,全路径名称
		
	}

}

4.public String toString():
返回该对象的字符串表示(建议所有子类都重写此方法),返回值为:getClass().getName() + '@' + Integer.toHexString(hashCode())

5.toHexString(int i)

Integer类中有一个方法:public static String toHexString(int i):将一个int类型的数据转换成一个十六进制的字符串表现形式
package day_10_10_28.object02;
/**
 * 	如果直接输出对象名称,想要显示当前对象的成员变量的值,那么必须重写Object类中的toString()方法
 * 
 * */
public class ObjectDemo {
	public static void main(String[] args) {
		//创建一个学生对象
		Student s1 = new Student("韩庚",28);
		
		//直接输出对象名称
		System.out.println("s1:"+s1);  //s1:day_10_10_28.object02.Student@15db9742
		/**
		 * 通过查看toString()源码:
		 *  public String toString() {
        		return this.getClass().getName() + "@" + Integer.toHexString(this.hashCode());
    		}	
    		
		 */
		System.out.println("s1:"+s1.getClass().getName()+"@"+Integer.toHexString(s1.hashCode())); 
		System.out.println("s1:"+s1.toString());
		//想要输出对象的成员变量的值,必须重写toString方法,可以自己重写,也可以自动生成
		System.out.println("s1:"+s1);  
		Student s2 = new Student("韩庚",28);
		System.out.println(s1==s2);   //false,比较的是两个地址值

	}

}

package day_10_10_28.object02;

public class Student extends Object {
	//成员变量
	private String name;
	private int age;
	
	public Student() {
		super();	
	}

	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}
	
	
	/*//自己重写toString()
	public String toString(){
		return name+"..."+age;
	}*/
	//自动生成
	
}

6.equals()

public boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。由于object类中的equals()方法底层通过“==”来实现,重写equals()方法,比价两个对象的值(对象的内容)
package day_10_10_28.object03;
public class ObjectDemo {
	public static void main(String[] args) {
	//创建学生对象
	Student s1 = new Student("韩庚",28);
	Student s2 = new Student("韩庚",28);
	System.out.println(s1==s2); 		//false,"=="默认比较的是两个地址值
	System.out.println("---------"); 
	Student s3 = s1;
	System.out.println(s1==s3);   		//true,两个地址值相等
	System.out.println("---------"); 
	/**
	 * equals()方法的源码
	 *   public boolean equals(Object obj) {
    	return (this == obj);
	}
		由于Object类中的equals()方法底层是通过"=="来实现的,所以默认比较的是地址值,如果想比较内容是否相同,需要重写equals()方法
	 * */
	System.out.println(s1.equals(s2));	//false,equals()重写后比较的是两个对象的值是否相等
	}
}
package day_10_10_28.object03;
public class Student {
	private String name;
	private int age;
	
	public Student() {
		super();
	}
	
	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	//toString()
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}

	//重写equals方法,比较的是两个值是否相等

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}	
}




面试题:"=="和equal()方法的区别
==:比较的是两个对象的地址值是否相同,
        equals()方法默认比较的是两个对象的地址值是否相同,如果重写了Object类中的equals()方法,那么默认比较就是两个对象的内容是否相同

7.clone()

protected Object clone() throws CloneNotSupportedException:创建并返回此对象
注意:要使用clone()方法,当前对象必须实现Cloneable接口,并重写Object类中的clone()方法。
方法详解:点击打开链接
/**                
   * 注意事项:
   *  Object 类的 clone 方法执行特定的复制操作。首先,如果此对象的类不能实现接口 Cloneable,则会抛出 CloneNotSupportedException。          
   *  要去使用clone()方法,当前对象所在的类一定要实现cloneable接口,
 */
public class ObjectDemo {
	public static void main(String[] args) throws CloneNotSupportedException {
		Student s1 = new Student("韩庚",28);
		System.out.println("name:"+s1.getName()+"---"+"age:"+s1.getAge());
		//复制s1这个对象
	     Object obj = s1.clone();
	     
	     //向下转型
	     Student s2 = (Student) obj;
	     System.out.println("name:"+s2.getName()+"---"+"age:"+s2.getAge());
	     //通过地址引用的赋值
	     Student s3 = s1;  //把s1地址值赋值s3对象,s3指向s1的堆内存中的地址值
	     System.out.println("name:"+s3.getName()+"---"+"age:"+s3.getAge());
	     

	}

}
package day_10_10_28.object04;
//要去使用clone()方法,当前对象所在的类一定要实现Cloneable接口,
public  class Student implements Cloneable {
	private String name;
	private int age;
	
	public Student() {
		super();
	}

	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	
	//重写Object类中clone()
	protected Object clone() throws CloneNotSupportedException{
		return super.clone();
	}	
}

二.Scanner类

1.Scanner:用来创建一个文本扫描器(键盘录入),需要导包java.util.Scanner;
2.java高级特性:IO流(后续补充)BufferReder:字符缓冲流来键盘录入
3.System类中的静态字段:
   public static final InputStream in:  标准输入流
  InputStream :字节流InputStream is = System.in ;  实质:抽象类多态
   public static final OutputStream out:  标准输出流
4.开发步骤

1)创建键盘录入对象 :Scanner sc = new Scanenr(System.in);
2)录入数据:  int a = sc.nextInt() ;
3)输出:   System.out.println("a:"+a);
5.常用方法:
判断的功能:
hasNextXXX(); 在录入数据之前,加上判断功能,判断是否有下一个可以录入的XXX类型的数据
nextXXX();//通过录入获取这个int类型的数据
e
g:public boolean hasNextInt();nextInt();
注意:会出现的异常:java.util.InputMismatchException:输入和想到的数据不匹配
package day_10_10_28.Scanner;

import java.util.Scanner;

public class ScannerDemo {

	public static void main(String[] args) {
		// 创建键盘录入对象
		Scanner sc = new Scanner(System.in);
		System.out.println("请您输入数据:");
		//是否有下一个可以录入的int类型的数据
		if(sc.hasNextInt()){
			
			//录入数据
			int a = sc.nextInt();
			System.out.println("a:"+a);
		}else{
			//错误提示
			System.out.println("录入的数据类型和想要的不匹配!");
		}

	}
	//java.util.InputMismatchException:输入和想到的数据不匹配
}

注意事项: 先录入int类型的数据,在录入String类型数据,第二次录入的数据没有接收到,直接输出结果了,由于"回车"才能接收数据,回车换行符导致的!
解决方案:
1)在第二次录入String类型数据之前,需要重新创建键盘录入对象录入String类型
2)将sc.nextLine()改为sc.next()



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值