目录
final关键字
final的作用
final关键字是最终的意思,可以修饰(方法,变量,类)
修饰方法:表明该方法是最终方法,不能被重写。
private final void show()
报错!方法不能被重写!
修饰变量:表示该变量第一次赋值后,不能再次被赋值(有且仅能被赋值一次)。
final基本上不会用来修饰实例成员变量,没有意义。因为只能赋一次值,不可能所有对象都叫同一个名字。
private final String name;
变量有几种?(面试)
局部变量
成员变量 :静态成员变量 实例成员变量(属于对象)
修饰类:表明该类是最终类,不能被继承。
public final class
例:
报错!不能被继承!
修饰变量的注意:
final修饰的变量是基本类型:那么变量存储的数据值不能发生改变。
final修饰的变量是引用类型:那么变量存储的地址值不能发生改变,但是地址指向的对象内容是可以发生改变的。
常量
常量是使用了public static final修饰的成员变量,必须有初始化值,而且执行的过程中其值不能被改变。
常量的作用和好处:可以用于做系统的配置信息,方便程序的维护,同时也能提高可读性。
常量命名规则:英文字母全部大写,多个单词下划线连接起来。
常量的执行原理
在编译阶段会进行“宏替换”,把使用常量的地方全部替换成真实的字面量。
这样做的好处是让使用常量的程序的执行性能与直接使用字面量是一样的。
public class Ch02 extends Father {
private final String EMPLOYEE_NAME = "哈哈";
}
在上方定义一个常量名为“吉软”,在下面直接输出SCHOOL_JIRUN,直接可以改变全部的名字。
package Test;
/*学会常量的使用*/
public class Cl {
public static final String SCHOOL_JIRUN="吉软";
public static void main(String[] args) {
System.out.println(SCHOOL_JIRUN);
System.out.println(SCHOOL_JIRUN);
System.out.println(SCHOOL_JIRUN);
System.out.println(SCHOOL_JIRUN);
System.out.println(SCHOOL_JIRUN);
}
}
Object
object类的作用:一个类要么默认继承了Object类,要么间接继承了Object类,Object类是Java中的祖宗类。
object类的方法是一切子类都可以直接使用的。
Object的常用方法:
方法名 | 说明 |
public String toString() | 默认是返回当前对象在堆内存中的地址信息:类的权限名@内存地址 |
public Boolean equals(Object o) | 默认是比较当前对象与另一个对象的地址是否相同,相同返回true,不同返回false |
Object的toString方法:
方法名 | 说明 |
public String toString() | 默认是返回当前对象在堆内存中的地址信息:类的权限名@内存地址 |
package com.object;
public class Test1 {
public static void main(String[] args) {
Student student = new Student("菠萝", 19, '男');
String rs=student.toString();
// System.out.println(rs.toString());
System.out.println(rs.toString());
//直接输出对象变量,默认可以省略toString调用不写的
System.out.println(rs);
}
}
输出结果
tostring存在的意义
父类toString()方法存在的意义就是为了被子类重写,以便返回对象的内容信息,而不是地址信息!!
想要获得里面的内容,需要在子类中重写!右键生成toString(),全部选中,再次运行,输出结果,或者写toS,点两次回车,直接生成toString()方法。输出。
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", sex=" + sex +
'}';
}
输出结果
object的toString方法的作用是什么?
默认是打印当前对象的地址。
让子类重写,以便返回子类对象的内容。
equals方法
方法名 | 说明 |
public Boolean equals(Object o) | 默认是比较当前对象与另一个对象的地址是否相同,相同返回true,不同返回false |
package com.object;
public class Test2 {
public static void main(String[] args) {
Student student1 = new Student("菠萝", 20, '男');
Student student2 = new Student("菠萝", 20, '男');
//equals默认是比较2个对象的地址是否相同
System.out.println(student1.equals(student2));
System.out.println(student1 == student2);
}
}
输出结果 :
equals默认是比较2个对象的地址是否相同,student1和student2分别指向两个新对象,内容是一样的,但是地址不同。因此是false。==也是一样的
equals存在的意义
父类equals方法存在的意义就是为了被子类重写,以便子类自己来定制比较规则。
那么如何判断student1和student2相等呢?
我们要自己重写equals,自己定制相等规则。 两个对象的姓名、年龄、性别内容一样就认为是相等的,student1.equals(student2)
比较者:student1==this
被比较者:student2 == 把student2送给了o
首先创建一个学生类,定义名字、性别、年龄、无参、带参构造函数、get/set方法。
package com.object;
import java.util.Objects;
public class Student {//extends Object
private String name;
private Integer age;
private char sex;
public Student() {
}
public Student(String name, Integer age, char sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
}
紧接着,判断o是不是学生类的,是就返回true,不是就返回false。
其次,判断两个对象的内容是否一样,学生只能和学生比较,否则一定是false
重写方法(方法一)
public boolean equals(Object o) {
//1.判断o是不是学生类的
if (o instanceof Student) {
Student s2 = (Student) o;
// if (this.name.equals(s2.name)&&this.age==s2.age&&this.sex== s2.sex){
// return true;
// }//2.判断两个对象的内容是否一样
return this.name.equals(s2.name)
&& this.age == s2.age && this.sex == s2.sex;
} else {
//学生只能和学生比较,否则一定是false
return false;
}
}
输出结果
重写方法(方法二)
右键--生成--找到:equals()和hashCode(),一直点击下一步直到结束,将hashCode()方法输出。就得到了系统自动创建的equals()方法。
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return sex == student.sex && Objects.equals(name, student.name) && Objects.equals(age, student.age);
}
输出结果
object的equals方法的作用是什么?
默认是与另一个对象比较地址是否一样
让子类重写,以便比较2个子类对象的内容是否相同。
总结:
今天学习了final关键字,常量、Object以及Object的两个常用方法--toString()和equals(),final表明该方法是最终方法,不能被重写。toString()和equals()的掌握程度75%左右,后续还要看视频回放巩固所学内容。继续加油!!