十二:关键字和API

1this和super关键字
1.this和super的意义

this:当前对象

super 引用父类声明的成员

无论this和super都是和对象有关的

 Cat mi = new Cat();
//         mi.a = 10;
//      this  当前操作的对象  mi
//        mi.eat();
//        mi.this();
//        super 当前类的父类
2.this和super的使用格式
  • this

    • this.成员变量:表示当前对象的某个成员变量,而不是局部变量

    • this.成员方法:表示当前对象的某个成员方法,完全可以省略this.

    • this()或this(实参列表):调用另一个构造器协助当前对象的实例化,只能在构造器首行,只会找本类的构造器,找不到就报错

  • super

    • super.成员变量:表示当前对象的某个成员变量,该成员变量在父类中声明的

    • super.成员方法:表示当前对象的某个成员方法,该成员方法在父类中声明的

    • super()或super(实参列表):调用父类的构造器协助当前对象的实例化,只能在构造器首行,只会找直接父类的对应构造器,找不到就报错

3.为了避免子类和父类声明重名的成员变量

因为,子类会继承父类所有的成员变量,所以:

  • 如果重名的成员变量表示相同的意义,就无需重复声明

  • 如果重名的成员变量表示不同的意义,会引起歧义

4.解决成员变量重名问题
  • 如果实例变量与局部变量重名,可以在实例变量前面加this.进行区别

  • 如果子类实例变量和父类实例变量重名,并且父类的该实例变量在子类仍然可见,在子类中要访问父类声明的实例变量需要在父类实例变量前加super.,否则默认访问的是子类自己声明的实例变量

  • 如果父子类实例变量没有重名,只要权限修饰符允许,在子类中完全可以直接访问父类中声明的实例变量,也可以用this.实例访问,也可以用super.实例变量访问

2native关键字

native:本地的 原生的

native的语法

native只能修饰方法,表示这个方法的方法体代码不是用Java语言实现的,而是由C/C++语言编写的。但是对于Java程序员来说,可以当做Java的方法一样去正常调用它,或者子类重写它。

简单来说就是调取本地存储的其他语言文件

3final关键字

final:最终的 不可更改的

int a;
    public final void add(){
        System.out.println("1145");
    }

只要不修改随便用

6.5.4Obiect根父类

java.lang.Object是类层次结构的根类,即所有类的父类。每个类都使用 Object 作为超类。

  • Object类型的变量与除Object以外的任意引用数据类型的对象都多态引用

  • 所有对象(包括数组)都实现这个类的方法。

  • 如果一个类没有特别指定父类,那么默认则继承自Object类。例如:

public class MyClass /*extends Object*/ {
    // ...
}
2.Object类的其中5个方法

API接口

Java API是一本程序员的字典 ,是JDK中提供给我们使用的类的说明文档。所以我们可以通过查询API的方式,来学习Java提供的类,并得知如何使用它们。在API文档中是无法得知这些类具体是如何实现的,如果要查看具体实现代码,那么我们需要查看src源码

1.toString()

默认情况下,toString()返回的是“对象的运行时类型 @ 对象的hashCode值的十六进制形式"

  • 通常是建议重写

  • 如果我们直接System.out.println(对象),默认会自动调用这个对象的toString()

public class student {  
    private String name;
    private int shengao;
    private int kg;
    private Stering xingbie;
​
    @Override
    public String toString() {
        return 学生基本信息{" +
                "姓名='" + name + '\'' +
                ", 性别='" + xingbie+
                ", 身高=" + shengao+"cm" +
                ", 体重=" + kg +"kg"
                 + '\'' +
                '}';
    }
}
(2)getClass()

获取对象的运行时类型

(3)equals()

用于判断当前对象this与指定对象obj是否“相等”

①默认情况下,equals方法的实现等价于与“==”,比较的是对象的地址值

②我们可以选择重写,重写有些要求:

A:

B:如果重写equals,那么一定要遵循如下几个原则:

a:自反性:x.equals(x)返回true

b:传递性:x.equals(y)为true, y.equals(z)为true,然后x.equals(z)也应该为true

c:一致性:只要参与equals比较的属性值没有修改,那么无论何时调用结果应该一致

d:对称性:x.equals(y)与y.equals(x)结果应该一样

e:非空对象与null的equals一定是false

(4)hashCode()

返回每个对象的hash值

如果重写equals,那么通常会一起重写hashCode()方法

{对象.hashCode()
}

当前对象的十六进制代码

3.标准JavaBean

JavaBean 是 Java语言编写类的一种标准规范。符合JavaBean 的类,要求:

(1)类必须是具体的和公共的,

(2)并且具有无参数的构造方法,

(3)成员变量私有化,并提供用来操作成员变量的setget 方法。

(4)重写toString方法

一个标准的JavaBean实例:

public class student {
    private String name;
    private int shengao;
    private int kg;
    private String xingbie;
​
    public student() {
    }
​
    public student(String name, int shengao, int kg, String xingbie) {
        this.name = name;
        this.shengao = shengao;
        this.kg = kg;
        this.xingbie = xingbie;
    }
​
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
​
    public int getShengao() {
        return shengao;
    }
​
    public void setShengao(int shengao) {
        this.shengao = shengao;
    }
​
    public int getKg() {
        return kg;
    }
​
    public void setKg(int kg) {
        this.kg = kg;
    }
​
    public String getXingbie() {
        return xingbie;
    }
​
    public void setXingbie(String xingbie) {
        this.xingbie = xingbie;
    }
​
    @Override
    public String toString() {
        return "学生基本信息{" +
                "姓名='" + name + '\'' +
                ", 性别='" + xingbie+
                ", 身高=" + shengao+"cm" +
                ", 体重=" + kg +"kg"
                 + '\'' +
                '}';
    }

测试类:

public static void main(String[] args) {
    student add = new student();
    add.setName("小王");
    add.setXingbie("男");
    add.setShengao(190);
    add.setKg(60);
    System.out.println(add);
}

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