static 关键字

static 关键字

针对多个对象有共同的成员变量值的时候,Java就提供了一个关键字来修饰:static。

static关键字的概述

​ * 是一个修饰符。 * 一般用来修饰成员变量,成员方法以及代码块

* static修饰的成员变量和成员方法不再属于对象,而是属于类。可以被该类的所有对象共享。

​ 可以对象名调用,也可以通过类名调用(推荐)

static的特点:

A:随着类的加载而加载

回想main方法。

B:优先于对象存在
C:被类的所有对象共享

举例:咱们班级的学生应该共用同一个班级编号。

其实这个特点也是在告诉我们什么时候使用静态?

如果某个成员变量是被所有对象共享的,那么它就应该定义为静态的。(类变量)

举例: 饮水机(用静态修饰) 水杯(不能用静态修饰)

D:可以通过类名调用

其实它本身也可以通过对象名调用。 推荐使用类名调用。

静态修饰的内容一般我们称其为:与类相关的类成员

成员变量的分类

​ * 静态成员变量或类变量:被static修饰的成员变量 * 非静态成员变量或实例变量:没被static修饰的成员变量

静态成员变量和非静态成员变量的区别

语法的区别

静态成员变量:被static修饰的成员变量非静态成员变量:没被static修饰的成员变量

数量的区别

静态成员变量:在内存中只有一份,被类的所有对象共享。 非静态成员变量:每创建一个对象都会为该成员变量分配内存空间,每一个对象都有自己的一份,互不干扰。

访问方式的区别

静态成员变量:可以通过对象名访问,也可以通过类名访问(强烈推荐使用) 非静态成员变量:只能通过对象名方法。

生命周期的区别

静态成员变量:跟随类的加载而创建并初始化,跟随类的销毁而销毁。 非静态成员变量:跟随对象的创建而创建并初始化,跟随对象的销毁而销毁。

什么时候可以使用static修饰成员变量?

​ * 当该成员变量的值需要在该类的所有对象之间共享时,则应该定义为静态成员变量。

静态方法和非静态方法的区别

静态方法:可以通过对象名访问,可以通过类名调用(推荐使用)

非静态方法:只能通过对象名调用

静态方法的注意事项

静态方法中不能使用this和super关键字。

静态方法中不能访问非静态成员:非静态成员变量和非静态成员方法

非静态方法中可以访问静态成员:静态成员变量和静态成员方法。

什么时候应该将该方法定义为静态方法?

当该方法内部不需要访问任何的非静态成员:非静态成员变量和非静态成员方法,就可以考虑定义为静态方法。

定义工具类时,工具类中的方法一般都是静态方法。

static关键字注意事项

A:在静态方法中是没有this关键字的

如何理解呢?

静态是随着类的加 载而加载,this是随着对象的创建而存在。

静态比对象先存在。

B:静态方法只能访问静态的成员变量和静态的成员方法

​ 静态方法: 成员变量:只能访问静态变量 成员方法:只能访问静态成员方法 非静态方法: 成员变量:可以是静态的,也可以是非静态的 成员方法:可是是静态的成员方法,也可以是非静态的成员方法。

简单记: 静态只能访问静态。 记住是只能

定义静态常量:

class Teacher {
 public int num = 10;
 public static int num2 = 20;
 
 public void show() {
     
  System.out.println(num); //隐含的告诉你访问的是成员变量
  System.out.println(this.num); //明确的告诉你访问的是成员变量
  System.out.println(num2);
  
  //function();
  //function2();
 }
 
 public static void method() {
  //无法从静态上下文中引用非静态 变量 num
  //System.out.println(num);
  System.out.println(num2);
  
  //无法从静态上下文中引用非静态 方法 function()
  //function();
  function2();
 }
 
 public void function() {
 
 }
 
 public static void function2() {
 
 }
}

class TeacherDemo {
 public static void main(String[] args) {
  //创建对象
  Teacher t = new Teacher();
  t.show();
  System.out.println("------------");
  t.method();
 }
}

1.请说出 static 可以修饰什么?
它可以修饰成员变量,还可以修饰成员方法以及代码块

2.请说出 static 关键字的特点 ?
A:随着类的加载而加载

回想main方法。

B:优先于对象存在
C:被类的所有对象共享

举例:咱们班级的学生应该共用同一个班级编号。

其实这个特点也是在告诉我们什么时候使用静态?

如果某个成员变量是被所有对象共享的,那么它就应该定义为静态的。(类变量)

举例: 饮水机(用静态修饰) 水杯(不能用静态修饰)

D:可以通过类名调用

其实它本身也可以通过对象名调用。 推荐使用类名调用。

3.请说出 static 修饰的成员如何使用 ?

类名.静态成员变量名类名.静态成员方法名(参数)对象名.静态成员变量名 ------不建议,出现警告对象名.静态成员方法名(参数) ------不建议,出现警告

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值