Java中的static关键字

Java中的static关键字

static为java中的关键字,可以修饰类中的方法、变量,以及修饰静态代码块
当用static修饰的方法和变量时可以直接通过类名.方法名和类名.变量名来访问,不需要进行对象的实例化操作,方便在没有创建对象的时候来调用方法或者变量

static修饰方法时,改方法称之为静态方法,由于static修饰的方法不需要通过对象的实例化来方法,所以在静态方法中不能访问非静态方法(实例方法)和非静态变量(实例变量),但是在非静态方法中可以访问静态方法

public class StaticDemo {

    public StaticDemo() {

    }

    private static String str1 = "hello-static";

    private String str2 = "hello-static-hello";

    private void printStr1() {
        System.out.println(str1);
        System.out.println(str2);
    }

    private static void printStr2() {

        System.out.println(str1);
//        System.out.println(str2);
//        printStr1();
    }

    static {
        System.out.println("hello-static");
    }

    public static void main(String[] args) {
        printStr2();
    }

}
当在静态方法printStr2访问非静态变量str2时,此时对象还没有进行实例化操作,所以无法访问实例变量str2,同样在静态方法printStr2中无法访问非静态方法printStr1

当static修饰变量时,被称为静态变量,在类初始加载时就会进行初始化,并且初始化一次,在内存中只有一个副本,属于类的一部分,jdk8中存储于堆中,而非静态变量是每个实例化对象所拥有的,在初始化对象的时候创建,每个对象所拥有的互不影响,静态变量的初始化顺序按照定义的顺序进行初始化

当static修饰代码块时,可以有多个代码块,初始化顺序按照定义的顺序进行初始化,并且也只会执行一次

当static修饰父类、子类相关代码块、静态变量时
加载顺序:
父类静态变量、静态代码块 ->子类静态变量、静态代码块->父类成员变量、普通代码块->父类构造方法->子类成员变量、普通代码块->子类构造方法

public class StaticParent {

    private static String staticParent="父类静态变量";

    static {
        System.out.println("父类静态代码块-->"+staticParent);
    }

    public StaticParent(){
        System.out.println("父类构造器");
    }

}

public class StaticChild extends StaticParent{

    public StaticChild(){
        System.out.println("子类构造器");
    }

    private static String staticChild="类静态变量";

    static {
        System.out.println("子类静态代码块-->"+staticChild);
    }

    public static void main(String[] args) {
        StaticChild staticChild1=new StaticChild();
        StaticChild staticChild2=new StaticChild();
    }
}

父类静态代码块-->父类静态变量
子类静态代码块-->类静态变量
父类构造器
子类构造器
父类构造器
子类构造器

Original: https://www.cnblogs.com/yangblogFamily/p/16336696.html
Author: 龙空白白
Title: Java中的static关键字

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/589647/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Maven配置私有仓库

    前言 当公司或个人具有自己独有的jar时,不想公开,一般就会放在自己的私有Maven仓库中,在项目中需要引用,此时就需要将公司私有仓库配置到maven当中,一般我们的maven配置…

    Java 2023年6月8日
    086
  • 手写个注册中心

    注册中心,主要作用就是做服务注册和发现; 常见注册中心 Eureka:Eureka是Spring Cloud Netflix中的重要组件,主要作用就是做服务注册和发现。2.0遇到性…

    Java 2023年6月7日
    076
  • 干货分享:ASP.NET CORE(C#)与Spring Boot MVC(JAVA)异曲同工的编程方式总结

    本文目的是通过全面简述C# 与JAVA 在基础语法以及ASP.NET CORE 与 Spring Boot MVC的在框架规范、部署、运行的异曲同工的实现方式,让大家更多的了解C#…

    Java 2023年5月29日
    0177
  • 线程池,我是谁?我在哪儿?

    大家好,这篇文章跟大家探讨下日常使用线程池的各种姿势,重点介绍怎么在 Spring 环境中正确使用线程池。 线程池使用姿势 首先问大家一个问题,你日常开发中是怎样使用线程池的? 我…

    Java 2023年6月14日
    096
  • 对象到底是怎么new出来的

    前言:要想理解本文,必须先了解JVM的内存结构 一.创建对象的方式 new:最常见 反射:Class.newInstance() 使用clone() 反序列化 二.创建对象的步骤(…

    Java 2023年6月7日
    088
  • 对象数组排序 和 类比JDK实现 sort()的方法

    1.定义自己的 MyComparable 接口 1 package Test.treeSetDemo; 2 3 public interface MyComparable { 4 …

    Java 2023年6月8日
    051
  • 搭建maven私服

    1.1 简介: Nexus 是Maven仓库管理器,如果你使用Maven,你可以从Maven中央仓库 下载所需要的构件(artifact),但这通常不是一个好的做法,你应该在本地架…

    Java 2023年6月5日
    093
  • WORD模板使用

    Date: 2012-12-03 13:05:55 中国标准时间 Author: csophys Org version 7.8.11 with Emacs version 24V…

    Java 2023年6月7日
    0117
  • 多线程渲染

    首先我们得明确3D引擎使用多线程的目的所在: 1、在CPU上进行的逻辑计算(比如骨骼动画粒子发射等)不影响渲染速度 2、较差的GPU渲染速度的低下不影响逻辑速度 第一个目标已经很明…

    Java 2023年5月30日
    091
  • Spring:基于注解的MVC程序示例

    首先创建一个 controller类 import org.springframework.stereotype.Controller; import org.springfram…

    Java 2023年5月30日
    087
  • Ubuntu 20.04 查看内存信息

    输入命令 dmidecode -t memory 输出如下: dmidecode 3.2 Getting SMBIOS data from sysfs. SMBIOS 2.8 pr…

    Java 2023年6月7日
    094
  • Spring Boot优化

    针对目前的容器优化,目前来说没有太多地方,需要考虑如下几个点: 线程数 超时时间 jvm优化 首先线程数是一个重点,初始线程数和最大线程数,初始线程数保障启动的时候,如果有大量用户…

    Java 2023年5月30日
    0118
  • 【反射】method.isBridge() 桥接方法

    泛型擦除留下的方法 public interface SuperClass<t> { void method(T t); } </t> 实现类 public…

    Java 2023年5月30日
    077
  • day01-数据库的安装和使用

    Java数据库的安装和使用 1.数据库的作用 一个问题:淘宝网、京东、微信抖音,都有各自的功能,那么我们退出系统的时候,为什么信息还在? 解决之道-文件,数据库 为了解决上诉问题,…

    Java 2023年6月15日
    093
  • 物联网架构成长之路(56)-SpringCloudGateway+JWT实现网关鉴权

    0. 前言结合前面两篇博客,前面博客实现了Gateway网关的路由功能。此时,如果每个微服务都需要一套帐号认证体系就没有必要了。可以在网关处进行权限认证。然后转发请求到后端服务。这…

    Java 2023年5月30日
    095
  • MCU软件最佳实践——矩阵键盘驱动

    1.矩阵键盘vs独立按键 在mcu应用开发过程中,独立按键比较常见,但是在需要的按键数比较多时,使用矩阵键盘则可以减少io占用,提高系统资源利用率。例如,某mcu项目要求有16个按…

    Java 2023年6月6日
    070
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球