[2017.10.28]Object&Scanner
来源:互联网 发布:公司招人用什么软件 编辑:程序博客网 时间:2024/06/06 01:05
Object类
1.概念:
类 Object 是类层次结构的根类。每个类都使用 Object 作为超类(父类)。所有对象(包括数组)都实现这个类的方法。
2.类型:
public int hashCode()返回该对象的哈希码值
hashCode()—–>通过哈希算法(哈希表:hashtable)—->地址值(不是实际意义上的地址值!)
public final Class getClass()返回此 Object 的运行时类 (Java反射机制中讲!)
3.Class类中有一个方法:
public String getName()以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
4.演示:
public class ObjectDemo { public static void main(String[] args) { //创建学生对象 Student s1 = new Student() ; System.out.println(s1.hashCode());//1460821906 Student s2 = new Student() ; System.out.println(s2.hashCode());//2045891656 Student s3 = new Student() ; System.out.println(s3.hashCode());// System.out.println("hello".hashCode()) ;// public final Class getClass()返回此 Object 的运行时类 Class c1 = s1.getClass() ;// System.out.println("c1:"+c1);//class org.westos.object_01.Student //public String getName():获取当前正在运行的这类的全路径名称! String name = c1.getName() ; System.out.println("name:"+name);//org.westos.object_01.Student :全路径名称 //org.westos.object_01.Student }}
5.Object的另一个方法:
public String toString();返回该对象的字符串表示(建议所有子类都重写此方法)
6.Integer类中有一个方法:
public static String toHexString(int i):将一个int类型的数据转换成一个十六进制的字符串表现形式
7.如果直接输出对象名称,想要显示当前对象的成员变量的值,那么必须重写Object类中的toString()方法
8.演示:
public class ObjectDemo { public static void main(String[] args) { //创建一个学生对象 Student s1 = new Student("高圆圆",27) ; //直接输出对象名称 /*System.out.println("s1:"+s1);//org.westos.object_02.Student@7439aca7 //public String toString() System.out.println("toString():"+s1.toString());//org.westos.object_02.Student@7439aca7 System.out.println("--------------------------");*/ /** * 通过查看toString()源码: * public String toString() { return this.getClass().getName() + "@" + Integer.toHexString(this.hashCode()); } toString()<==> 对象名.getClass().getName() +"@" +Integer.toHexString(对象名.hashCode()) */ System.out.println(s1.getClass().getName()+"@"+Integer.toHexString(s1.hashCode()));// System.out.println(s1.toString()); //org.westos.object_02.Student@28169674 //org.westos.object_02.Student@28169674 //直接对象名称,想要显示成员变量的值,怎么办?// System.out.println(s1); Student s2 = new Student("高圆圆", 27) ; System.out.println("s2:"+s2); System.out.println(s1==s2); }}
//学生类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; } 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 name+"---"+age; }*/ //alt+shift+s->s //自动生成即可! @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; }}
9.Object中的另一个方法:
public boolean equals(Object obj)指示其他某个对象是否与此对象“相等”.
- 面试题:
==和equal()方法的区别
==:比较的是两个对象的地址值是否相同,
equals()方法默认比较的是两个对象的地址值是否相同,如果重写了Object类中的equals()方法,那么默认比较就是两个对象的内容是否相同
11.使用工具自动生产equals()方法
javascript:Array对象,Number对象,String对象,valueOf():====>s1.valueOf(s2) ;
比较是内容是否相同
12.演示:
public class ObjectDemo { public static void main(String[] args) { //创建学生对象 Student s1 = new Student("高圆圆", 27) ; Student s2 = new Student("高圆圆",27) ; System.out.println(s1==s2); System.out.println("------------------"); Student s3 = s1 ; System.out.println(s1==s3); System.out.println("-------------------"); System.out.println(s1.equals(s2));//由于重写Object中的equals()方法,所以比较的是对象的内容是否相同! /** * equals()方法的源码 * public boolean equals(Object obj) { return (this == obj); } 由于Object类中的equals()方法底层是通过"=="来实现的,所以默认比较的是地址值,如果想比较内容是否相同,需要重写equals()方法 * */ }}
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 + "]"; } //重写了Object类中的equals()方法 @Override public boolean equals(Object obj) { //Studnet s2 = new Student() ; if (this == obj) return true; if (obj == null) //当前传入过来的对象是否为空 return false; if (getClass() != obj.getClass()) //this.getClass() != s2.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; } /** * 对象名 instanceof 类:判断该对象是否是该类的一个实例 * */}
13.Object类中的其他两个方法:
protected void finalize()throws Throwable:当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法,但是,什么时候调用垃圾回收器不确定;
14.System类中的一个方法:
public void gc():运行垃圾回收器,这个垃圾回收器最终调用的就是finalize()方法
protected Object clone():创建并返回此对象的一个副本
throws CloneNotSupportedException注意事项:
Object 类的 clone 方法执行特定的复制操作。首先,如果此对象的类不能实现接口 Cloneable,则会抛出 CloneNotSupportedException.
15.演示:
public class ObjectDemo { public static void main(String[] args) throws CloneNotSupportedException {//该异常是编译时期异常 //创建s1这个学生对象 Student s1 = new Student() ; s1.setName("高圆圆") ; s1.setAge(27) ; System.out.println(s1.getName()+"---"+s1.getAge()); //复制s1这个对象 Object obj = s1.clone() ; //向下转型: Student s2 = (Student) obj; System.out.println(s2.getName()+"---"+s1.getAge()); System.out.println("----------------------"); //没有讲clone方法之前: Student s3 = s1; //把s1地址值赋值s3对象,s3指向s1的堆内存中的地址值 System.out.println(s3.getName()+"---"+s3.getAge()); }}
//学生类//要去使用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() @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); }}
Scanner
1.
1)Scanner:用来创建一个文本扫描器(键盘录入)
2)java高级特性:IO流(后面讲)
BufferReder:字符缓冲流来键盘录入
java.util.Scanner;s
Scanner sc = new Scanenr(System.in);
2.System类中的静态字段:
public static final InputStream in: 标准输入流
InputStream :字节流 InputStream is = System.in ; 实质:抽象类多态
public static final OutputStream out: 标准输出流
- 开发步骤:
1)创建键盘录入对象
2)录入数据
3)输出
4.演示:
public class ScannerDemo { public static void main(String[] args) { //创建键盘录入对象 Scanner sc = new Scanner(System.in) ; //录入数据 int a = sc.nextInt() ; System.out.println("a:"+a); }}
5.Scanner类中常用的方法:
判断的功能:
细节:可以添加逻辑判断
hasNextXXX(); 在录入数据之前,加上判断功能,判断是否由下一个可以录入的XXX类型的数据
nextXXX();//通过录入获取这个int类型的数据
举例:
public boolean hasNextInt()
nextInt();
nextInt():录入int类型的数据
nextLine():录入一个字符串类型
- java.util.InputMismatchException:
输入和想到的数据不匹配
7.演示:
public class ScannerDemo2 { public static void main(String[] args) { //创建键盘录入对象 Scanner sc = new Scanner(System.in) ; if(sc.hasNextInt()){ //是否有下一个可以录入的int类型的数据 //录入数据 int a = sc.nextInt() ; System.out.println("a:"+a); }else{ //错误提示 System.out.println("录入的数据类型和想要的不匹配!"); } //java.util.InputMismatchException:输入和想到的数据不匹配 }}
8.Scanner类中的注意事项:
先录入int类型的数据,在录入String类型数据,第二次录入的数据没有接收到,直接输出结果了,由于”回车”才能接收数据
回车换行符导致的!
解决方案:
在第二次录入String类型数据之前,需要重新创建键盘录入对象录入String类型
9.演示:
public class ScannerDemo3 { public static void main(String[] args) { //键盘录入对象 Scanner sc = new Scanner(System.in) ; //先录入两个int类型的数据 /*int a = sc.nextInt() ; int b = sc.nextInt() ; System.out.println("a:"+a+",b:"+b);*/ //录入两个String类型的数据 //hasNextLine /*String a = sc.nextLine() ; String b = sc.nextLine() ;*/ //先录入String类型的数据,在录入int类型的数据 /*String a = sc.nextLine() ; int b = sc.nextInt() ;*/ //先录入int类型,再录入String类型 int a = sc.nextInt() ;// String b = sc.nextLine() ; String b = sc.next() ; /* int a = sc.nextInt() ; //创建键盘录入对象 Scanner sc2 = new Scanner(System.in) ; String b = sc2.nextLine() ; */ System.out.println("a:"+a+",b:"+b); }}
- [2017.10.28]Object&Scanner
- Vuforia Object Scanner 使用
- API--Object,String,Scanner--1
- API--Object,String,Scanner--2
- 超类Object和键盘类Scanner
- eclipse工具及Object类、Scanner类
- 常用API——Object,Scanner,String
- Vuforia Object Scanner Vuforia对象扫描仪
- 常用类(Object,Scanner,String,StringBuffer),递归
- OllyDbg完全教程 Object扫描器[Object scanner] Implib扫描器 [Implib scanner]
- Scanner
- scanner
- Scanner
- scanner
- Scanner
- Scanner
- Scanner
- Scanner
- windows PE文件结构及其加载机制
- 小乘劲力说
- java多线程
- android 网络连接的判断
- java中不带package和带package的编译运行方式
- [2017.10.28]Object&Scanner
- C++ auto和decltype
- CCF 201709-3 JSON查询
- Linux各文件夹的作用
- DenseNet
- linux系统基本操作——延迟
- 11月01日(第3天_回纹数、直方图和质数)
- android 常用权限和依赖
- Hibernate之批量查询