• Java中的static的使用


     

    1.Java 中被static修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享、且优先于对象存在。静态成员可以使用类名直接访问,也可以使用对象名进行访问。使用 static 可以修饰变量、方法和代码块。

    2.public 修饰符表示公开的、公有的,静态变量使用static修饰

    3.静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。

    复制代码
    public class HellWorld{
    
        String name = “Java”;//非静态变量
    
        static String hobby = “ programing”;//静态变量
    
        public static void print(){
    
          System.out.println(“欢迎您:” + name + ” !”);//不能直接调用非静态变量
    
          System.out.println(“欢迎您:” + hobby + ” !”);//可以直接调用静态变量
    
        }
    复制代码

      }

    4.如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。 

    复制代码
    public class HellWorld{
    
        String name = “Java”;//非静态变量
    
        static String hobby = “program ”;//静态变量
    
        //静态方法中调用非静态变量
    
        public static void print(){
    
          //创建类的对象
    
          HelloWorld hello=new HelloWorld();
    
          //通过对象来实现在静态方法中调用非静态变量
    
          System.out.println(“欢迎您:”+hello.name+”!”);
    
          //静态方法中可以直接调用静态变量
    
          System.out.prinltn(“欢迎喜欢”+ hobby +”的”+hello.name);     }   }
    复制代码

    5.在普通成员方法中,则可以直接访问同类的非静态变量和静态变量 

    复制代码
    public class HellWorld{
    
        String name = “Java”;//非静态变量
    
        static String hobby = “ programing”;//静态变量
    
        public void print(){//普通方法
    
          System.out.println(“欢迎您:” + name + ” !”);
    
          System.out.prinltn(“欢迎喜欢”+ hobby +”的”+hello.name);     }   }
    复制代码

     6.静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法  

    复制代码
    public class HellWorld{
    
        String name = “Java”;//非静态变量
    
        static String hobby = “program ”;//静态变量
    
        //非静态方法
    
        public void show(){
    
          System.out.println(“我是非静态方法,不能被静态方法直接调用。。。”);
    
        }
    
        //静态方法
    
        public static void show2(){
    
          System.out.println(“我是静态方法,可以直接被静态方法调用”);
    
        }
    
        //静态方法中通过对象来调用非静态方法。可以直接调用静态方法
    
        public static void print(){
    
          //创建类的对象
    
          HelloWorld hello=new HelloWorld();
    
          //通过对象来实现在静态方法中调用非静态方法
    
          hello.show();
    
          //静态方法中可以直接调用静态方法
    
          show2();
    
        }
    
      }
    复制代码

    二、Java 中的 static 使用之静态初始化块

    1.在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块。

    2.实例变量和类变量的区别:

    a) 存放位置:类变量随着类的加载而存放于方法区中;实例变量随着对象的建立存在于堆内存中。

    b) 生命周期:类变量生命周期最长,随着类的消失而消失;实例变量生命周期随着对象的消失而消失。

    3.静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。程序运行时,静态初始化快先被执行并优先于主函数,然后执行普通初始化块,最后才执行构造方法。

    复制代码
    public class StaticDemo {
    
      int num1;//声明变量1
    
      int num2;//声明变量2
    
      static int num3;//声明静态变量3
    
      public StaticDemo(){//构造方法
    
        num1 = 88;
    
        System.out.println("通过构造方法为变量1赋值");
    
      }
    
      {//初始化块
    
        num2 = 99;
    
        System.out.println("通过初始化块为变量2赋值");
    
      }
    
      static{//静态初始化这里不能giel普通变量赋值
    
        num3 = 77;
    
        System.out.println("通过静态初始化块为静态变量3赋值");
    
      }
    
      public static void main(String[] args) {
    
        StaticDemo hello = new StaticDemo();//创建类的对象hello
    
        System.out.println("num1:" + hello.num1);
    
        System.out.println("num2:" + hello.num2);
    
        System.out.println("num3:" + hello.num3);
    
        StaticDemo hello1 = new StaticDemo();
    
      }
    
    }
    复制代码

     运行结果:

     类属性中被static所引用的变量,会被作为GC的root根节点。作为根节点就意味着,这一类变量是基本上不会被回收的。因此,static很容易引入内存泄漏的风险。

  • 相关阅读:
    C#递归方法把数据表加载到treeview控件(C/S和B/S) 子曰
    ASP.NET 2.0 Web Part编程入门(转) 子曰
    C#中委托的运用 子曰
    window.returnValue使用方法(转) 子曰
    Treevi中的checkbox联动选择,以及Treeview的生成(即选择或取消复选框,其自选框同时选择或取消) 子曰
    发布MicrosoftReportViewer时的问题 子曰
    WCF,Net Remoting,Web service概念和区别 子曰
    使用sql字符串查询关键字CHARINDEX 子曰
    Mysql安装时出现APPLY security settings错误 子曰
    设计模式——单例模式(Singleton)
  • 原文地址:https://www.cnblogs.com/baizhanshi/p/5427078.html
Copyright © 2020-2023  润新知