0

你一直在使用的static关键字你真的懂吗?

 2 years ago
source link: https://blog.csdn.net/weixin_56727438/article/details/123421829
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

1、static是什么意思?

  • static 关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。
  • Main类
package com.xiao;

/**
 * @author :小肖
 * @date :Created in 2022/3/11 12:37
 */
public class Main {

    public static int f = 10;


    public static void show(){
        System.out.println("静态方法调用:f的值为" + f);
    }
}
  • 测试方法
import com.xiao.Main;

public class Test {

    public static void main(String[] args) {
        System.out.println("静态变量:" + Main.f);
        Main.show();
    }
}
  • 输出结果
静态变量:10
静态方法调用:f的值为10

通过上述实例可以发现,我们并没有创建对象实例就可以对 Main类 中的被 static 修饰的变量和方法进行调用。所以 static 关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。

2、为什么使用static关键字?

在以下两种情况下,static 关键字,满足了我们的需求。

  • 通常来说,用 new 创建类的对象时,数据存储空间才被分配,方法才供外界调用。但有时我们只想为特定域分配单一存储空间,不考虑要创建多少对象或者说根本就不创建任何对象。
  • 再就是我们想在没有创建对象的情况下也想使用变量和调用方法。

3、Java中是否可以覆盖(override)一个private或者是static的方法?

Java中 static 方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而 static 方法是编译时静态绑定的(就是当类被 Java 虚拟机加载的时候,该静态方法就会被连同类一起被加载,所以静态方法是属于类的,同时是编译时静态绑定的)。static 方法跟类的任何实例都不相关,所以概念上不适用。

4、是否可以在static环境中访问非static变量?

static 变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对 static 变量进行初始化。如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。

5、static静态方法能不能引用非静态资源?

不能。就是当类被 Java 虚拟机加载的时候,该静态方法就会被连同类一起被加载和初始化,所以静态方法是属于类的。而非静态资源的话,只有在创建了对应的实例之后才会被创建。而类的加载和初始化过程是在实例对象创建之前发生的,所以如果静态方法引用了根本就不存在的非静态资源的话,那么就会报出错误。

6、static静态方法里面能不能引用静态资源?

能。因为当类被 Java 虚拟机加载的时候, static 静态方法和静态资源会连同类一起被加载和初始化,那么此时 static 静态方法可以访问到对应的静态资源。所以 static 静态方法里面能引用静态资源。

7、非静态方法里面能不能引用静态资源?

能。因为静态资源会在类被 Java 虚拟机加载的时候就一起被加载和初始化好,而非静态方法是当实例对象被创建的时候才会被创建和初始化,所以当非静态方法被创建和初始化的时候对应的静态资源已经存在了。所以非静态方法里面能引用静态资源。

8、java静态变量、代码块、和静态方法的执行顺序是什么?

  • 代码块执行顺序:静态代码块——> 构造代码块 ——> 构造函数——> 普通代码块
  • 继承中代码块执行顺序:父类静态块——>子类静态块——>父类构造代码块——>父类构造器——>子类构造代码块——>子类构造器

Main类

package com.xiao;

/**
 * @author :小肖
 * @date :Created in 2022/3/11 12:37
 */
public class Main {


    private Integer a;
    //静态代码块
    static {
        System.out.println("静态代码块....");
    }

    //无参构造器
    public Main(){
        System.out.println("无参构造器....");
    }

    // 有参构造
    public Main(Integer a){
        this.a = a;
        System.out.println("有参构造器....");
    }

    // 构造代码块
    {
        System.out.println("构造代码块....");
    }

    //普通初始化块
    public void method(){
        System.out.println("普通初始化块....");
    }
}

测试类

import com.xiao.Main;

public class Test {

    public static void main(String[] args) {
        Main main = new Main();
        main.method();
    }
}

测试结果

静态代码块....
构造代码块....
无参构造器....
普通初始化块....

Recommend

  • 30

    区块链是所有数字货币的基础,并且它也是个快速发展的技术,其中会有很多应用或者项目来解决很多问题。作为数字货币爱好者,也许你听过类似智能合约和以太坊虚拟机(EVM)这些概念。但是你知道它们到底是什么,而且是怎么运作的吗?...

  • 39

    设计师经常犯的一个错误就是上帝视角,高估了用户的理解能力。一顿操作猛如虎,结果用户可能根本没看懂你的设计。 前段时间个人所得税app上线,用户可以在线办理个税专项扣除申报。我自己也尝试使用了一波,在申请房贷利息抵扣的时候发现了一个问题。 在房贷信息模...

  • 54
    • riccoqu.github.io 5 years ago
    • Cache

    C++ 面试之 static 关键字

    static是 c++ 的关键字,顾名思义是表示静态的含义。它在 c++ 中既可以修饰变量也可以修饰函数。那当我们使用 static 时,编译器究竟做了哪些事情呢? 早先面试中被问到 static 关键字,感觉既熟悉又陌生。熟悉是都知道如何去...

  • 60

    阿里妹导读: 曾被 paper 中各种各样的 Attentioin 搞得晕晕乎乎,尽管零零散散地整理过一些关于Attention 的笔记,重点和线索依然比较凌乱。...

  • 5
    • www.techug.com 3 years ago
    • Cache

    iOS 打包签名,你真的懂吗

    iOS 打包签名,你真的懂吗 2 导语:iOS 签名类型有 Development、AD-Hoc、In-House、App Store,而打包过程中又涉及到各种证书、Provision Profile、entitlements、CertificateSigningRequest、p12、A...

  • 5
    • blog.csdn.net 2 years ago
    • Cache

    static关键字你真的懂了吗?

    static关键字 1、Java中的static 1.1 static关键字的定义和性质 1)static翻译为"静态的"; 2)static修饰的方法是静态方法,static修饰的变量是静态变量; 3)使用static修饰的元素都称为静态的,都可以用"类名...

  • 7
    • os.51cto.com 2 years ago
    • Cache

    Fedora vs Ubuntu:你真的懂吗?

    Fedora 和 Ubuntu 都是出色的 Linux 发行版,它们都采用不同的方式实现相同的目标。但是它们有什么不同和相似...

  • 3

    作者:小牛呼噜噜 | https://xiaoniuhululu.com 计算机内功、JAVA底层、面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」 Java对象...

  • 3

    抖音网红的世界,你都懂吗?--抖音达人(KOL)总貌全解析 作者:

  • 2

    在Kotlin中,by 关键字主要用于实现委托模式。委托模式是一种设计模式,它允许一个对象将部分职责委托给另一个对象。在Kotlin中,by 关键字提供了一种简洁的语法,使得委托的实现变得更加轻松。 委托模式概述

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK