toString:

1.每创建一个类时,都要重写 toString 方法,这是敲代码的基本素养;

2.重写规则:简单明了;

3.String 类中也有toString方法(SUN公司写的);

equals:

1.每创建一个类时,都要重写 equals 方法(因为 equals 方法比较的是地址,而我们需要比较对象的内容),这也是敲代码的基本素养;

2.作用:用来比较两个对象是否一致 / 相等;

3.重写规则:看自己的需求(你认为什么东西相等的时,对象相同);

注意:java 中比较基本数据类型大小一律用 “ == ” ,比较引用数据类型用 “ equals方法 ” ;

辅助理解代码;

import java.util.Objects;
class People{
private int old;
private String name;
public People() {
}
public People(int old, String name) {
this.old = old;
this.name = name;
}
public int getOld() {
return old;
}
public void setOld(int old) {
this.old = old;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return "People{" +
"old=" + old +
", name='" + name + '\'' +
'}';
}
//两个人什么时候指的是同一个人?(在此类中只有年龄与名字两种属性的情况下)?那就年龄且名字相同呗
public boolean equals(Object o) {
//若导入的对象就是此对象,那肯定相同
if (this == o) return true;
//若导入的对象地址为空指针或者对象不是此类的实例,那肯定不同
if (o == null ||!(o instanceof People)) return false;
//执行到这里对象 o 一定是 people 的实例,所以可以直接进行向下转型
People p = (People) o;
return this.old == p.old && this.name.equals(p.name);
}
}
class Room{
//房间号
private int no;
//房间类型
private String type;
//房间是否空闲
private boolean status;
public Room() {
}
public Room(int no, String type, boolean status) {
this.no = no;
this.type = type;
this.status = status;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public boolean isStatus() {
return status;
}
public void setStatus(boolean status) {
this.status = status;
}
public String toString() {
return "Room{" +
"no=" + no +
", type='" + type + '\'' +
", status=" + status +
'}';
}
//俩个房间什么时候指的是同一房间?只要房间号相同,那必然就是一个房间呀
public boolean equals(Object o) {
if (this == o) return true;
if (o == null ||!(o instanceof Room)) return false;
Room r= (Room) o;
return this.no==r.no;
}
}
public class 重写equals {
public static void main(String[] args) {
People p1=new People(10,"张三");
People p2=new People(20,"张三");
People p3=new People(10,"李四");
People p4=new People(10,"张三");
System.out.println(p1.equals(p2)?"是同一人":"不是同一人");
System.out.println(p1.equals(p3)?"是同一人":"不是同一人");
System.out.println(p1.equals(p4)?"是同一人":"不是同一人");
Room r1=new Room(101,"单人间",true);
Room r2=new Room(101,"单人间",false);
Room r3=new Room(201,"单人间",true);
System.out.println(r1.equals(r2)?"是同一房间":"不是同一房间");
System.out.println(r1.equals(r3)?"是同一房间":"不是同一房间");
//简洁明了
System.out.println(p1);
//简洁明了
System.out.println(r1);
}
} 运行结果:
--------------------------
不是同一人
不是同一人
是同一人
是同一房间
不是同一房间
People{old=10, name='张三'}
Room{no=101, type='单人间', status=true} Process finished with exit code 0

Object 类中的 finalize ( ) 方法:

1.格式: protected void finalize ( ) throws Throwable   {   方法体    }

2.作用:可以类比静态代码块,因在类加载时,会执行静态代码块中的的代码,所以又称为类加载时机;而在对象内存被垃圾回收器回收时,在其类体中的 finalize ( ) 方法就会执行,所以又叫做垃圾回收时机;

举个栗子:(当qq对象被垃圾回收器回收时,会输出:” qq即将被销毁 “)

class qq{
protected void finalize() throws Throwable {
System.out.println("qq即将被销毁!");
}
}

package与import:
1.package:出现在 java源文件的第一行;格式: package + 包名;

2.import:出现在所有类之上;格式:import + 完整类名 / 包名 . * ;  ,例如:import  java . util . Scanner ;//完整包名,或写成  import  java . util . *  ;//都可以访问” Scanner “类;

3.注意:导包中的 “ * ” 只限于类名,例如:import java.* ; //这样就是错误的;

  访问权限修饰符(按权限大小排序):

修饰对象:属性(4个都行)/方法(4个都行)/类(public / 默认 )/接口(public / 默认)

内部类:

1.分类:静态内部类(类似于静态变量);实例内部类(类似于实例变量);局部内部类(类似于局部变量);

2.由于内部类的缺点(代码可读性差;类没有名字,无法重复使用),所以内部类几乎不用;

3.就匿名内部类稍微记一下:

public class pra{
public static void main(String[] args) {
//对Math对象中的sum方法进行重写,正常应该找一个子类继承Math,再对其方法进行重写,但也可以通过匿名内部类的方法覆盖对其进行重写:
int z=new Math(){
public int sum(int x, int y) {
return x+y;
}
}.sum(1,2);
System.out.println(z);
}
}
class Math {
public int sum(int x,int y){
return 0;
}
} 运行结果:
------------------
3 Process finished with exit code 0

随笔:

1..Object 类中的 hashCode 方法:

1)格式: public native int hashCode ( ) ;   (native 表示底层调用C++程序)

2)作用:通过 哈希算法 运算对象内存地址得到的一个值;

举个栗子:

public class pra{
public static void main(String[] args) {
Math math1=new Math();
System.out.println(math1.hashCode()+"------将math1储存的对象内存地址通过哈希算法得到的值");
Math math2=new Math();
System.out.println(math2.hashCode()+"------将math2储存的对象内存地址通过哈希算法得到的值");
}
}
class Math {
} 运行结果:
-------------------
1163157884------将math1储存的对象内存地址通过哈希算法得到的值
1956725890------将math2储存的对象内存地址通过哈希算法得到的值 Process finished with exit code 0

