浅析java中static的用法

 更新时间:2019年03月15日 11:20:10   作者:Keen贝贝  
这篇文章主要介绍了java中static的用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

static的作用:

1.将对象层级提升为类层级 (即将对象可以调用的,提升为对象和类均可调用的成员);            //推荐使用类来调用   ClassNme.静态成员 (包括变量、方法、成员对象)

2.static修饰的成员,在类加载时即准备完成,而不需要创建对象;   //类加载只做一次:

  1. 类名 的时候会类加载;
  2. new 对象时会类加载

3.静态成员方法只能访问静态成员,不能访问非静态成员(因为调用该方法时可能还没有创建对象);    而非静态成员方法既能访问非静态成员,又能访问静态成员(因为静态成员被所有对象共享)

4.提高运行时的优先级,如:静态代码块(见下)

/*
 编程实现static关键字使用方式的测试
 */
public class TestStatic{

 private int cnt = 1; //隶属于对象层级,每个对象都拥有独立的一份 成员变量
 private static int snt = 2; //隶属于类层级,整个类只有一份

 public void show(){ //隶属于对象层级 成员方法
  System.out.println("cnt = " + cnt); //1
 System.out.println("snt = " + snt); //2
 }

 public static void test(){ //隶属于类层级 推荐类名.的方式
 //System.out.println("cnt = " + cnt); //error 
 System.out.println("snt = " + snt); //2
 }

 public static void main(String[] args){

  TestStatic ts = new TestStatic();
 ts.show();
 TestStatic.test();
 }
}

上图解析:创建c1时,numOfCats == 1;创建c2时,numOfCats == 3;   //因为此时共用的同一个numOfCats

深入理解:

通常情况下成员变量隶属于对象层级,也就是每当创建一个对象就会拥有独立的内存空间来存放独立的成员变量信息(在堆中),若所有对象中某个成员变量完全相同时(如户籍管理系统中的国籍),还要各自存储,则会造成内存空间的浪费。
为了解决上述问题则使用static关键字修饰该成员变量表达静态的含义,此时该成员变量由对象层级提升为类层级只有一份,并被所有对象共享,会随着类的加载而准备就绪,与是否创建对象无关。此时使用静态成员变量推荐用  类名.静态成员变量名    进行访问,

代码块 -- java允许直接用{}写代码,叫代码块。 //jdbc中需要在类加载时 (在对象创建之前),要加载数据库驱动
写在类体中的代码块叫构造块,每创建一个对象,构造块都会被执行一次。 
前面加static的构造块叫静态代码块,类加载时执行一次。

以上所述是小编给大家介绍的java中static的用法详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • RestTemplate发送get和post请求,下载文件的实例

    RestTemplate发送get和post请求,下载文件的实例

    这篇文章主要介绍了RestTemplate发送get和post请求,下载文件的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • java多线程-同步块实例讲解

    java多线程-同步块实例讲解

    本文主要介绍java多线程-同步块的知识,这里整理了相关的详细资料及简单示例代码,有兴趣的小伙伴可以参考下
    2016-09-09
  • POI导出Excel报错No such file or directory的解决方法

    POI导出Excel报错No such file or directory的解决方法

    这篇文章主要为大家详细介绍了POI导出Excel报错No such file or directory的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • java设计模式原型模式与享元模式调优系统性能详解

    java设计模式原型模式与享元模式调优系统性能详解

    这篇文章主要为大家介绍了java设计模式原型模式与享元模式调优系统性能方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 解决java中mybatis报错:org.apache.ibatis.binding.BindingException:Invalid bound statement(not found):xx问题

    解决java中mybatis报错:org.apache.ibatis.binding.BindingException:

    这篇文章主要介绍了解决java中mybatis报错:org.apache.ibatis.binding.BindingException:Invalid bound statement(not found):xx问题,具有很好的参考价值,希望对大家有所帮助
    2024-03-03
  • java初学者必须理解这几个问题

    java初学者必须理解这几个问题

    这篇文章主要介绍了java初学者必须理解这几个问题,需要的朋友可以参考下
    2014-10-10
  • Java中数组转list的两种简单实现方式

    Java中数组转list的两种简单实现方式

    这篇文章主要介绍了两种将数组转换为List的方法,两种方法分别是使用Arrays.asList()方法和使用ArrayList构造函数,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-03-03
  • Intellij IDEA如何去掉@Autowired 注入警告的方法

    Intellij IDEA如何去掉@Autowired 注入警告的方法

    这篇文章主要介绍了Intellij IDEA如何去掉@Autowired 注入警告的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Java中使用ForkJoinPool的实现示例

    Java中使用ForkJoinPool的实现示例

    ForkJoinPool是一个功能强大的Java类,用于处理计算密集型任务,本文主要介绍了Java中使用ForkJoinPool的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • Spring数据库连接池实现原理深入刨析

    Spring数据库连接池实现原理深入刨析

    开发web项目,我们肯定会和数据库打交道,因此就会涉及到数据库链接的问题。在以前我们开发传统的SSM结构的项目时进行数据库链接都是通过JDBC进行数据链接,我们每和数据库打一次交道都需要先获取一次链接,操作完后再关闭链接,这样子效率很低,因此就出现了连接池
    2022-11-11

最新评论