美文网首页程序员
static 静态详解

static 静态详解

作者: UlissesJr | 来源:发表于2018-10-16 17:35 被阅读31次

不加static关键字时,代码对应的内存图


因为明星国家都为日本,所以country属性不需要每次创建对象都赋值,这时候可以加入static关键字。

static关键字的特点

  • 随着类的加载而加载
  • 优先于对象存在
  • 被类的多个对象共享
  • 可以通过类名调用
    1.其实它本身也可以通过对象名调用
    2.推荐使用类名调用
    3.静态修饰的内容一般我们称之为:与类相关的,类成员
//类名调用
public class Demo1_Static {
    public static void main(String[] args){
        Person.country = "china";
        System.out.println(Person.country);
    }
}

class Person{
    String name;
    static String country;

    public void speak(){
        System.out.println(name + "..." + country);
    }
}

输出结果;
china

static关键字的注意事项

A:在静态方法中是没有this关键字的
理解:静态是随着类的加载而加载,this是随着对象的创建而存在。静态比对象先存在。
B:静态方法只能访问静态的成员变量和静态的成员方法

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

静态只能访问静态

public class Demo1_Static {
    public static void main(String[] args){
        Demo d = new Demo(); 
        d.print1();
    }
}

class Demo{
    int num1 = 10;
    static int num2 = 20;

    public void print1(){     //非静态的成员方法
        System.out.println(num1);
        System.out.println(num2);
    }

//    public static void print2(){  //静态的成员方法
//        System.out.println(num1);
//        System.out.println(num2);
//    }
}
输出结果
10
20

public class Demo1_Static {
    public static void main(String[] args){
        Demo.print2();
    }
}

class Demo{
    int num1 = 10;
    static int num2 = 20;

//    public void print1(){     //非静态的成员方法
//        System.out.println(num1);
//        System.out.println(num2);
//    }

    public static void print2(){  //静态的成员方法
        System.out.println(num1);
        System.out.println(num2);
    }
}

Error:(17, 28) java: 无法从静态上下文中引用非静态 变量 num1

把System.out.println(num1);注释掉之后,num2可以正常输出。

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

静态变量也叫类变量,成员变量也叫对象变量

A:所属不同

  • 静态变量属于类,所以也叫类变量
  • 成员变量属于对象,所以也称为实例变量

B:内存中位置不同

  • 静态变量存储于方法区的静态区
  • 成员变量存储于堆内存

C:内存出现时间不同

  • 静态变量随着类的加载而加载,随着类的消失而消失
  • 成员变量随着对象的创建而存在,随着对象的消失而消失。

D:调用不同

  • 静态变量可以通过类名调用,也可以通过对象调用
  • 成员变量只能通过 对象调用

tips:

如果一个类中所有方法都是静态方法,则需要多做一步,创建一个私有构造方法。目的是不让其他类创建本类对象。

相关文章

  • static 静态详解

    不加static关键字时,代码对应的内存图 因为明星国家都为日本,所以country属性不需要每次创建对象都赋值,...

  • Static静态 详解

    # Static静态 # public static void main (1)类只是用来存储和被调用的,而对象是...

  • java 堆栈

    参考文章:1.JAVA 堆栈 堆 方法区 静态区 final static 内存分配 详解2.java里的静态成员...

  • php面对对象编程

    静态方法static (public static $a=1) (static function) 静态方法不能...

  • Django中static(静态)文件详解以及{% static

    在一个网页中,不仅仅只有一个html骨架,还需要css样式文件,js执行文件以及一些图片等。因此在DTL中加载静态...

  • static关键字

    static说明 static: 静态的,使用static修饰的成员称为静态成员、类成员static修饰的属性称为...

  • php中的访问修饰符、方法修饰符、接口

    访问修饰符 方法修饰符 static(静态的) 1、static修饰属性成为静态属性,static修饰方法成为静态...

  • C#学习笔记<五> static

    1 静态成员 static成员中不能调用非static成员非static成员中可以调用static成员静态成员类似...

  • JavaSE基础知识学习-----Static关键字

    Static关键字 static静态的,可以用来修饰变量,修饰方法,代码块,静态内部类和静态导包。static关键...

  • java随笔

    static变量和static方法 static变量 1.static修饰的变量:静态变量,静态变量在内存中只有一...

网友评论

    本文标题:static 静态详解

    本文链接:https://www.haomeiwen.com/subject/awphzftx.html