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 只是代表当前对象内部的那一块父类型的特征
posted @ 2022-02-25 17:28  sha0dow  阅读(32)  评论(0编辑  收藏  举报