Java静态变量、静态常量、静态方法

2023-11-13

Java静态变量、静态常量、静态方法

       静态变量和静态方法都属于静态对象。在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。

1、Java静态对象和非静态对象的区别

                                        静态对象                                                       非静态对象     
拥有属性:               是类共同拥有的                                            是类各对象独立拥有的
内存分配:              内存空间上是固定的                                      空间在各个附属类里面分配 
分配顺序:              先分配静态对象的空间                    继而再对非静态对象分配空间,也就是        初始化顺序是先静态再非静态。

2、Java静态对象的特点

A,静态对象的数据在全局是唯一的,一改都改。如果你想要处理的东西是整个程序中唯一的,弄成静态是个好方法。非静态的东西你修改以后只是修改了他自己的数据,但是不会影响其他同类对象的数据。 
B,引用方便。直接用类名.静态方法名  或者  类名.静态变量名就可引用并且直接可以修改其属性值,不用get和set方法。
C,保持数据的唯一性。此数据全局都是唯一的,修改他的任何一处地方,在程序所有使用到的地方都将会体现到这些数据的修改。有效减少多余的浪费。

D,static final用来修饰成员变量和成员方法,可简单理解为“全局常量”。对于变量,表示一旦给值就不可修改;对于方法,表示不可覆盖。

3、静态变量、静态方法和静态块

       通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象(跟类是否有static修饰无关)。

       你可以将方法和变量都声明为static。static 成员的最常见的 例子是main( ) 。声明为static的方法有以下几条限制: ·

A,它们仅能调用其他的static 方法

B,它们只能访问static数据

C,它们不能以任何方式引用this 或super(this涉及到对象,super 与继承有关)

       示例:Static 块仅在该类被加载时执行一次。下面的例子显示的类有一个static方法,一些static变量,以及一个static 初始化块。

  1. public class TestNew {  
  2.     static int a = 3;  
  3.     static int b;  
  4.     static void meth(int x){  
  5.         System.out.println("x = "+x);  
  6.         System.out.println("a = "+a);  
  7.         System.out.println("b = "+b);  
  8.     }  
  9.     static {  
  10.         System.out.println("static block initialized");  
  11.         b = a*4;  
  12.     }  
  13.     public static void main(String[] args) {  
  14.         // TODO Auto-generated method stub  
  15.         meth(42);  
  16.     }  
  17. }  

       执行结果是:

static blockinitialized
x = 42
a = 3
b = 12

上述classTestNew的执行顺序是:首先static 块执行(打印一条消息),a被设置为3,最后b被初始化为a*4 成12。然后调用main(),main () 调用meth() ,把值42传递给x。3个println ( ) 语句引用两个static变量a和b,以及局部变量x 。

4、外部使用静态变量或者静态方法

       在定义它们的类的外面,static方法和变量能独立于任何对象而被使用,你只要在类的名字后面加点号运算符即可。可以看到,这种格式与通过对象引用变量调用非static方法或者变量的格式类似。示例:

  1. class StaticDemo{  
  2.     static int a = 42;  
  3.     static int b = 99;  
  4.     static void callme(){  
  5.         System.out.println("a = "+a);  
  6.     }  
  7. }  
  8. public class TestNew {  
  9.     public static void main(String[] args) {  
  10.         // TODO Auto-generated method stub  
  11.         StaticDemo.callme();  
  12.         System.out.println("b = "+StaticDemo.b);  
  13.     }  
  14. }  

     执行结果:

a = 42
b = 99

5、静态内部类

静态内部类是指在一个类的内部,又定义了一个用static修饰的类。

A,首先,用内部类是因为内部类与所在外部类有一定的关系,往往只有该外部类调用此内部类。所以没有必要专门用一个Java文件存放这个类。

B,静态方法、静态成员变量。它唯一的作用就是随着类的加载(而不是随着对象的产生)而产生,以致可以用类名+静态成员名直接获得。这样静态内部类就可以理解了,它可以直接被用外部类名+内部类名获得。

