static,final关键字,Object类的tostring方法,equals方法,hashCode方法

1)static关键字

static可以修饰:属性、方法、代码块

静态方法不能访问非静态 属性 或 方法

属性(变量):
成员变量:
静态变量: 通过 类名.静态变量来访问
通过 对象名.静态变量来访问(是有警告的)
存在于方法区中,有且仅有一份
非静态变量
局部变量
代码块
代码块的执行顺序

1、静态代码块:哪个静态代码块放在前边,就先执行谁
2、普通代码块:哪个普通代码块放在前边,就先执行谁
3、构造方法

如果有两个类,一个类是Father,另一个类是Child , Child 继承了 Father ,
这两个类中都有 构造方法,普通代码块、静态代码块
那么当 new Child() 的时候,执行顺序是什么?

代码块执行顺序:父类static(同级别与出现顺序有关)--->子类static--->父类普通-->父类构造--->子类普通-->子类构造
代码块的作用:

可以对 属性 进行一个初始化的操作

我们在一个类中可以写什么呢?

目前为止:
1、属性:静态属性 和 实例属性
2、方法:静态方法 和 实例方法
3、构造方法: 与类名相同的 ,没有返回的 公开的 方法
4、代码块:静态代码块 和 非静态代码块(普通代码块)
静态代码块 可以为 静态属性 进行 初始化操作
普通代码块 可以为 实例属性 进行初始化操作

2)

final
表示最终的,不可修改的,经常用于修饰类、方法、变量

final 修饰的类,不可以被继承
final 修饰的方法,不能被重写
final 修饰的变量 ,不能被更改
建议:用final 修饰的变量 全部大写

3)

toString() :
本来在Object中的形式:
getClass().getName() + "@" + Integer.toHexString(hashCode());
得到对应的类,从而得到对应的类型,然后 通过计算 hashCode 的 十六进制 数 拼接而成的字符串

重写之后的形式:
String s = "[" + this.studentName + "," +this.sutdentNumber + " , " + this.gender + " , " + this.age + "]" ;
理论上说,可以写任何形式的toString形式,但是,建议使用 属性来写toString

作用:
为了查看到 对象中的 具体的属性 的 值

4)
equals() :
在Object 类中 equals 是这么写的:
public boolean equals(Object obj) {
return (this == obj); // 底层还是用 == 比较,比较的还是地址
}

我们判断两个对象是否"相等"
可能在某种情况下( 在某种条件下 ) 我们认为是相等的
针对于学生来说:
学号、姓名、年龄、性别都相等,那么我就认为他们是相等的

官方建议: 重写 hashCode()
如果说 不重写 hashCode() , 会默认调用 Object 的hashCode()方法,但是 不一定能保证 维护 hashCode 方法的常规协定
5)
hashCode() :
hashCode 是 一种 特殊的 数组 通过 一系列的公式来算 hashCode

元素 11 22 33 44 55
下标 0 1 2 3 4
(下标+ 1 ) × 11

如果重写了 equals 必须重写 hashCode 方法
保证 维护 hashCode 方法的常规协定(三条)

时间: 2024-10-08 20:50:25

static,final关键字,Object类的tostring方法,equals方法,hashCode方法的相关文章

第十六节(Object类(toString() 、finalize、equals方法)

Object 类类 a) Object 类是所有 Java 类的根基类 b) 如果在类的声明中未使用 extends 关键字指明其基类,则默认基类为 Object 类 toString() 返回该对象的字符串表示. 通常 toString 方法会返回一个 “以文本方式表示” 此对象的 字符串,Object 类的 toString 方法返回一个字符串,该字符串由类名加标记 @和此对象哈 希码的无符号十六进制表示组成 /* 关于Object 中的 toString 方法: sun在Object类中设

部分类、静态类、Object类、ToString()方法、扩展方法的使用

部分类.静态类.Object类.ToString()方法.扩展方法的使用 一:部分类: 前言:partial关键字允许将类.结构.方法或者接口放在多个文件中.一般情况下,一个类全部驻留在单个文件中.但有时,多个开发人员需要访问同一类的时候,或者某种类型的代码生成器生成了一个类的某部分.所以把类放在多个文件中是有益的. 如果声明类时使用了下面的关键字.这些关键字就必须应用于同一个类中的所有的部分: public  private  protected  internal  abstract  se

Java基础知识强化28:Object类之toString()方法

1. Object类的toString()方法: public  String  toString():返回该对象的字符串表示 2. 案例演示: (1)Student类: 1 package cn.itcast_02; 2 3 public class Student { 4 private String name; 5 private int age; 6 7 public Student() { 8 super(); 9 } 10 11 public Student(String name,

java进阶11 static final关键字

static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块. 被static修饰的成员变量和成员方法独立于该类的任何对象,也就是说. 它不依赖类的特定的实例,被类的所有实例共享. package Static; public class Static { /* * 使用的情况 * 1:在对象之间共享值时 * 2:方便访问变量 * */ public static void main(String[] args){ Sta

Java:验证在类继承过程中equals()、 hashcode()、toString()方法的使用

以下通过实际例子对类创建过程汇中常用的equals().hashcode().toString()方法进行展示,三个方法的创建过程具有通用性,在项目中可直接改写. //通过超类Employee和其子类Manager ,验证在类继承过程中equals().hashcode().toString()方法的使用.package equals;public class EqualsTest{    public static void main(String[] args){        Employ

java学习笔记之面向对象static,final关键字

java学习笔记之面向对象static,final关键字 一.static关键字 1.概述: static静态的,被static修饰的成员属于类,不属于单个对象,被所有对象所共享,存在静态区中,静态的成员优先于对象加载到内存中. 2.statc修饰成员的使用方式:(被static修饰的成员变量有默认值) /* 1.可以通过对象直接使用,不推荐使用 2.通过类名调用静态成员 类名.静态成员变量 类名.静态成员方法 */ 3.static的特点 /* 1.在同一个类中,静态成员只能访问静态成员,非静

集合框架比较两个对象是否相同(equals和hashCode方法)

package com.dcz.hashset; import java.util.HashSet; import java.util.Set; /** * HashSet是接口最常用的实现类,顾名思义,底层采用了哈希表算法. * * 在HashSet中如何判断两个对象是否是否相等问题分析: * 1. 要用两个对象的equals方法比较,返回true说明对象相同. * 2. 两个对象的hashCode方法返回值相同. * * 对象hashCode决定了在哈希表中的存储位置. * * 向HashS

List去重为什么要写equals(),hashCode()方法

一,各个集合的特点: Collection(集合):容器,用于存放对象(引用类型.基本类型需要自动装箱) List(列表):元素有序,元素可以重复 (有索引). 通过元素的equals()方法判断是否重复. Set(集):元素无序,不可重复 (没有索引). 遍历只能用Iterator迭代器和增强for, 不能使用普通for遍历. ArrayList(数组列表): 查询快,增删慢. LinkedList(链表): 查询慢,增删快. HashSet(哈希表): 查询快,增删慢. (底层其实就是Map

Java中的equals和hashCode方法

本文转载自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这两个方法. equals()和hashCode()方法是用来在同一类中做比较用的,尤其是在容器里如set存放同一类对象时用来判断放入的对象是否重复.这里我们首先要明白一个问题: equals()相等的两个对象,hashcode()一定相等,equals()不相等的两个对象,却并不能证明他们的h