Java 中的一些知识点
Java 中的一些知识点
与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 只是代表当前对象内部的那一块父类型的特征