publicclass Build {

      ..............

    public static class VERSION {

           ................

           public static final String RELEASE =getString("ro.build.version.release");

           ................

     }

     ................

}

在外部可以直接通过Build.VERSION.RELEASE来访问。

6、静态常量

静态常量不可变,可以直接被访问,如类名.静态常量名。例如:

public class MathTest{

   public static final double PI= 3.1415926;

}

可以直接采用MathTest.PI的形式访问该PI常量。

 

 

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

Java静态变量、静态常量、静态方法 的相关文章

  • 使用 Intellij Idea 和 gradle 在应用程序引擎上调试 localhost

    我正在使用 IntelliJ 社区添加并使用 Gradle 构建应用程序引擎标准环境应用程序 在迁移到 IntelliJ 和端点框架之前 我使用的是 Android Studio 我无法调试我的本地主机 我添加了 jvmFlags 如下所述
  • Netbeans 8.1 Gnome 3 GTK+ UI 字体和选项卡高度

    我刚刚在运行 GNOME 3 桌面的 Ubuntu 16 04 上安装了 NetBeans 8 1 如果可能的话 我想继续使用 IDE 的 GTK 外观和感觉 但 UI 上的字体 尤其是选项卡中的字体 太小且重叠 我尝试添加 fontsiz
  • 如何在由子控件组成的 SWT 复合材料上跟踪鼠标?

    我创建了自己的控件 我想跟踪鼠标并添加一个MouseTrackListener 很遗憾MouseEnter and MouseLeave当鼠标移动到我的合成部分 即标签和按钮 上时 也会生成事件 Mouse enter mouse ente
  • TreeMap 删除所有大于某个键的键

    在项目中 我需要删除键值大于某个键的所有对象 键类型为Date 如果重要的话 据我所知TreeMapJava中实现的是红黑树 它是一种二叉搜索树 所以我应该得到O n 删除子树时 但除了制作尾部视图并一一删除之外 我找不到任何方法可以做到这
  • Java 的支持向量机?

    我想用Java编写一个 智能监视器 它可以随时发出警报detects即将到来的性能问题 我的 Java 应用程序正在以结构化格式将数据写入日志文件
  • Thymeleaf 3 Spring 5 映射加载字符串而不是 HTML

    我正在尝试将 Spring 5 和 Thymeleaf 3 一起配置 我正在 Eclipse 上工作 我使用 全新安装 构建并使用 springboot run 运行应用程序 我已经设置了一个控制器和几个模板 但 Thymeleaf 似乎找
  • 如何在 JPQL 或 HQL 中进行限制查询?

    在 Hibernate 3 中 有没有办法在 HQL 中执行相当于以下 MySQL 限制的操作 select from a table order by a table column desc limit 0 20 如果可能的话 我不想使用
  • java inputstream 打印控制台内容

    sock new Socket www google com 80 out new BufferedOutputStream sock getOutputStream in new BufferedInputStream sock getI
  • Akka 与现有 java 项目集成的示例

    如果我已经有现有的javaWeb 应用程序使用spring and servlet容器 将 Akka 集成到其中的正确方法是什么 就像我将会有Actor1 and Actor2互相沟通的 开始使用这些演员的切入点是什么 例如 1 把它放在那
  • 如何在.NET中使用java.util.zip.Deflater解压缩放气流?

    之后我有一个转储java util zip Deflater 可以确认它是有效的 因为 Java 的Inflater打开它很好 并且需要在 NET中打开它 byte content ReadSample sampleName var inp
  • Java继承,扩展类如何影响实际类

    我正在查看 Sun 认证学习指南 其中有一段描述了最终修饰符 它说 如果程序员可以自由地扩展我们所知的 String 类文明 它可能会崩溃 他什么意思 如果可以扩展 String 类 我是否不会有一个名为 MyString 的类继承所有 S
  • JDBC 时间戳和日期 GMT 问题

    我有一个 JDBC 日期列 如果我使用 getDate 则会得到 date 仅部分2009 年 10 月 2 日但如果我使用 getTimestamp 我会得到完整的 date 2009 年 10 月 2 日 13 56 78 890 这正
  • 不可变的最终变量应该始终是静态的吗? [复制]

    这个问题在这里已经有答案了 在java中 如果一个变量是不可变的并且是final的 那么它应该是一个静态类变量吗 我问这个问题是因为每次类的实例使用它时创建一个新对象似乎很浪费 因为无论如何它总是相同的 Example 每次调用方法时都会创
  • 将 JavaFX FXML 对象分组在一起

    非常具有描述性和信息性的答案将从我这里获得价值 50 声望的赏金 我正在 JavaFX 中开发一个应用程序 对于视图 我使用 FXML
  • 在 Spring 上下文中查找方法级自定义注释

    我想知道的是 所有的类 方法Spring http en wikipedia org wiki Spring Framework注释为 Versioned的bean 我创建了自定义注释 Target ElementType METHOD E
  • 将 JScrollPane 添加到 JFrame

    我有一个关于向 Java 框架添加组件的问题 我有一个带有两个按钮的 JPanel 和一个添加了 JTable 的 JScrollPane 我想将这两个添加到 JFrame 中 我可以将 JPanel 添加到 JFrame 或将 JScro
  • java 中的蓝牙 (J2SE)

    我是蓝牙新手 这就是我想做的事情 我想获取连接到我的电脑上的蓝牙的设备信息并将该信息写入文件中 我应该使用哪个 api 以及如何实现 我遇到了 bluecove 但经过几次搜索 我发现 bluecove 不能在 64 位电脑上运行 我现在应
  • 子类构造函数(JAVA)中的重写函数[重复]

    这个问题在这里已经有答案了 为什么在派生类构造函数中调用超类构造函数时 id 0 当创建子对象时 什么时候在堆中为该对象分配内存 在基类构造函数运行之后还是之前 class Parent int id 10 Parent meth void
  • Log4j2 ThreadContext 映射不适用于parallelStream()

    我有以下示例代码 public class Test static System setProperty isThreadContextMapInheritable true private static final Logger LOGG
  • Android View Canvas onDraw 未执行

    我目前正在开发一个自定义视图 它在画布上绘制一些图块 这些图块是从多个文件加载的 并将在需要时加载 它们将由 AsyncTask 加载 如果它们已经加载 它们只会被绘制在画布上 这工作正常 如果加载了这些图片 AsyncTask 就会触发v

