Java学习(二)---面向对象(下)

学习java!刻不容缓!

大不了找不到工作考研就是了!

焦虑柠檬呢!

基础概念

接口

接口就相当于 一串方法抽象出来,方便多个类 去实现各自的多态功能

interface Person {
    void run();
    String getName();
}

接口是比抽象类更抽象的存在,因为它只涉及到一系列方法的封装

如果抽象类是讲一系列对象(类)进行抽象

基础知识:一个类可以继承多个接口,但是只能继承一个父类

tips: 讲一下覆写、重写、重载的区别

覆写和重写是一个意思,主要是继承的子类覆写父类方法、

重载是类内存在多个同名成员方法、但是参数列表不同

因此方法签名其实是不一样的,在编译时会根据调用的参数来确定使用的是哪个具体方法

静态

  • 静态字段

一个类的静态字段是所有实例所共享的

可以通过类直接进行访问和修改

这就相当于这个班的学生,班级号是一样的,如果修改一个学生的班级号,那么同班学生的班级号都会修改,这个类可以就是某班学生

接口是没有实例字段的,但是可以有静态字段

  • 静态方法

静态方法和静态字段一样,不需要通过实例,可以直接通过类进行访问

静态方法只属于class 不属于实例,方法内部只能访问静态字段而不能访问实例变量

(常在工具类中进行使用)

  • Arrays.sort()
  • Math.random()

同一个包的类,可以互相访问字段和方法(同属于一个包作用域

在跨包引用类时可以有两种方法

  • 带上完整的包名
  • import导入包

tips: java.util 和java.util.zip 不是同一个包的父子关系,这两个是不同的包

java.util.* 是指导入该包下的所有类

编译器编译的结果中的类名都是完整类名,其中的简单类名会根据下面的顺序进行依次查找:

  • 查找当前package是否存在这个class
  • 查找import的包是否包含这个class
  • 查找java.lang包是否包含这个class

String 类

链式操作

因为 append()方法会返回this 所以能实现链式操作

public class Main {
    public static void main(String[] args) {
        var sb = new StringBuilder(1024);
        sb.append("Mr ")
          .append("Bob")
          .append("!")
          .insert(0, "Hello, ");
        System.out.println(sb.toString());
    }
}

示例

暂无,主要是java特性。。。

参考资料

廖雪峰Springboot教程

java视频教程

黑马教程

今日小知识

Java面向对象的执行原理

执行主体类(main方法)时,类和方法会放在方法区

然后遇到 new 对象时,左侧的定义会让 新的类和对应的内部变量以及方法也会放入方法区

然后 右侧 对象会放入堆内存 (该堆内存中存放着固定的类内变量 以及指向类的地址)

而栈内存里存放着 main

main里存着新建的 对象,并将其地址存进来

修改对象成员变量的代码会根据对象地址 修改堆内存内部的成员变量

调用方法时,会检查堆内存中类地址,然后去方法区寻找对应方法

image-20240104214620499.png

tips:左侧的s1变量 记住的是 堆内存中学生对象的地址

tips:主类的名字必须和文件同名


博主因为找工作的事情,博客更新耽搁了很久,私密马赛

文章作者: P4ul
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 打工人驿站
后端 java
喜欢就支持一下吧
打赏
微信 微信
支付宝 支付宝