黑马Java零基础视频教程精华部分_9_面向对象进阶(1)

系列文章目录



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

1、静态变量

被static修饰的成员变量,叫做静态变量
如果我们定义的同一个班级的Student中如果有一个属性为老师姓名,所有同学的这个属性因为都是一个班的同学所以相同,那么我们不必在新建对象时候一个个赋值,可以使用静态变量的方式。

public class Student {
    //属性:姓名 年龄 性别
    //新增:老师的姓名
    private String name;
    private int age;
    private String gender;
    public static String teacherName;
}

特点:被该类的所有对象共享。不属于对象,属于类。随着类的加载而加载,优先于对象存在。
调用方式:(1)类名调用(推荐) (2)对象名调用

2、静态变量底层原理

在这里插入图片描述

  1. 程序刚启动时,首先main方法入栈。
  2. 在main的第一行代码中用类名Student调用了静态变量teacherName,这是就用到了Student这个类,这时候就会把Student类的字节码文件加载到方法区,并在内存当中创建了一个单独存放静态变量的空间—静态区,这时候teacherName的默认值为NULL。注意此时内存中没有对象,所以静态变量优先于对象而出现,其他用static修饰的东西也有这个特性。然后给teacherName赋值“阿玮老师”。
  3. 之后第二行代码有new Student(),即可创建一个Student对象放入内存中,之后student对象需要teacherName时,从静态区中读取即可。

3、static静态方法

被static修饰的成员方法,叫做静态方法
特点:

  1. 多用在测试类和工具类中
  2. Javabean类中很少会用

调用方式:

  1. 类名调用(推荐)
  2. 对象名调用

4、工具类、测试类、Javabean类

Javabean类:用来描述一类事物的类。比如,Student,Teacher,Dog,Cat等。
测试类:用来检查其他类是否书写正确,带有main方法的类,是程序的入口。
工具类:不是用来描述一类事物的,而是帮我们做一些事情的类。特点:类名见名知意,私有化构造方法(构造方法一旦私有,那么外界不能创建这个类的对象),方法都定义为静态的(方便调用)。

5、static注意事项

  1. 静态方法只能访问静态变量和静态方法
  2. 非静态方法可以访问静态变量或者静态方法,也可以访问非静态的成员变量和非静态的成员方法
  3. 静态方法中是没有this关键字

从代码层面

理解1和3:在一般的一个类中的普通成员函数,其实自带一个参数就是调用者的地址值,如下图所示,s1.show1()在执行时,就自动将s1的地址传入了函数show1中,然后show1如果要输出属性,就可以知道输出的是s1的属性,而再调用show2时候,默认还是show1参数的那个地址来调用show2(下图可以省略show2前面的this,一般这个this是隐含的)。
在这里插入图片描述
而静态方法的参数中,没有自带那个this参数,我们也不能自己设置,所以静态方法中使用this是不可以的,计算机不知道this指的是谁。
理解2:为什么非静态方法(里面带着对象的地址)可以访问所有呢,因为静态方法除了用类名可以访问,也可以用对象(也就是对象地址)来访问。

从内存层面

理解为什么静态方法只能访问静态变量和静态方法,即不能访问非静态是为什么?
首先不能访问非静态变量是因为,静态方法会比非静态变量先进入内存,那内存中还没有静态方法需要的变量时,显然无法调用,会出现错误。不能访问非静态方法,是因为静态方法中没有对象地址,那么显而易见不知道访问的是哪个对象的方法,会出现错误。
在这里插入图片描述

6、重新认识main方法

在这里插入图片描述
最后一条中:我们可以在IDEA中通过设置程序实参来体会,如下两图所示。
在这里插入图片描述在这里插入图片描述

  • 16
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值