常用类-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类型的数据
eg:public boolean hasNextInt();nextInt();
eg: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
- 系统常用类Object
- object-c常用类
- Java常用类--Object
- 常用类-Object
- java常用类--object
- Object类和Object常用方法
- Object类 Object常用成员方法
- 常用类库object类
- Object类的常用方法
- 033、java常用类-Object
- Java常用类--Object详解
- java常用类-Object类、Math类
- (二十一)、常用类:Object类
- 常用类-包装类-Math-Object
- java常用类——Object类
- java常用类(1)Object类
- java常用API中Object类
- java Object类中常用的方法
- 集合的8点建议
- JavaWeb学习心得之JDBC事务
- [杂题 异或 带权并查集] BZOJ2303: [Apio2011]方格染色
- RANSAC算法实现去除误匹配并计算拼接矩阵-随笔
- 配置SqlSessionFactory,整合Mybatis
- 常用类-Object
- 实例分享--语音和自然语言控制智能家居
- IDEA 快捷键
- Web前端工程师-优秀简历汇总
- 使用Sonar进行Java代码质量管理
- 34. Search for a Range
- mybatis如何根据mapper接口生成其实现类
- Qt中文本和图片居中
- 金融类应用上传