【原】Java学习笔记021 - Object
package cn.temptation;
public class Sample01 {
public static void main(String[] args) {
// 类 Object:是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。
Person person = new Person();
System.out.println(person); // cn.temptation.Person@15db9742
// Object类的成员方法:
// int hashCode() :返回该对象的哈希码值。
// hashCode 和 对象在内存中的地址值有关,可以理解为对象在内存中的地址值
System.out.println(person.hashCode()); // 366712642(十进制值)-----> 15db9742(十六进制值)
System.out.println(Integer.toHexString(person.hashCode())); // 15db9742
}
}
// 显式的描述该类继承自Object类(平时写代码时都省略了这个继承)
class Person extends Object {
}
package cn.temptation;
public class Sample02 {
public static void main(String[] args) {
// Objec类的常用成员方法:
// Class<?> getClass() :返回此 Object 的运行时类。
// Class类:Class类的实例表示正在运行的 Java 应用程序中的类和接口。
// Class类的常用成员方法:
// String getName() :以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
Human human = new Human();
Class clazz = human.getClass();
System.out.println(clazz); // class cn.temptation.Human
System.out.println(clazz.getName()); // cn.temptation.Human
// 链式编程
System.out.println(human.getClass().getName()); // cn.temptation.Human
}
}
class Human {
}
package cn.temptation;
public class Sample03 {
public static void main(String[] args) {
// Object类的常用成员方法:
// String toString() :返回该对象的字符串表示。
// Animal animal = new Animal();
// System.out.println(animal); // cn.temptation.Animal@15db9742
// System.out.println(animal.toString()); // cn.temptation.Animal@15db9742
// 通过观察,发现直接打印对象 和 使用对象从Object类继承而来的toString()方法打印出的结果是一致
// 对比JDK中Object类的源码,其实toString方法就是这样的实现
// System.out.println(animal.getClass().getName() + "@" + Integer.toHexString(animal.hashCode())); // cn.temptation.Animal@15db9742
// 既然做了重写,那么就不再使用Object中的toString方法,使用子类重写的toString方法
Animal animal = new Animal("张三", 20);
System.out.println(animal);
System.out.println(animal.toString());
}
}
class Animal extends Object {
// 成员变量
private String name;
private int age;
// 构造函数
public Animal() {
super();
}
public Animal(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类中继承而来的toString方法
// @Override
// public String toString() {
// return "Animal [name=" + this.name + ", age=" + this.age + "]";
// }
// 使用alt+shift+s,alt+shift+s可以自动生成toString方法
@Override
public String toString() {
return "Animal [name=" + name + ", age=" + age + "]";
}
}
// Object类中的toString()方法源码
//public String toString() {
// return getClass().getName() + "@" + Integer.toHexString(hashCode());
//}
package cn.temptation;
public class Sample04 {
public static void main(String[] args) {
// 基本数据类型 使用 == 判断值是否相等
// int i = 2;
// int j = 3;
// System.out.println(i == j); // false
// 引用数据类型,使用 == 判断地址值是否相同
Man man1 = new Man("张三", 20);
Man man2 = new Man("张三", 20);
System.out.println(man1); // cn.temptation.Man@15db9742
System.out.println(man2); // cn.temptation.Man@6d06d69c
System.out.println(man1 == man2); // false
Man man3 = man1;
System.out.println(man3); // cn.temptation.Man@15db9742
System.out.println(man1 == man3); // true
System.out.println(man2 == man3); // false
System.out.println("--------------------------------------------");
// Object类的常用成员方法:
// boolean equals(Object obj) :指示其他某个对象是否与此对象“相等”。
// System.out.println(man1.equals(man2)); // false
// System.out.println(man1.equals(man3)); // true
// System.out.println(man2.equals(man3)); // false
// 首先直接使用Object类的equals方法,其实还是使用 == 进行比较,不符合要求(我们希望比较对象们的特征是否相同)
// 所以,考虑重写继承过来的equals方法
System.out.println(man1.equals(man2)); // true
System.out.println(man1.equals(man3)); // true
System.out.println(man2.equals(man3)); // true
// 注意:== 就可以判断基本数据类型的值是否相等;需要重写equals方法来判断引用数据类型的内容是否相等
}
}
class Man extends Object {
// 成员变量
private String name;
private int age;
// 构造函数
public Man() {
super();
}
public Man(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;
}
// 从equals方法的说明,看到要重写equals方法,需要先重写hashCode方法
// @Override
// public int hashCode() {
// int temp = 123;
// int result = 1;
//
// result = temp * result + age;
// result = temp * result + ((name == null) ? 0 : name.hashCode());
//
// return result;
// }
// 重写从Object类中继承而来的equals方法
// @Override
// public boolean equals(Object obj) {
// // 情况1、如果传入的对象是自身,不用比较了,空间是同一块空间,返回true
// if (this == obj) {
// return true;
// }
//
// // 情况2、如果传入的对象是null值,那也不用比较了,直接返回false
// if (obj == null) {
// return false;
// }
//
// // 情况3、比较当前对象 和 传入对象的运行时类是否相同,如果类类型都不相同,那也不用比较了,直接返回false
// if (this.getClass() != obj.getClass()) {
// return false;
// }
//
// // 情况4、equals方法传入的参数类型是Object类型,但是拿来比较的对象本质是Man类型的,是有name属性和age属性的,所以需要进行向下转型
// Man temp = (Man) obj;
//
// // 对基本数据类型的age属性进行比较
// if (this.age != temp.age) {
// return false;
// }
//
// // 对引用数据类型的name属性进行比较
// // String 类代表字符串。
// // String类的常用成员方法:
// // boolean equals(Object anObject) :将此字符串与指定的对象比较。当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true。
// if (this.name == null || temp.name == null) {
// return false;
// } else if (!this.name.equals(temp.name)) {
// return false;
// }
//
// return true;
// }
// 使用alt+shift+s,alt+shift+h进行hashCode方法和equals方法的重写
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Man other = (Man) 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;
}
}
// Object类中的equals方法源码
//public boolean equals(Object obj) {
// return (this == obj);
//}
package cn.temptation;
import java.util.Scanner;
public class Sample05 {
public static void main(String[] args) {
// 类 Scanner:一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。
// Scanner类的构造函数:
// Scanner(InputStream source) :构造一个新的 Scanner,它生成的值是从指定的输入流扫描的。
// Scanner类的常用成员方法:
// void close() :关闭此扫描器。
// 类 InputStream:此抽象类是表示字节输入流的所有类的超类。
// 类 System:System 类包含一些有用的类字段和方法。它不能被实例化。
// System类的字段:
// static InputStream in :“标准”输入流。此流已打开并准备提供输入数据。通常,此流对应于键盘输入或者由主机环境或用户指定的另一个输入源。
System.out.println("输入数字:");
Scanner scanner = new Scanner(System.in);
int i = scanner.nextInt();
scanner.close();
System.out.println("i:" + i);
}
}
package cn.temptation;
import java.util.Scanner;
public class Sample06 {
public static void main(String[] args) {
// Scanner类的常用成员方法:
// 1、void close() :关闭此扫描器。
// 2、next()方法和nextXXX()方法:获取扫描器扫描的内容
// 3、hasNext()和hasNextXXX()方法:在获取扫描器扫描的内容之前,先判断一下扫描的内容是否是指定的数据类型
System.out.println("输入数字:");
Scanner scanner = new Scanner(System.in);
// 虽然要求用户输入数字,但是用户的输入是具有未知性的,输入的不是数字时,可能会产生异常:java.util.InputMismatchException
// int i = scanner.nextInt();
// 改进方案:先使用hasNext()方法 和 hasNextXXX()方法进行操作前的检查工作
if (scanner.hasNextInt()) {
int i = scanner.nextInt();
System.out.println("i:" + i);
} else {
System.out.println("输入的不是int类型的数据");
}
scanner.close();
}
}
【原】Java学习笔记021 - Object的更多相关文章
- 1.9(java学习笔记)object类及toString()与equals()方法
object类 java中objec是所有类公共的父类,一个类只要没有明显的继承某一类,那么它就是继承object类. 例如 class Person {......};和class Person e ...
- Java学习笔记之——Object类
所有类的祖先 如果一个类没有显式继承,则继承Object 每一个类都直接或间接的是Object的子类 相关API: protected Objectclone() 创建并返回此对象的副本. boole ...
- Java学习笔记之Object常用方法
Object:万类之祖 == : 比较的是是否是同一个对象,比较的是地址 equals: 是Object里面的方法,默认的是==,比较的是地址,但在String类型里重写为比较内容 一般我们在 ...
- java学习笔记之基础篇
java选择语句之switch //switch可以用于等值判断 switch (e) //int ,或则可以自动转化成int 的类型,(byte char short)枚举jdk 7中可以防止字 ...
- java学习笔记6--类的继承、Object类
接着前面的学习: java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) java学习笔记2--数据类型.数组 java学习笔记 ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- java学习笔记16--I/O流和文件
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input Output)流 IO流用来处理 ...
- java学习笔记13--反射机制与动态代理
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
随机推荐
- 熟悉使用Github,VS进行项目的开发(第二次作业)
git地址 https://github.com/Jason98w git用户名 Jason98w 学号后5位 72323 博客地址 https://www.cnblogs.com/jason5689 ...
- 使用vue-cli搭建vue项目
1.安装node环境,然后在命令行输入node -v 和npm -v 查看版本号 2.在正式开始项目之前我们先介绍一下vue-cli,vue-cli是一个脚手架工具,vue-cli是帮助我们写好vue ...
- Java8 LocalDateTime获取时间戳(毫秒/秒)、LocalDateTime与String互转、Date与LocalDateTime互转
本文目前提供:LocalDateTime获取时间戳(毫秒/秒).LocalDateTime与String互转.Date与LocalDateTime互转 文中都使用的时区都是东8区,也就是北京时间.这是 ...
- Asp.Net MVC路由生成URL过程
这次谈一谈Asp.Net MVC中所学到的路由生成URL的相关技术,顺便提一提遇到的一些坑,真的是掉坑掉多了,也就习以为常了,大不了从坑里再爬出来.初学者,包括我,都以为,mvc的核心是模型视图控制器 ...
- Java 的强引用、弱引用、软引用、虚引用
1.强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.如下: Object o=new Object(); // 强引用 当内存空间 ...
- leetcode — candy
/** * Source : https://oj.leetcode.com/problems/candy/ * * There are N children standing in a line. ...
- Jenkins+Maven+Gitlab+Tomcat 自动化构建打包、部署
一.环境需求 本帖针对的是Linux环境,Windows或其他系统也可借鉴.具体只讲述Jenkins配置以及整个流程的实现. 1.JDK(或JRE)及Java环境变量配置,我用的是JDK1.8.0_1 ...
- 重写(override)和重载(overload)的区别
override(重写): 是进行基类中函数的重写,是面向对象的概念 重载(overload):是方法的名称相同,参数或参数类型不同,进行多次重载以适应不同的需要.overload 是面向对象的概念.
- 将excel按照某一列拆分成多个文件(方案整理)
1解决方案:将excel按照某一列拆分成多个文件 https://blog.csdn.net/ntotl/article/details/79141314 2遇到的问题:解决vbe6ext.olb不能 ...
- php 使用Glob() 查找文件技巧
定义和用法 glob() 函数返回匹配指定模式的文件名或目录. 该函数返回一个包含有匹配文件 / 目录的数组.如果出错返回 false. 参数 描述 file 必需.规定检索模式. size 可选.规 ...