常用类-Object

来源:互联网 发布:淘宝上的油画是真的吗 编辑:程序博客网 时间:2024/06/02 07:00

一.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.StudentSystem.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;}@Overridepublic 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()@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + "]";}//重写equals方法,比较的是两个值是否相等@Overridepublic 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()



原创粉丝点击