Java中的static的使用指南

 更新时间:2016年04月23日 11:41:12   作者:神话丿小王子  
本文给大家简单总结了下java中的static的使用注意事项及方法,非常的实用,有需要的小伙伴可以参考下

一、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(“欢迎喜欢”+program+”的”+hello.name);
    }
  }

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

public class HellWorld{
    String name = “Java”;//非静态变量
    static String hobby = “ programing”;//静态变量
    public void print(){//普通方法
      System.out.println(“欢迎您:” + name + ” !”);
      System.out.prinltn(“欢迎喜欢”+program+”的”+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();
  }
}

 运行结果:

相关文章

  • Netty 拆包沾包问题解决方案详解

    Netty 拆包沾包问题解决方案详解

    这篇文章主要为大家介绍了Netty 拆包沾包问题解决方案示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Nacos进程自动消失的原因分析

    Nacos进程自动消失的原因分析

    当使用低版本Nacos时,启动后关闭窗口或执行control+c会导致Nacos服务自动退出,原因是Nacos并未作为后台进程运行,解决方法是在启动Nacos时,采用后台进程方式启动,这样即使关闭窗口,Nacos服务也不会退出,从而保证服务的持续运行
    2023-02-02
  • Java中如何用Stream分组并求各组数量

    Java中如何用Stream分组并求各组数量

    这篇文章主要给大家介绍了关于Java中如何用Stream分组并求各组数量的相关资料,文中通过实例代码,对大家学习或者Java具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • Spring Boot + FreeMarker 实现动态Word文档导出功能

    Spring Boot + FreeMarker 实现动态Word文档导出功能

    Spring Boot与FreeMarker的组合,为开发者提供了一个强大的平台,可以轻松实现动态Word文档的导出,本文将指导你如何使用Spring Boot与FreeMarker模板引擎,创建一个简单的应用,用于根据数据库数据动态生成Word文档并下载,感兴趣的朋友一起看看吧
    2024-06-06
  • Java equals 方法与hashcode 方法的深入解析

    Java equals 方法与hashcode 方法的深入解析

    面试时经常会问起字符串比较相关的问题,比如:字符串比较时用的什么方法,内部实现如何?hashcode的作用,以及重写equal方法,为什么要重写hashcode方法?以下就为大家解答,需要的朋友可以参考下
    2013-07-07
  • Eclipse创建java程序可执行jar包教程

    Eclipse创建java程序可执行jar包教程

    这篇文章主要为大家分享了Eclipse创建java程序可执行jar包教程,具有一定的实用性和参考价值,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • SpringBoot实现自定义注解用于文件验证的详细过程(大小、扩展名、MIME类型)

    SpringBoot实现自定义注解用于文件验证的详细过程(大小、扩展名、MIME类型)

    SpringBoot,Spring Cloud中经常需要处理文件上传的功能,为了确保上传的文件满足特定的要求(如扩展名、MIME类型和文件大小),我们可以创建一个自定义注解来简化验证过程,需要的朋友可以参考下
    2024-08-08
  • java使用@Scheduled注解执行定时任务

    java使用@Scheduled注解执行定时任务

    这篇文章主要给大家介绍了关于java使用@Scheduled注解执行定时任务的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 使用SSM+Layui+Bootstrap实现汽车维保系统的示例代码

    使用SSM+Layui+Bootstrap实现汽车维保系统的示例代码

    本文主要实现对汽车维修厂的信息化管理功能,。实现的主要功能包含用户管理、配置管理、汽车管理、故障管理、供应商管理、配件管理、维修订单管理、统计信息、公告管理、个人信息管理,感兴趣的可以了解一下
    2021-12-12
  • Java中实现将jar包内文件资源释放出来

    Java中实现将jar包内文件资源释放出来

    这篇文章主要介绍了Java中实现将jar包内文件资源释放出来的方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08

最新评论