zoukankan      html  css  js  c++  java
  • java静态变量、静态方法和静态代码段

    先上实例

    public class TestStatic {
        public static String staticString = "this is a static String"; //静态变量
        public String instanceString = "this is a instance String";//实例变量
        //静态方法
        public static void  staticMethod(){
            System.out.println("this is a static method");
        }
        //实例方法
        public void instanceMethod(){
            System.out.println("this is a instance method");
        }
    }
    public class Main {
            
        public static void main(String[] args){
            TestStatic testStatic = new TestStatic();
    
            TestStatic.staticMethod();//直接通过类名访问静态方法
            System.out.println(TestStatic.staticString);//直接通过类名访问静态变量
            
            testStatic.instanceMethod();//通过实例化对象  访问 实例方法
            System.out.println(testStatic.instanceString);//通过实例化对象   访问实例变量
        }
    }

    1.静态变量与静态方法,上面TestStatic.java中

    java中的变量有静态变量和实例变量,实例变量要类实例化后才真正存在,通过对象.变量名访问,如上面代码中的testStatic.instanceString。静态变量不需要实例化就存在,可以通过类名.变量名访问,如上面的TestStatic.staticString

    静态方法和实例方法,无论哪种方法在内存中都只有一份。不同的是

    a.实例方法必须通过实例化对象来使用如上面代码中的testStatic.instanceMethod(),静态方法是可以直接通过类名直接使用,如上面代码中的TestStatic.staticMethod()

    b.静态方法可以有自己的自己的局部变量,只能访问静态变量和静态方法,实例方法则没有这种限制。实例如下

    public class TestStatic {
        public static String staticString = "this is a static String"; //静态变量
        public String instanceString = "this is a instance String";//实例变量
        //静态方法
        public static void  staticMethod(){
            int temp;//可以有自己的局部变量
            staticString = "test";//可以访问静态成员变量
            testStatic();//可以访问静态方法
            //instanceMethod();//不能访问实例方法
            //instanceString = "";//不能使用实例变量
            System.out.println("this is a static method");
        }
        //实例方法
        public void instanceMethod(){
            System.out.println("this is a instance method");
        }
        public static void testStatic(){
            //用于测试
        }
    }

    2.静态代码段

    static{
            int x;//只在本块有效
            //静态代码段
        }

    a. 静态代码块只能定义在类里面,它独立于任何方法,不能定义在方法里面

    b.静态代码块里面的变量都是局部变量,只在本块内有效

    c.静态代码块会在类被加载时自动执行,而无论加载者是JVM还是其他的类

    d. 一个类中允许定义多个静态代码块,执行的顺序根据定义的顺序进行

    e.静态代码块只能访问类的静态成员,而不允许访问实例成员

    3.java中的初始化顺序

    JAVA类首次装入时,会对静态成员变量或方法进行一次初始化,但方法不被调用是不会执行的,静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同。

    初始化顺序:先初始化父类的静态代码--->初始化子类的静态代码-->
    (创建实例时,如果不创建实例,则后面的不执行)初始化父类的非静态代码(变量定义等)--->初始化父类构造函数--->初始化子类非静态代码(变量定义等)--->初始化子类构造函数

    类只有在使用New调用创建的时候才会被JAVA类装载器装入创建类实例时,首先按照父子继承关系进行初始化类实例创建时候,首先初始化块部分先执行,然后是构造方法;然后从本类继承的子类的初始化块执行,最后是子类的构造方法类消除时候,首先消除子类部分,再消除父类部分

  • 相关阅读:
    SQL 基础命令和函数
    [Delphi] FMXUI
    Win10 磁盘占用 100% 有效解决办法
    [转] Windows下编译OpenSSL
    [Java] Spring + SpringMVC + Maven + JUnit 搭建
    [Java] ApplicationContext 辅助类
    [Java] Maven 镜像仓库
    [Java] Spring MVC 知识点
    [Java] Maven 建立 Spring MVC 工程
    [Java] Maven 安装和配置
  • 原文地址:https://www.cnblogs.com/luckygxf/p/3519807.html
Copyright © 2011-2022 走看看