记一下 Java Static 有哪些玩法

2023-11-13

static 变量

static变量是使用 static关键字定义的变量,又被称为静态变量

静态变量是属于类的,也叫类变量;实例变量(非static变量)属于某个具体的对象

静态变量和非静态变量的区别:

  • 静态变量被所有对象共享,在内存中只有一个副本,在类初次加载的时候才会初始化
  • 非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响

静态变量可以通过类名直接引用。

class Dome {
    public static int staticVariable = 10;
}

public class Test {
    public static void main(String[] args) {
        System.out.println(Dome.staticVariable);
    }

}

static 方法

static方法是使用 static关键字定义的方法,和静态变量类似,同时它也不属于任何一个实例对象,即无需对象访问

class Dome {
    public static String staticMethod() {
        return "静态方法";
    }
}

public class Test {
    public static void main(String[] args) {
        System.out.println(Dome.staticMethod());
    }

}

static 代码块

静态代码块加载类时候加载,可以使用静态代码块初始化类,静态代码块可以出现在类的任意部分,当类被加载时按照静态代码块的顺序来执行每个代码块

class Dome {
   static {
       System.out.println("静态代码块");
   }
}

public class Test {
    public static void main(String[] args) {
        Dome dome = new Dome();
        Dome dome1 = new Dome();

    }

}

输出:

静态代码块

static 类(内部类)

内部类就是在一个类内部定义其他类结构的嵌套操作。

class Dome { // 外部类
    class InterClass { // 内部类
    }    
}

使用static定义的内部类称为静态内部类

非静态内部类在编译完成之后会隐含的保存着一个引用,该引用是指向创建它的外部类,但是静态类没有。没有这个引用就意味着静态内部类不会持有外部类当前对象的引用,所以在静态内部类中无法访问外部类的非static定义的类、属性和方法,同时静态内部类也不依赖于外部类。


class Dome {
    public String str = "内部类";
    class InterClass {

        InterClass() {
            System.out.println("内部类");
            System.out.println(str);
        }
    }

    static class InterClassStatic {
        InterClassStatic() {
            System.out.println("静态内部类");
            System.out.println(str); // Error: 无法从静态上下文中引用非静态 变量 str
        }

    }
}

public class Test {
    public static void main(String[] args) {
        Dome dome = new Dome();
        new Dome.InterClassStatic();
        new Dome.InterClass(); // Error: 需要包含Dome.InterClass的封闭实例
        dome.new InterClassStatic(); // Error: 限定的新静态类
        dome.new InterClass();

    }


}

static 包

import 后使用 static 导入包称为静态导包,使用import static 可以导入类里的静态方法,如直接导入Math类中的PI而无需引用Math类来使用PI

import static java.lang.Math.PI;
import static java.lang.System.out;

public class Test {
    public static void main(String[] args) {
        System.out.println(Math.PI);
        System.out.println(PI);
        out.println(PI);
    }
}

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

