java基础之后学什么_java 静态变量

java基础之后学什么_java 静态变量static是java中比较重要也是比较常用的关键字,可能有人对其的大部分用法不是很了解,再次介绍也自己复习一下。 被static修饰的变量属于类变量,即不需要实例化就可以通过类名.变量名的方法直接引用,并且熟悉JVM类加载机制的同学应该清楚用static修饰的变量在编译过程中…

#static static是java中比较重要也是比较常用的关键字,可能有人对其的大部分用法不是很了解,再次介绍也自己复习一下。 ##static的几种用法

  1. static修饰变量
  2. static修饰方法
  3. static修饰代码块
  4. static修饰类
  5. 静态导包 下面从上面的几种用法分别详细介绍:
    1. static修饰变量   被static修饰的变量属于类变量,即不需要实例化就可以通过类名.变量名的方法直接引用,并且熟悉JVM类加载机制的同学应该清楚用static修饰的变量在编译过程中就会对其分配内存,故而可以直接引用。那么用static修饰变量的好处在哪呢?个人理解优点在于一般用static修饰的变量都是此类所共有的变量例如我们平时使用的日志类各种LOGGER,不会根据实例对象的不同而产生差别,在不同的该类实例对象中直接调用改变量使用进行日志记录即可,从某种意义上来说是实例共享的变量。

    2. static修饰方法   被static修饰的变量属于类变量,那自然被static修饰的方法属于类方法,同理不用实例化就可以用个类名.方法名的方式调用,也是在类加载的时候对此方法进行加载。 综合上面两种修饰方法初学者一般会有几个容易困惑问题:非静态方法中能否调用静态变量?静态方法中能否调用非静态变量或非静态方法?等等。。。解决此类问题的根本其实上面已经提到过了,根本在于静态资源(资源包括变量和方法)与非静态资源是属于类的还是属于对象的,而静态与非静态资源的加载顺序又不同,静态的一般类加载的时候就已进行了资源分配,而非静态的资源一般是对该类进行实例化也就是new对象的时候才进行初始化,那答案就已经明确了:

      1. 静态方法中可以引用静态变量及静态方法,无法调用非静态的资源,因为此时非静态的资源还没有初始化,没有真正的存在于内存中,无法调用。
      2. 非静态方法可以调用静态资源,因为非静态方法是在实例对象产生之后才有的,此时静态资源早已分配,可以调用。
    3. static修饰类   static修饰类的情况比较少见,一般用于修饰静态内部类。总结语法内部类的时候详细说明。

    4. static修饰代码块   与上面提到的静态资源相同,静态代码块也是在类加载的时候进行执行,一般日常使用是用于获取使用该类前所需要做的准备,例如jdbc操作类静态代码块先执行获取jdbc的连接等。

static {
         System.out.println("get jdbc connection");
     }

     平时开发中不同类继承有很多,同时它们可能也都具有各自的静态代码块,虽然是在JVM进行类加载的时候执行静态资源加载,但是具体的执行顺序却不够明了,下面通过下面一段代码的执行来一探究竟:

  public class TestStatic {
     static {
         System.out.println("TestStatic static block init");
     }
     public TestStatic(){
         System.out.println("TestStatic constructor run");
     }
}
public class TestStaticSub extends TestStatic{
    static {
        System.out.println("TestStaticSub static block init");
    }
    public TestStaticSub(){
        System.out.println("TestStaticSub constructor run");
    }
    public static void main(String[] args) {
        new TestStaticSub();
        new TestStaticSub();
    }
}

输出如下:

TestStatic static block init
TestStaticSub static block init
TestStatic constructor run
TestStaticSub constructor run
TestStatic constructor run
TestStaticSub constructor run

从执行结果可知顺序为:先执行父类的静态资源再执行子类的静态资源,且只在类加载时执行一次。 注:同一类中的静态资源按照代码的上下顺序进行加载 5. 静态导包 此类写法比较少用,笔者之前也未了解过看到别人的用法才学习到,是在进行import的时候对后面的包进行static修饰,这样在该类中使用此包中的变量或方法时,无法加上对应的类名即可直接引用。

import static java.lang.Math.abs;
public static void main(String[] args) {
 System.out.println(abs(-12));
    }

个人感觉这种写法比较少用,而且从某种程度上减弱了代码的可读性,可能只在某些测试用例中为了减少重复类名的书写使用,平时不推荐使用。


笔者水平有限,书写内容如有错误还请读者指正,还免误导大家,不胜感谢。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13841.html

(0)

相关推荐

  • Python生成二维码

    Python生成二维码二维码在我们的生活中越来越常见,如何使用Python生成二维码呢?在这篇文章中,我们将介绍如何使用Python生成二维码。

    2024-05-28
    63
  • 使用JavaScript获取字符串最后一个字符为中心,写一个原始标题

    使用JavaScript获取字符串最后一个字符为中心,写一个原始标题a href=”https://beian.miit.gov.cn/”苏ICP备2023018380号-1/a Copyright www.python100.com .Some Rights Reserved.

    2024-05-21
    66
  • CentOS 7下搭建高可用集群「建议收藏」

    CentOS 7下搭建高可用集群「建议收藏」x本文以两台机器实现双集热备高可用集群,主机名node1的IP为192.168.122.168 ,主机名node2的IP为192.168.122.169 。 分别修改2台主机名分别为node1和node2,在centos 7中直接修改/etc/hostname加入本机主机名和主…

    2023-08-18
    115
  • 技术分享 | MySQL 主机该如何配置 fs.aio-max-nr[通俗易懂]

    技术分享 | MySQL 主机该如何配置 fs.aio-max-nr[通俗易懂]作者:洪斌 爱可生南区负责人兼技术服务总监,MySQL ACE,擅长数据库架构规划、故障诊断、性能优化分析,实践经验丰富,帮助各行业客户解决 MySQL 技术问题,为金融、运营商、互联网等行业客户提…

    2023-03-17
    155
  • 使用pip安装numpy的方法

    使用pip安装numpy的方法Python是一种高级编程语言,被广泛用于科学计算、数据分析、人工智能等领域。其中,numpy是Python科学计算的重要库之一,提供了许多高效的多维数组操作函数和算法。在Python中,使用pip可以方便地安装和更新第三方库。本文将详细介绍使用pip安装numpy的方法。

    2024-06-11
    56
  • 用pip安装OpenCV

    用pip安装OpenCVOpenCV是一个基于BSD协议开源发行的跨平台计算机视觉库,它是专门用于图像处理和计算机视觉方面的开源库。随着计算机视觉的热度不断升温,OpenCV也变得越来越重要。本文将详细介绍如何使用pip来安装OpenCV。

    2024-08-20
    30
  • Oracle数据库简介[通俗易懂]

    Oracle数据库简介[通俗易懂]简介 Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目…

    2023-02-06
    143
  • Python Button:实现Web页面交互动态效果

    Python Button:实现Web页面交互动态效果随着互联网技术的不断发展,动态Web页面正变得越来越流行,Web开发人员不仅需要懂得网页设计和后端编程,还需要了解前端技术。本文从Python实现动态Web页面的角度,详细介绍如何使用Python实现Button的交互效果,以及如何借助Flask框架实现Web页面的动态效果。

    2024-02-25
    125

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注