#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));}
复制代码

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


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

java基础之static相关推荐

  1. Java基础之static关键字的用法

    Java中的static关键字主要用于内存管理.我们可以应用static关键字在变量.方法.块和嵌套类中. static关键字属于类,而不是类的实例.         静态(static)可以是: 变 ...

  2. Java 基础之 static 静态

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static ...

  3. Java基础(六) static五大应用场景

    static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.上一个章节我们讲了final关键字的原理及用法,本 ...

  4. Java基础-day08-static·static静态代码块·final 关键字·多态·汽车设计综合案例·异常

    day09 1.static 是java中的一个关键字 用于修饰成员(成员变量和成员) 1.static是一个关键字 2.static可以修饰成员变量和方法,被修饰的资源就是静态资源 3.静态资源优先 ...

  5. 25天掌握java基础(八)——static、单例、代码块、继承

    文章目录 Demo08-static.单例.代码块.继承 1.static 1.1static静态关键字 1.1.1static修饰成员变量 1.1.2static修饰成员方法 1.1.3static ...

  6. 【Java基础】static初始化块

    初始化块 当Java创建对象时,系统总是先调用该类里定义的初始化块.如果一个类定义了两个初始化块,则前面定义的初始化块先执行,后面定义的初始化块后执行. 初始化块只在创建Java对象时隐式执行,不能显 ...

  7. java复习系列[1] - Java 基础

    文章目录 Java 基础 final static Java的switch支持的数据类型 goto (扫盲 - 一般不用) String 不可变 不可变的优势 序列化 序列化的 *serialVers ...

  8. 第一阶段>>>Java基础进阶 OOP/Reflect/注解/IO流/API核心

    目录 >>>java基础01-结构以及类型 >>>java基础02-初识数组 >>>java基础03-面向对象OOP >>>ja ...

  9. Android开发教程JAVA基础(汇总)

    Android游戏开发视频教程(汇总) Android开发教程JAVA基础之Java 概述 Android开发教程JAVA基础之标示符.关键字1 Android开发教程JAVA基础之标示符.关键字2 ...

  10. java先执行static还是构造函数_【Java基础】类的实例化、static、父类构造函数执行顺序...

    重温java基础,以免自己以后犯原则性错误,这是最基本,最基础的东西. 先看结论: 一个类的实例化过程: 1,首先会执行类中static代码块(不管代码块是否在类的开头还是末尾处),如果这个类有父类, ...

最新文章

  1. [洛谷P1317]低洼地
  2. Leetcode 8. 字符串转换整数 (atoi) (每日一题 20210615)
  3. 常见的异步方式async 和 await
  4. python 最简单的实现适配器设计模式
  5. Exchanger和无GC的Java
  6. unique去除重复的向量_R语言向量与因子
  7. 配置V530交换机步骤
  8. 长沙android工程师,长沙安卓工程师辅导
  9. 对网站实施“记住我”的最佳方法是什么? [关闭]
  10. 人工智能python的缺点_浅谈人工智能的优缺点及使用环境
  11. MyBatis学习后篇
  12. SEO必备工具之Xenu(绿蜗牛)网站死链接检测
  13. 百度SEO站群PTCMS全自动采集小说网站源码
  14. mysql中增删改查的详解 例题 sql 语句
  15. 为什么手机网速太慢_为什么苹果手机的网速变慢了_苹果手机上网速度慢的解决方法-系统城...
  16. 高德地图基本开发流程
  17. Flink 学习笔记(源码篇)<一> ——Transformation
  18. Maven基础-认识Maven
  19. Android R系统aidl文件怎么对应的java文件找不到了?
  20. 【Android】从零开始

热门文章

  1. Flutter 的ButtonBar
  2. ajaxfileupload 返回值_Ajaxfileupload 上传文件后返回response的contentType错误问题
  3. C# winfrom单击事件弹出浏览器
  4. PHPExcel 根据总列数生成EXCEL列名
  5. mysql查询表字段的个数
  6. linux扩容系统盘分区,系统盘扩容 扩展分区与文件系统_Linux系统盘
  7. 世界最好的字体引擎,泰山FreeType,开源:我们站在巨人的肩膀上
  8. top 显示按照内存、CPU排序
  9. 错误:has been compiled by a more recent version of the Java Runtime (class file version 56.0)
  10. 电源8针插头,有两种标准?