记一下 Java Static 有哪些玩法 的相关文章

  • 将图像作为 JPanel 的背景

    我是 Java 新手 目前正在创建一个带有图形的游戏 我有这个课程从JFrame 在这个班级里 我有很多JPanel需要图像作为背景 据我所知 为了能够在 JPanel 中绘制图像 我需要一个从 JPanel 扩展的单独的类以及该类的pai
  • 使用祖父母接口的默认方法

    我完全不明白为什么这行不通 interface Test default void doMagic System out println Abracadabra class TestImpl implements Test class Sp
  • 用于将字符串与预定义字符混合/混淆的简单算法

    我有一个字符串如下 它的长度是10 它代表基数 36 因此包含数字和大写字母 字符串的来源是数据库生成的序列 即从 1 及以上 正在转换为基数 36 我的问题是转换为base 36转换的结果也是连续 顺序的 例如 ID 1402 gt 00
  • 为什么需要使用java.util.TimerTask的purge()?

    Timer cancel 取消任务 Timer purge 从此计时器的任务队列中删除所有已取消的任务 如果我不在这里使用 purge 会发生什么 当计时器的任务队列已满时会发生什么 除非您正在运行的计时器数量过多 否则实际计时器行为不会发
  • Java:计算字符串中字母的出现次数

    我正在尝试编写一个程序来计算字符串中字母的出现次数 例如 如果用户输入 Java 则会显示 j 1 a 2 v 1 但是 我的程序似乎有问题 当我输入 java 这个词时 它显示的是 j 0 a 1 v 0 Scanner myScanne
  • Java RMI 通过互联网

    我正在用 Java 开发一个游戏 使用 RMI 进行所有网络通信 RMI 允许我调用服务器上的方法 但这对我来说还不够 我还希望服务器能够在连接的客户端之间传播消息 我的客户端查找服务器 它的接口扩展了远程 并在其上注册 它允许服务器知道谁
  • 在 ElasticSearch API 应用程序中找不到 NodeBuilder

    我正在尝试实现 Elasticsearch API 我的系统接受 nodeBuilder 时出现错误 这是代码 import org elasticsearch action index IndexResponse import org e
  • Simplify-Ja​​va (by hgoebl) 减少点列表大小始终为 2 的问题

    我正在尝试实现减少算法https github com hgoebl simplify java https github com hgoebl simplify java 我查看了他的测试代码 并试图找出我认为正确的逻辑 我正在列出一份清
  • Java中的String为什么是不可变的对象,但我在创建一个对象后仍然可以更改它的值? [复制]

    这个问题在这里已经有答案了 如果我可以创建一个字符串并给它一个值 这怎么可能呢 然后 我可以像这样简单地覆盖它的值 String a abc a def 我怎么可能改变的值a 我一定在这里遗漏了一些东西 我知道每当创建 String 对象时
  • 正则表达式的替代(流畅?)界面设计

    我刚刚看到了一个巨大的 Java 正则表达式 这让我对正则表达式的一般可维护性进行了一些思考 我相信大多数人 除了一些糟糕的 Perl 贩子 都会同意正则表达式很难维护 我正在考虑如何解决这种情况 到目前为止 我最有希望的想法是使用流畅的界
  • 非法监控状态异常

    如何将轮询线程传递给另一个线程进行处理 程序执行在控制器类中 该类具有 main 方法和线程池 主类控制器 public static void main String args throws InterruptedException Ru
  • 获取运行时提供的类名的 n 维数组的类

    给定一个完全限定的类名和多个维度 我想获取该类的类名 我相信我可以这样做 public Class elementType Class forName className return Array newInstance elementTy
  • 将 JAR 文件打包为 WAR 文件

    我有一系列依赖的Java项目 我想将它们打包成一个 JAR 文件 以便在我的 WAR 文件中使用 这些项目依赖于大量的外部库和项目 如log4j apache commons等 我选择 Eclipse 中的所有项目并导出为 JAR 文件 然
  • Cordova Android 应用程序中的网页不可用

    编辑 我一直在解决这个问题并回顾我的所有步骤 我很乐意缩小这个问题的规模 并在令人困惑的情况下获得更多确切的细节 目前 我觉得 Keycloak 似乎只想将我重定向到 https 据我所知 这应该是 Wildfly 服务器配置问题 编辑 我
  • 如何找到类路径上具有特定方法注释的所有类?

    我想在Java中实现一个基于注释的初始化机制 具体来说 我定义了一个注释 Retention RetentionPolicy RUNTIME Target ElementType METHOD public interface Initia
  • 如何获取嵌套类型内部结构的所有类型?

    我有一个函数如下 public void park List
  • 如何提高QNX6下Eclipse IDE的性能

    我们在 VMWare 环境中通过 QNX6 运行 Eclipse 速度非常慢 Eclipse 是这样启动的 usr qnx630 host qnx6 x86 usr qde eclipse eclipse data root workspa
  • OkHttp javax.net.ssl.SSLPeerUnverifiedException:主机名domain.com未验证

    我几天来一直在努力让它发挥作用 我正在尝试通过以下方式连接到我的服务器https带有自签名证书 我认为现在没有任何页面或示例是我未读过的 我做了什么 按照本教程创建了 bks 密钥库 http blog crazybob org 2010
  • 如何使用 itext 在 pdf 页脚上添加页码,它应该照顾其宽度?

    我的代码示例如下 Override public void onEndPage PdfWriter writer Document document addFooter writer private void addFooter PdfWr
  • 在同一项目上使用 Eclipse 和 NetBeans

    Eclipse 是一个非常棒的编辑器 我更喜欢使用它 但是缺少 Eclipse 的 GUI 设计工具 另一方面 NetBeans 非常适合 GUI 设计 在同一项目中使用 NetBeans 进行 GUI 设计和 Eclipse 进行其他所有