随机推荐

  • nginx静态代理设置二:静态文件在别的服务器

    动静结合 把网络上的路径映射成自己的虚拟机 修改共享的文件夹 映射的虚拟机也会同步更新 映射别的电脑的文件夹的时候要关闭防火墙 否则会一直连不上 1 新建静态文件夹StaticProxy 然后共享 选择账户Everyone就可以 2 本机测
  • void指针(void *)是什么?

    void 指针的使用规则 1 void 指针可以指向任意类型的数据 就是说可以用任意类型的指针对 void 指针赋值 例如 int a void p p a 如果要将 void 指针 p 赋给其他类型的指针 则需要强制类型转换 就本例而言
  • yii2学习笔记 --- 基础版配置链接多个数据库

    打开 config db php return class gt yii db Connection dsn gt mysql host localhost dbname yii2basic username gt root passwor
  • Qt数据库总结

    include
  • GD32F103配置PA15 PB3 PB4为普通IO

    PB3 PB4 PA15 作为普通IO时候 需要disable JTAG 释放出来 gpio pin remap config GPIO SWJ SWDPENABLE REMAP ENABLE 这个语句很重要 Function Key Sc
  • vue使用dhtmlx-gantt

    根据需求制作甘特图 绘制两时间段 相交地方为深颜色 没找到可以直接用的插件 于是就靠自己手动计算时间差与时间比例 但所得结果有部分误差 有更好组件欢迎交流 安装 npm install dhtmlx gantt save index js
  • Mysql数据库,查询结果为空值,如何处理?

    当sql查出空值的时候 如果想要获取 其中的值可能会出错 a res getString 字段 如果该字段的值是null 就会报错 所以需要在取字段值的时候做try catch 处理 try a res getString 字段 catch
  • unityShader物体表面流光效果

    本文转载自http blog csdn net lyh916 article details 51831720 参考链接 http liweizhaolili blog 163 com blog static 162307442012726
  • C++的排序

    C 十大排序 1 快速排序 2 插入排序 3 选择排序 4 冒泡排序 5 归并排序 6 堆排序 7 计数排序 8 桶排序 9 基数排序 10 希尔排序 11 补充 稳定排序 排序前后两个相等的数的相对位置不变 归并排序 冒泡排序 插入排序
  • On java 8 笔记——第六章 初始化和清理

    有两个安全性问题 初始化和清理 利用构造器保证初始化 在 Java 中 类的设计者通过构造器保证每个对象的初始化 如果一个类有构造器 那么 Java 会在用户使用对象之前 即对象刚创建完成 自动调用对象的构造器方法 从而保证初始化 构造器名
  • 宽度优先搜索(BFS)总结

    基本思想 宽度优先搜索一般用队列 queue 实现 且总是按层次的顺序进行遍历 解这类题的一般套路 定义一个结构体作为节点来存储信息 如保存横纵坐标x y 后续队列以该结构体为单位来存储 定义bool型数组 标记每个位置是否入过队列 定义增
  • 从好玩到好用:程序员用AI提效的那些事儿

    本片内容是 AI思维空间 ChatGPT纵横编程世界 点亮智慧火花的续作 主要记录组内开发小伙伴儿们在开发过程中的实际应用案例 记录典型案例 尽量不要和其他人重复 以解决开发过程中的实际问题为主 设计 方案 编码 测试 集成 部署等等 目的
  • python读取各种文件

    1 yaml文件 yaml文件的特点 1 数据结构 可以用类似大纲的 缩排 方式呈现 2 连续的项目通过减号 来表示 也可以用逗号来分割 3 键值对用冒号 来分隔 4 数组用 括起来 hash用 来括起来 写法 1 house yaml h
  • Bing 高级检索

    我常用的就这么几个 文章目录 使用空格表示与 site 返回属于指定网站的网页 使用filetype 限定文件类型 使用空格表示与 举例 如果直接输入搜索词 天气 返回 我们希望再精确一点 可以搜索 天气 贵州 这样就会优先搜到既有天气又有
  • 时间序列处理与应用

    时间序列处理与应用 介绍 一般情况下 在进行数据分析时 几乎都会遇到与时间序列相关的任务 例如 某企业的某项指标在第二天或者每周 又或每月等会发生什么 某款应用每天的下载量是多少等等 在本节实验中 将使用不同的方法来处理这些与时间序列相关的
  • 新版发布

    距离 v3 10 大版本发布刚过去一个月 v3 10 2 也要正式 release 了 快来看看它新增了哪些新功能以及修复了哪些问题吧 新功能 认证 品高云 OAuth 认证源支持 主机 支持自定义 PCI 透传设备的透传 主机 OpenS
  • 常用数据结构简讲

    在这里我会列举几个常用的STL数据结构与文档 更舒服的查看体验 1 v e c t o r vector vector 官网文档 可变长数组 动态数组 ST
  • c++基础--另类的分支结构

    前言 本节课讲的主要知识点是三目运算符和switch语句 同时也是我们分支结构部分的结尾内容 而从第三课开始到第五课 都是讲述分支结构的相关知识点 他们的特点都是相辅相成的 因此建议通读三篇文章 加强理解 同时做题也是必不可少滴 三目运算符
  • git commit --amend用法 合并commit

    反复修改并提交产生大量commit 正常第一次创建a txt提交 后创建b txt提交 会产生多个commit信息 git reset 回退到提交b txt之前 使用git commit amend打开后 操作同vim在其中可修改commi
  • Java静态变量、静态常量、静态方法

    Java静态变量 静态常量 静态方法 静态变量和静态方法都属于静态对象 在外部调用静态方法时 可以使用 类名 方法名 的方式 也可以使用 对象名 方法名 的方式 而实例方法只有后面这种方式 也就是说 调用静态方法可以无需创建对象 1 Jav