内容概括:1. 原始类Object的toString方法 2. 类中的super基本内容
Java 中的一些知识点
- Java 中的知识点
- 与C++相关
- toString方法
- super
与C++相关【了解的不是很多】
- 在Java程序中:一个方法以
;
结尾,并且修饰符列表中有native
关键字 - 代表:底层调用C++写的dll程序【dll动态连接库文件】
toString方法
- 来源:
toString方法源自java.lang.Object
中的方法 - 因为所有的类默认继承Object所有,几乎所有类都有toString方法
- toString方法实现
// 以下是官方原文
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
// 返回:类名字@哈希加密的内存地址
}
- toString方法的作用是什么?
作用:将“java对象”转换“字符串形式” - toString方法的特性
System.out.println(引用.toString());
等价
System.out.println(引用);
- toString方法的价值:一般用于重写后用在开发时,数据的打印查看
示例:
public class ToStringTest {
public static void main(String[] args) {
MyDate date1 = new MyDate();
MyDate date2 = new MyDate(2022, 1, 18);
// toString()方法已经重新
System.out.println(date1.toString());
System.out.println(date1);
System.out.println(date2.toString());
System.out.println(date2);
}
}
class MyDate {
private int year;
private int month;
private int day;
public MyDate() {
this(1970,1,1);
}
public MyDate(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public String toString() {
return this.year + "年" + this.month + "月" + this.day + "日";
}
}
super
- super 是一个关键字
- super和this对比学习
this:
- this能够出现在实例方法和构造方法中
- this的语法是:
this.
、this()
- this不能使用在静态方法中
- this. 大部分情况都可以省略
- this. 什么时候不可以省略?
public void setName(string name){
this.name = name;
}
- this() 只能出现在构造方法第一行,通过当前的构造方法去调用“本类”中的其他构造方法
super:
- super能够出现在实例方法和构造方法中
- super的语法是:
this.
、this()
- super不能使用在静态方法中
- super. 大部分情况都可以省略
- super. 什么时候不可以省略?
如果父类和子类中有重名属性,你需要访问父类则必须使用super.
- super() 只能出现在构造方法第一行,通过当前的构造方法去调用“父类”中的其他构造方法;目的:构建子类对象的时候,先初始化父类特征
- super()
表示通过子类的构造方法调用父类的构造方法 - 重要结论:
当一个构造方第一行,没有this()或super()的话,会默认存在一个super()【无参】
一个类如果手动提供一个构造方法,那么无参数构造系统将不再提供 - 注意:this()与super()不共存
- super(实参列表)初始化当前对象的父类型特性
总结
this: 本类
super: 当前类的父类
可以使用super访问或调用在当前类中被覆盖的方法和属性【注意静态问题,super是相对与this】
可以粗浅的理解:super相当于当前类的父类的this【并不准确,下面测试】
// 测试
public class Test{
public static void main(String[] args){
Test test_1 = new Test();
test_1.doSome();
}
// 实例方法
public void doSome(){
// Test@2f89e2d1
System.out.println(this);
// println输出 "引用" 默认调用toString()方法
System.out.println(super); // 报错
}
}
通过这个测试得出的结论:
- super 不是引用,不保存内存地址,也不指向任何对象
- super 只是代表当前对象内部的那一块父类型的特征