java关键字static

116 阅读2分钟

“我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第n篇文章,点击查看活动详情

概述

static是静态的意思,可以用来修饰成员变量和成员方法

static的用法

  1. static修饰成员变量

被static修饰的成员变量也称为静态变量,有以下几种特征。

  • static所修饰的变量会存储在数据共享区
  • 静态变量的数据被本类中所有实例对象所共享,只有一份,不属于某个对象,归类所有
  • 变量被static修饰之后,调用方式就有两种:被对象调用和类名.变量名两种方式。推荐使用类名.变量名类访问

2.static修饰成员方法

  • static修饰成员方法最大的作用,就是可以使用"类名.方法名"的方式操作方法,避免了先要new出对象的繁琐和资源消耗

3.static修饰类,静态内部类

public class StaticInnerClass {
    public static void main(String[] args) {
        Outer10 outer10 = new Outer10();
        outer10.m1();
        //外部其他类访问内部类
        //方式1
        Outer10.Inner10 inner10 = new Outer10.Inner10();
        inner10.say();
        //方式2
        Outer10.Inner10 inner101 = outer10.getInner10();
        inner101.say();

    }
}
class  Outer10 {//外部类
    private int n1=90;
    private static String name="lxw";
    //静态内部类
    //可以添加任意修饰符,因为它的地位就是一个成员
    //作用域:同其他的成员一样,是整个类体
    //可以添加任何访问修饰符,因为他本身就是一个成员
    public static class Inner10{
        private static String name="zxj";
        public void say(){
            //可以访问外部类的所有静态成员,包含私有的,
            //但是不能直接访问非静态的成员
            System.out.println("静态变量name="+name);
            System.out.println("外部类的属性name="+Outer10.name);
        }
    }
    public void m1(){
        //外部类访问静态内部类方法:创建对象,再访问
        Inner10 inner10 = new Inner10();
        inner10.say();
    }

    public Inner10 getInner10(){
        return new Inner10();
    }
}

static的特点

  • 随着类的加载而被加载
  • 优先于对象的存在
  • 被所有对象共享
  • final 和static 搭配使用,效率比较高,底层做了优化,搭配使用可以不导致类加载,效率更高

使用staic注意事项

  • 在静态方法中只能访问静态的成员,不能访问非静态的成员和方法
  • 非静态的方法中即能访问静态得成员(成员变量,成员方法)又能访问非静态得成员
  • 局部变量不能被static修饰,只有成员变量才可以,局部变量归某个对象所有
  • 静态方法中不可以定义this、super关键字,因为静态优先于对象存在,静态方法是归类所有,不属于某个对象