由于博主目前只是一只猿宝宝,所以有些地方可能说的有些片面,若前辈们能够指点一二就更好了      (~ ̄(OO) ̄)ブ

【JAVA】笔记(6)--- toString方法;equals方法;finalize方法;package与import;内部类;的更多相关文章

  1. [java]final关键字、finally关键字与finalize()方法

    final关键字: final关键字通常指的是“无法改变的”,使用“无法改变”这样修饰可能出于两个原因:设计或者效率. final可以修饰变量.方法和类. 一.final变量 一个既是static又是 ...

  2. Java 声明和访问控制(三) finalize方法 成员访问修饰符

    finalize()方法是Object类的一个方法,在垃圾回收器执行的时候,会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源的回收,例如文件关闭等. 成员访问修饰符: 默认访问:包访问 ...

  3. String类型中ToString hashCode equals compareTo等方法的经典实现

    private final char value[]; private int hash; // Default to 0 public String(String original) { this. ...

  4. Java笔记4-do while循环,break,修饰符,方法的调用

    do while循环语法:do{ //循环体}while(条件表达式); 注:它是先执行循环体,后再判断的循环结构. 如:int i = 0;do{ System.out.println(" ...

  5. Java提高篇——equals()与hashCode()方法详解

    java.lang.Object类中有两个非常重要的方法: 1 2 public boolean equals(Object obj) public int hashCode() Object类是类继 ...

  6. java的finalize()方法与C++的析构函数

    ---<java编程思想> 读书笔记 --- 2017/3/15 读<java编程思想>读到初始化与清理一章,文中提及java的finalize()方法,联想到了C++的析构函 ...

  7. Java finalize方法使用

    <JAVA编程思想>: Java提供finalize()方法,垃圾回收器准备释放内存的时候,会先调用finalize(). (1).对象不一定会被回收. (2).垃圾回收不是析构函数. ( ...

  8. java finalize方法总结、GC执行finalize的过程

    注:本文的目的并不是鼓励使用finalize方法,而是大致理清其作用.问题以及GC执行finalize的过程. 1. finalize的作用 finalize()是Object的protected方法 ...

  9. java的finalize方法使用

    1. finalize的作用 finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法. finalize()与C++中的析构函数 ...

  10. Java类的finalize()方法

    Java的Object类提供了一个finalize()方法,签名如下: protected void finalize() throws Throwable { } 该方法在JVM进行垃圾回收时之行, ...

随机推荐

  1. selenium--常用的获取元素属性

    当我们要设计功能测试用例时,一般会有预期结果,有些预期结果测试人员无法通过肉眼进行判断的.因为自动化测试运行过程是无人值守,一般情况下,脚本运行成功,没有异样信息就标识用户执行成功.那怎么才能知道我打 ...

  2. DIVIDEMIX: LEARNING WITH NOISY LABELS AS SEMI-SUPERVISED LEARNING

    论文阅读: DIVIDEMIX: LEARNING WITH NOISY LABELS AS SEMI-SUPERVISED LEARNING 作者说明 版权声明:本文为博主原创文章,遵循CC 4.0 ...

  3. C++: 基于四叉树数据结构的自适应网格(初探)

    C++: 基于四叉树数据结构的自适应网格 二叉树是一种典型的非线性存储数据结构,查找效率可以达到\(O(log_2N)\),同样,这类树状结构存在许多种变体,详细参考邓俊辉老师的<数据结构C++ ...

  4. 01Prism WPF 入门实战 - 项目准备

    1.概要 这一系列将进行Prism+WPF技术的实战讲解.实战项目内容选型为Email邮件收发的客户端(WeMail),项目结构简单方便大家理解. 相关技术:C#.WPF.Prism 软件开发环境:V ...

  5. Bert文本分类实践(二):魔改Bert,融合TextCNN的新思路

    写在前面 ​ 文本分类是nlp中一个非常重要的任务,也是非常适合入坑nlp的第一个完整项目.虽然文本分类看似简单,但里面的门道好多好多,博主水平有限,只能将平时用到的方法和trick在此做个记录和分享 ...

  6. 暑期 2021 | Serverless Devs 最全项目申请攻略来啦!

    Serverless 是近年来云计算领域热门话题,凭借极致弹性.按量付费.降本提效等众多优势受到很多人的追捧,各云厂商也在不断地布局 Serverless 领域.但是随着时间的发展,Serverles ...

  7. The Data Way Vol.4|开源是创造软件诸多方法中最好的一种形式

    关于「The Data Way」 「The Data Way」是由 SphereEx 公司出品的一档播客节目.这里有开源.数据.技术的故事,同时我们关注开发者的工作日常,也讨论开发者的生活日常:我们聚 ...

  8. vue3 element-plus 配置json快速生成table列表组件,提升生产力近500%(已在公司使用,持续优化中)

    ️本文为博客园首发文章,未获授权禁止转载 大家好,我是aehyok,一个住在深圳城市的佛系码农‍♀️,如果你喜欢我的文章,可以通过点赞帮我聚集灵力️. 个人github仓库地址: https:gith ...

  9. this指向与call,apply,bind

    this指向与call,apply,bind ❝ 「this」问题对于每个前端同学来说相信都不陌生,在平时开发中也经常能碰到,有时候因为「this」还踩过不少坑,并且「this」问题在面试题中出现的概 ...

  10. 常用的SQL查询思维/场景

    前言 现在大多数开发工作中,已经可以使用一些组件或框架提供的强大的条件构造器来完成查询数据了,虽然强大而且方便,但也还是存在很多业务场景需要实打实的编写传统SQL语句.特别一些测试.维护.问题排查的时 ...