笔上得来终觉浅,绝知此事要躬行
🔥 个人主页:星云爱编程
🔥 所属专栏:javase
🌷追光的人,终会万丈光芒
🎉欢迎大家点赞👍评论📝收藏⭐文章
目录
一、Object类
1.1equals方法
1.1.1==号
1.1.2equals方法
1.1.3如何重写equals方法?
1.2hashCode方法
1.2.1基本介绍
1.2.2hashCode小结
1.3toString方法
1.3.1基本介绍
1.3.2重写toString
1.4finalize方法
二、类变量(静态变量)
2.1类变量引入
2.2基本介绍
2.3内存图
2.4基本语法
2.5注意事项及使用细节
三、类方法(静态方法)
3.1基本介绍
3.2使用场景
3.3注意事项和使用细节
结语
一、Object类
1.1equals方法
1.1.1==号
==是一个比较运算符:
①即可以判断基本类型,又可以判断引用类型
②如果判断基本类型,判断的是值是否相等
③如果判断引用类型,判断的是地址是否相同,即判定是不是同一个对象
1.1.2equals方法
①equals是Object类中的方法,只能判断引用类型;
②默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相同。
1.1.3如何重写equals方法?
应用实例: 判断两个Person对象的内容是否相等,如果两个Person对象的各个属性值都一样,则返回true,反之false。
方法:
(1)判断两个Person对象的内容是否相等
(2)如果两个Person对象的各个属性值都一样,则返回true,反之false
class Person{
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if(obj==this){//判断是不是同一个对象
return true;
}
if(!(obj instanceof Person)){//判断是不是同类
return false;
}
return ((Person) obj).age == age && ((Person) obj).name.equals(name);//判断各属性
}
}
1.2hashCode方法
1.2.1基本介绍
使用例子:
public class Test7 {
public static void main(String[] args) {
AA aa=new AA();
AA aa2=new AA();
AA aa3=aa;
System.out.println("aa.hashCode()="+aa.hashCode());
System.out.println("aa2.hashCode()="+aa2.hashCode());
System.out.println("aa3.hashCode()="+aa3.hashCode());
}
}
class AA{}
1.2.2hashCode小结
①提高具有哈希结构的容器效率
②两个引用,如果指向的是同一个对象,则哈希值相同。
③两个引用,如果指向的不是同一个对象,则哈希值不同。
④哈希值主要根据地址号来的,不能完全将哈希值等价于地址
1.3toString方法
1.3.1基本介绍
默认返回:全类名+@+哈希值的十六进制表示 。
子类往往重写toString方法,用于返回对象的属性信息。
1.3.2重写toString
(1)重写toString方法,打印对象或拼接对象时,都会自动调用该对象的toString形式。
例如:
public class Test6 {
public static void main(String[] args) {
Person person = new Person("李白",19);
System.out.println(person);
System.out.println(person.toString());
}
}
class Person{
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
(2)当直接输出一个对象时,toString 方法会被默认的调用。如上方代码中System.out.println(person); 就会默认调用 person.toString(),所以我们运行后看到两句结果输出是一样的。
1.4finalize方法
(1)当对象被回收时,系统自动调用该对象的finalize方法。子类可以重写该方法,做一些释放资源的操作
(2)什么时候被回收:当某个对象没有任何引用时,则jvm就认为这个对象是一个垃圾对象,就会使用垃圾回收机制来 销毁该对象,在销毁该对象前,会先调用finalize方法。
(3)垃圾回收机制的调用,是由系统来决定(即有自己的GC算法),也可以通过System.gc()主动触发垃圾回收机制。
二、类变量(静态变量)
2.1类变量引入
问题:有一群小羊在河边喝水,不断有新的小羊加入或退出,请问如何知道现在共有多少羊在喝水?编写程序解决。
传统方法:定义个变量count记录小羊个数,加入就coun++,退出就count--。
不过count独立于对象,无法实时记录小羊个数,并且不好访问counr;
这时就引入了类变量/静态变量。
2.2基本介绍
类变量也叫静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个对象。
2.3内存图
特点:
(1)static变量是同一个类所有对象共享;
(2)static变量在类加载的时候就生成了
2.4基本语法
如何定义类变量:
①访问修饰符 static 数据类型 变量名;(推荐)
②static 访问修饰符 数据类型 变量名;
如何访问类变量:
①类名.类变量名(推荐)
②对象名.类变量名
注:静态变量的访问修饰符的访问权限和范围同普通属性;
2.5注意事项及使用细节
(1)什么时候需要使用类变量
当我们需要所有的对象都共享一个变量时,就可以考虑使用类变量。
(2)类变量和普通变量有什么区别?
类变量是该类中所有对象的共享的,普通变量是每个对象独享的。
(3)加上static修饰就成为类变量,否则为普通变量/普通属性。
(4)类变量可以通过 类名.类变量名 或者 对象名.类变量名来访问,但java设计者推荐我们使用 类名.类变量名访问
(5)实例变量/普通变量/普通属性不能通过 类名.类变量名方式访问。
(6)类变量在类加载时就创建了,也就是说,即使你没有创建对象,只要类加载了,就能访问类变量。
(7)类变量的生命周期是随类的加载开始,随着类的消亡而销毁。
三、类方法(静态方法)
3.1基本介绍
类方法也叫静态方法
语法:
(1)定义:
①访问修饰符 static 数据返回类型 方法名(){}(推荐)
②static 访问修饰符 数据返回类型 方法名(){}
(2)调用:
①类名.类方法名(推荐)
②对象名.类方法名
3.2使用场景
当方法中不涉及任何与对象相关的成员时,则可将方法设计成静态方法,提高开发效率。
3.3注意事项和使用细节
(1)类方法和普通方法都是随着类的加载而加载,将结构信息存储在方法区;
注:①类方法中无this的参数;
②普通方法中隐含着this的参数。
(2)类方法可以通过类名调用,也可以通过对象名调用。
(3)普通方法和对象有关,需要通过对象名调用。
(4)类方法中不允许使用和对象有关的关键字,比如this和super;普通方法中可以使用。
(5)类方法(静态方法)中,只能访问静态变量或静态方法。
(6)普通成员方法,即可访问普通变量/方法,又可以访问静态变量/方法。
小结:①静态方法只能访问静态的成员;
②非静态方法可以访问静态成员和非静态成员。
结语
感谢您的耐心阅读,希望这篇博客能够为您带来新的视角和启发。如果您觉得内容有价值,不妨动动手指,给个赞👍,让更多的朋友看到。同时,点击关注🔔,不错过我们的每一次精彩分享。若想随时回顾这些知识点,别忘了收藏⭐,让知识触手可及。您的支持是我们前进的动力,期待与您在下一次分享中相遇!
路漫漫其修远兮,吾将上下而求索。