黑马Java基础笔记-8

发布于:2025-05-09 ⋅ 阅读:(29) ⋅ 点赞:(0)

面向对象进阶

static

static表示静态,是Java中的一个修饰符,可以修饰成员方法,成员变量。

静态变量

特点:
  • 被该类所有对象共享
  • 跟对象无关,随着类的加载而加载,优先于对象存在
调用方式:
  • 类名调用(推荐)
  • 对象名调用
public class Student {
// 属性:姓名 年龄 性别
private String name;
private int age;
private String gender;

// 新增:老师的姓名
public static String teacherName;
}
public class StudentTest {
public static void main(String[] args) {
  // 设置公共老师名称
  Student.teacherName = "阿玮老师";//类名调用

  // 1.创建第一个学生对象
  Student s1 = new Student();
  // s1.teacherName "阿玮老师";
  // 2.创建第二个学生对象
  Student s2 = new Student();
  // s2.teacherName = "阿玮老师";
  s1.teacherName = "666";//对象名调用
  //s2.teacherName的值也会跟着一起修改为666
}
}
static的内存图

在这里插入图片描述

堆内存中存在一个静态区(在java8之前是在方法区中)

静态变量随类加载立即初始化(JVM类加载阶段,在new之前,会先赋值为数据的默认值)


静态方法

静态方法更像是java的一种约束与规范,通过该规范,Java 区分了“类级别(class‑level)”与“实例级别(instance‑level)”的成员,保证了编译期类型安全与成员访问的一致性

特点:
  • 多用在测试类和工具类中
  • Javabean类中很少会用
调用方式:
  • 类名调用(推荐)
  • 对象名调用

static的注意事项

  • 静态方法只能访问静态变量和静态方法

    这两个都不行

    在这里插入图片描述

  • 非静态方法可以访问静态变量或者静态方法,也可以访问非静态的成员变量和非静态的成员方法
  • 静态方法中是没有this关键字

    类中有一个默认的对象this,表示方法调用者的地址值,是由虚拟机赋值的

    在这里插入图片描述

    在这里插入图片描述

理解

在这里插入图片描述

在这里插入图片描述

补充说明(方法的调用)

对象的对象头中有一个指向其在方法区中对应类的指针,我们可以通过这个指针找到虚方法表,再通过虚方法表中存的地址来执行方法
在这里插入图片描述

重新认识main函数

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("HelloWorld");
    }
方法签名解析
  • public 被JVM调用,访问权限足够大

  • static 被JVM调用,不用创建对象,直接类名访问,因为main方法是静态的,所以测试类中其他方法也需要是静态的

  • void 被JVM调用,不需要给JVM返回值

  • main 一个通用的名称,虽然不是关键字,但是被JVM识别

  • String[] args 以前用于接收键盘录入数据的,现在没用

    在这里插入图片描述

    在这里插入图片描述

在这里插入图片描述



网站公告

今日签到

点亮在社区的每一天
去签到