美文网首页程序员
static关键字及变量类型特点的对比

static关键字及变量类型特点的对比

作者: 是归人不是过客 | 来源:发表于2020-08-27 11:21 被阅读0次

1、static修饰的变量叫"静态变量"

2、static修饰的方法叫"静态方法"

3、定义静态语句块:在类加载阶段执行,并且并上而下只执行一次。

静态语句块栗子:

public class p {
//  静态语句块
    static {
        System.out.println(1);
    }
    static {
        System.out.println(2);
    }
    static {
        System.out.println(3);
    }
    static {
        System.out.println(4);
    }
    static {
        System.out.println(5);
    }
    // 入口
    public static void main(String [] args) {
        System.out.println(6);
    }
}

输出 123456

我们再看实例语句块

每一次调用构造方法之前会执行一次。

实例语句块执行顺序也是自上而下。

举个栗子:

public class p {
//  静态语句块
    static {
        System.out.println("A");
    }
    {
        System.out.println(2);
    }
    {
        System.out.println(3);
    }
    // 入口
    public static void main(String [] args) {
        new p();
        new p();
    }
}

执行结果:
A
2
3
2
3

4、静态方法中不能直接访问非静态数据。

5、静态方法中不能直接使用this 。

6、一般情况下大多数工具类使用静态方法,静态方法中不用创建对象直接访问。

7、调用可以由 “类名.”调用,也可以由“引用.”调用。即使用的是“引用.”,底层还用的“类名.”

举个栗子:

public class p {
    public void m1() {
        System.out.println("非静态");
    }
    public static void m2() {
        System.out.println("静态");
    } 
    // 入口
    public static void main(String [] args) {
        p st = new p();
        st.m1();
        
        m2();
        st.m2(); // 编译阶段检查出st是p类型,编译通过,运行时,任然使用“p.”的方式访问,该方法执行不需要对象。
        
        // 空的引用去访问成员时会出现空指针异常,m2方法不是“成员”而是静态的。即使引用空的指针,也不会空指针异常。
        p st1 = null;
        st1.m2();
    }
}

输出结果:

非静态
静态
静态
静态

变量的分类

注意:成员变量、局部变量、静态变量 对比

变量.jpg

注意:类和对象的区别

class 类 --->这个就是类
那么对象是什么?
栗子:
class P
P p = new P();
p.函数()
p.变量
这个p就是对象,对象可以调用类中的各种功能

1、局部变量 (栈)
2、成员变量(实例变量、非静态变量)(堆)
3、静态变量(方法区)
什么时候变量声明静态变量?
如果这个属性所有的对象都有,并且这个属性的值是相同的,则该属性声明成静态的属性。
成员变量:创建java对象的时候初始化
静态变量:在类加载阶段赋值,并且只赋值一次。

public class p {
    // 入口
    public static void main(String [] args) {
        Animal a1 = new Animal("aaa",10);
        Animal a2 = new Animal("bbb",100);
        System.out.println(Animal.type);
//      System.out.println(a1.type); 静态变量底层访问时,一定使用“类名.”,与对象无关。
    }
}
class Animal{
    
    // 成员变量(一个对象一份)
    // 成员变量在创建对象的时候初始化,并且存储在堆中的每一个对象中。
    String name;
    int age;
//  String type = "陆生";
//  静态变量,被存储在方法区,所有的java对象共享这一份
//  所以静态变量是类级别,使用“类名.”的方式访问
    String type = "陆生";
    
    //Constructor
    Animal(String name,int age){
        this.name = name;
        this.age = age;
        System.out.println(this.age + " " + this.name);
        
    }
}
JVM成员变量.png

type是经常使用的公共类,所以名为静态类

public class p {
    // 入口
    public static void main(String [] args) {
        Animal a1 = new Animal("aaa",10);
        Animal a2 = new Animal("bbb",100);
        System.out.println(Animal.type);
//      System.out.println(a1.type); 静态变量底层访问时,一定使用“类名.”,与对象无关。
    }
}
class Animal{
    
    // 成员变量(一个对象一份)
    // 成员变量在创建对象的时候初始化,并且存储在堆中的每一个对象中。
    String name;
    int age;
//  String type = "陆生";
//  静态变量,被存储在方法区,所有的java对象共享这一份
//  所以静态变量是类级别,使用“类名.”的方式访问
    static String type = "陆生";
    
    //Constructor
    Animal(String name,int age){
        this.name = name;
        this.age = age;
        System.out.println(this.age + " " + this.name + " " + Animal.type);
        
    }
}
静态变量JVM.png

注意:
空指针异常:空引用访问成员

相关文章

  • static关键字及变量类型特点的对比

    1、static修饰的变量叫"静态变量" 2、static修饰的方法叫"静态方法" 3、定义静态语句块:在类加载阶...

  • Java学习day-08:继承

    一、Static关键字: 1.特点 (1)用Static关键字声明的方法及属性称静态变量和静态方法;也称类变量,和...

  • Java基础-static关键字和单例模式

    static关键字 static关键字的特点用来修饰类的成员-修饰成员变量的称之为类变量(静态变量),修饰成员方法...

  • static的用法

    1、静态成员变量的特点。 static 【函数类型】【变量名】 static定义的变量属于类级别的变量,不是对象级...

  • JAVA中的static关键字作用与用法

    static关键字: 一、特点: 1、static是一个修饰符,用于修饰成员。(成员变量,成员函数)static修...

  • OC中static、const、extern关键字理解

    static关键字 static关键字用于修饰变量。 static修饰局部变量当使用static修饰局部变量时, ...

  • Java的static、final关键字

    一、 static关键字 可以修饰成员变量和成员方法 static关键字特点随着类的加载而加载优先于对象存在被类的...

  • C语言中的static关键字

    @TOC C语言中的static关键字 static 关键字,意为静态。 static 变量 特性:全局变量在函数...

  • C基础知识

    基础问题 1.static关键字和const关键字。 static: 作用于变量时:用static声明局部变量--...

  • 深入理解Java-final关键字

    1 修饰属性或者变量 无论属性是基本类型还是引用类型,作用都是变量里面存放的“值”不可变 经常和static关键字...

网友评论

    本文标题:static关键字及变量类型特点的对比

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