随机推荐

  • OW-DETR

    欢迎关注我的公众号 极智视界 获取我的更多笔记分享 大家好 我是极智视界 本文解读一下 基于 Transformer 的开放世界目标检测器 OW DETR 开放世界目标检测 OWOD 是一个具有挑战性的计算机视觉问题 其任务是检测一组已知的
  • 现代密码学第三次实验:不对称加密算法RSA

    现代密码学第三次实验 不对称加密算法RSA 前言 一 实验目的 二 实验环境 三 实验步骤 四 实验基本方法 五 实验程序清单 七 实验结果 八 实验总结 前言 为了帮助同学们完成痛苦的实验课程设计 本作者将其作出的实验结果及代码贴至CSD
  • python实验数据预处理案例_Python数据分析小案例——红楼梦文本分析(一) 文本预处理...

    本文开始介绍一个简单的数据分析案例 分析红楼梦文本 本文主要内容是将红楼梦文本按照章节获取每一回的标题 字数 段落数并保存到csv中方便后续数据分析 红楼梦小说文本可以在这里下载 链接 https pan baidu com s 1WEmu
  • 获取中文、英文、数字的首字母

    function getFirstChar s 获取第一个 s0 mb substr s 0 1 utf 8 一些汉字可能获取不到 可以如下单独处理 if s0 奧 return A if s0 斐 return F if s0 麒 ret
  • java实现洗牌算法——详解Collections.shuffle()

    洗牌题目描述 请撰写一个简单的洗牌程序 显示洗牌结果如下 题目分析 相当于实现52个数字随机打乱顺序 没有王 代码实现 SpringBootApplication public class HelloWorldMainApplication
  • 正交多载波调制(OFDM)

    Orthogonal Frequency Division Multiplexing OFDM OFDM is a special case of multi carrier communication as opposed to a co
  • [深入研究4G/5G/6G专题-39]: URLLC-10-《3GPP URLLC相关协议、规范、技术原理深度解读》-4-如何区分URLLC业务?网络切片的架构与技术详解

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 目录 前言 第1章 什么是网络切片 网络切片的基本概念 1 1 千变万化的业务需求
  • WSL2无法连接网络

    建议您可以参考下面的步骤重置一下网络试试 按键盘Win R打开 运行 输入cmd然后按Ctrl Shift 回车 以管理员身份打开命令提示符 在打开的命令提示符窗口中粘贴运行下面的命令 netsh winsock reset 命令执行完成后
  • 04PL-SQL过程之声明各种简单变量

    declare v temp number 2 v count binary integer 0 v sal number 7 2 4000 00 v date date sysdate v pi constant number 3 2 3
  • mockito mock void方法_Mockito调用静态方法和void方法

    静态类首先给你的类添加以下注解 PrepareForTest 静态类 class ContextConfiguration RunWith PowerMockRunner class PowerMockRunnerDelegate Spri
  • python练习6——PTA

    7 1 重复元素查找 100 分 每一个列表中只要有一个元素出现两次 那么该列表即被判定为包含重复元素 编写程序 对n行字符串进行处理 一行字符串构成一个列表 程序判定每一个列表中是否包含重复元素 最后统计包含重复元素的行数与不包含重复元素
  • 通俗讲解:PoW共识机制与以太坊的关系、Ghost协议 及 Casper PoS共识机制的变种...

    作者 林冠宏 指尖下的幽灵 掘金 juejin im user 587f0d 博客 www cnblogs com linguanh GitHub github com af913337456 腾讯云专栏 cloud tencent com
  • JavaScript 字符串:判断是否包含数字(待补充正则表达式做法)

    描述 给定字符串 str 检查其是否包含数字 包含返回 true 否则返回 false 示例1 输入 abc123 输出 true function containsNumber str return str indexOf 0 1 2 3
  • 1435 牛刀小试结构体

    题目描述 你已经用C语言提供的基本数据类型编写了很多的程序了 事实上 C语言还允许编程者在标准数据类型的基础上创建新的数据类型 你想不想试试 苏轼诗曰 读遍牙签三万轴 欲来小邑试牛刀 今天你也学下斯文 牛刀小试结构体吧 请用标准数据类型创建
  • ON_MESSAGE使用方法

    ON MESSAGE响应的是自定义消息 有关自定义消息的处理请看如下步骤 1 定义消息 在CCDlg类的头文件中加入如下代码 define WM CUSTOMIZE WM USER 1 头文件中加入Customize的声明 afx msg
  • 剑指offer !! 68.二叉树的最近公共祖先

    二叉树的最近公共祖先 中等 2 4K 相关企业 给定一个二叉树 找到该树中两个指定节点的最近公共祖先 百度百科中最近公共祖先的定义为 对于有根树 T 的两个节点 p q 最近公共祖先表示为一个节点 x 满足 x 是 p q 的祖先且 x 的
  • BeyondCompare4破解最佳实践

    先说原理 和大多数软件破解的方法一致 针对官方给出的试用期做文章 一般来说 收费软件大多提供一个 7 30 天的试用期 那对于软件来说 找出记录这个试用期的值就是关键 找到试用期的值以后 能够自动化修改即可完美实现无线循环使用正版软件 完美
  • 计算机毕业设计Node.js+Vue大学生网络安全题库系统(程序+源码+LW+部署)

    该项目含有源码 文档 程序 数据库 配套开发软件 软件安装教程 欢迎交流 项目运行 环境配置 Node js Vscode Mysql5 7 HBuilderX Navicat11 Vue Express 项目技术 Express框架 No
  • 简单 TCP UDP server client

    UDP server include stdafx h include
  • 记一下 Java Static 有哪些玩法

    static 变量 static变量是使用 static关键字定义的变量 又被称为静态变量 静态变量是属于类的 也叫类变量 实例变量 非static变量 属于某个具体的对象 静态变量和非静态变量的区别 静态变量被所有对象共享 在内存中只有一