Java的static关键字的用法

news/2024/5/18 11:44:33 标签: Java, static, 用法, 静态

文章目录

前言

说多了尽是吹水,还记不住。这里捡精要的写,怎么土怎么写,哈哈

static_4">static变量

特点
1.static修饰的变量和方法独立于类的任何实例(不需要new),被所有的实例共享
2. 先于构造函数、成员变量、方法创建,一旦创建不再销毁(所以普通方法内可以调静态变量/方法,静态方法内不能调成员变量/方法)

好处:不用生成类的实例就能直接调用(不用new,通过类名直接调)

就好比中国的土地只要地球不灰飞烟灭,就算遇到核爆也是存在的,是全国人民的,谁都可以用,但谁也不属于,用完还得还给国家,无!论!多!久!
静态变量/方法就好比土地上的房子,用的时候先创建,用完以后再拆了(释放内存)嗯,拆房子的事儿给Java做的

static变量都是成员变量,从未听闻有局部变量的

内存分配
静态变量在内存中只有一份,JVM只为静态变量分配一次内存,在加载类的过程中完成静态变量的内存分配。
静态的成员变量没有new就没有分配内存,new多少个实例,分配多少份内存(比静态变量耗内存吧?没有对比就没有伤害哈)

初始化
按定义的顺序一个一个来

static_23">static方法

综合开篇的概述与static变量的特点就是static方法的特点啦
至此飘过~~~~

static_27">static静态代码块

特点:

  1. 没有名字
  2. 位置随意
  3. 个数随意
  4. 自动执行
  5. 只执行一次
  6. 先于静态变量/方法、成员变量/方法执行。
  7. 一般用于应用的初始化

静态导包

这个用得比较少,使用很简单,使用静态导包后,被导的包的变量、方法用着就像自己的一样,不用再通过类名调了,

静态

只可以修饰静态内部类
用得实在不多,关键时候用对了有四两拨千斤之效

它与非静态内部类的区别是:

定义

1. 非静态内部类的成员变量和方法不能定义成静态的

2. 静态内部类是可以的

使用

1. 非静态内部类可以随意的访问外部类的成员变量/方法,即使是private的。

2. 静态内部类访问外部类的对象,只能访问静态的成员(非静态的不能访问)
3. 创建静态内部类时不需要将静态内部类的实例绑定到外部类的实例上

网上说在程序进行测试的时候很有用,但是看了好几遍,没有看明白测试的时候怎么好用,想看的话可以参考这篇博客:
https://www.cnblogs.com/gaodong/p/3608665.html

static_64">static关键字总结:

1. 全局唯一,任何修改都是全局性的
2. 只加载一次,优先于非静态
3. 使用方式上不依赖于实例对象
4. 征集周期属于类级别的,从JVM加载开始到JVM身死道消

最后的最后,来个Demo吧,搞编程最忌讳纸上谈兵

public class OuterClass {
    private static String msg = "哈哈哈哈";
    private String rrr = "嘻嘻嘻嘻";

    //静态内部类
    public static class NestedStaticClass{
        public static String sss = "呵呵呵呵";

        public String aaa = "嘿嘿嘿嘿";

        //试着将msg改成非静态的,这将导致编译错误
        public void printMessage(){
            System.out.println("静态内部类的非静态方法调用<外部类>的静态成员变量 --> " + msg);
            //调不到外部类的非静态成员变量
            // System.out.println("静态内部类的非静态方法调用<外部类>的静态成员变量: " + rrr);
            System.out.println("静态内部类的非静态方法调用<内部类>的静态成员变量 --> " + sss);
            System.out.println("--------------------------------------------------");
        }

        public static void staticPrint(){
            System.out.println("静态内部类的静态方法调用<外部类>的静态成员变量 --> " + msg);
            System.out.println("静态内部类的静态方法调用<内部类>的静态成员变量 --> " + sss);
            System.out.println("--------------------------------------------------");
        }
    }

    public class InnerClass{
        //非静态内部类定义静态成员会报错的,所有注释掉
        // public static String iii = "我是非静态内部类的静态成员变量";
        public String ooo = "呜呜呜呜";
        public void display(){
            System.out.println("非静态内部类的非静态方法调用<外部类>的<静态成员变量> --> " + msg);
            System.out.println("非静态内部类的非静态方法调用<外部类>的<非>静态成员变量 --> " + rrr);
            System.out.println("非静态内部类的非静态方法调用<内部类>的<非静态成员变量> --> " + ooo);
            System.out.println("--------------------------------------------------");
        }
    }

    public static void main(String[] args) {
        //调用静态内部类的静态方法
        OuterClass.NestedStaticClass.staticPrint();

        //调用静态内部类的非静态方法
        OuterClass.NestedStaticClass printer = new OuterClass
            .NestedStaticClass();
        printer.printMessage();

        //调用非静态内部类的非静态方法
        OuterClass.InnerClass innerObject = new OuterClass().new InnerClass();
        innerObject.display();
    }
}

<a class=staticDemo" />


http://www.niftyadmin.cn/n/1388099.html

相关文章

UVA 131 - The Psychic Poker Player

连接是&#xff1a;http://uva.onlinejudge.org/index.php?optiononlinejudge&pageshow_problem&problem67 又是暴力流的一个题目。 View Code 1 #include <iostream>2 #include <algorithm>3 using namespace std;4 5 const int MAXLENGTH 100, MAXCAR…

[转]网站架构收集

转自http://www.hiadmin.com/?p124 DBA notes上果然好东西很多 许多大型(只是访问量,而不是公司规模)的web 2.0的网站架构 上面都有 现在收集整理一下 这种资料.向来可遇不可求啊 WikiPedia 技术架构学习分享http://www.dbanotes.net/opensource/wikipedia_arch.html YouTube…

Java学习笔记—第十一章 多线程机制

第十一章 Java多线程机制了解Java中的进程与线程1.1 进程&#xff1a;一般程序的结构大致可分为一个入口、一个出口和一个顺序执行的语句序列。程序运行时&#xff0c;系统从程序入口开始&#xff0c;按照语句的执行顺序&#xff08;包括顺序、分支和循环&#xff09;完成相应指…

搭建JEESZ分布式架构2--CentOs下安装Tomcat7(环境准备)

声明&#xff1a;因为运行环境是基于Linux系统的&#xff0c;在做此框架之前需要做一些前期的环境准备工作CentOs下安装Tomcat7网上很多实例&#xff0c;因为博客后期作为框架的原生教程&#xff0c;故这边做详细的安装记录&#xff0c;我这边已经下载好了Tomcat7&#xff0c;通…

spket js ide

引用&#xff1a;http://baike.baidu.com/view/1609607.htm 概述 一个RIA的开发工具。支持JavaScript、XUL\XBL、Laszlo、SVG and Yahoo!Widget等新产品&#xff0c;具有代码自动完成、语法高亮、内容概要等功能&#xff0c;可以帮助开发人员高效的创建JavaScript程序&#xff…

Hibernate分页

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/u010741376/article/details/45564377 public class BaseDAO extends HibernateDaoSupport {/*** 使用hql 语句进行分页查询操作* param hql 需要查询的hql语句* param offse…

IDEA调试JDK源码的详细过程

IDEA调试JDK源码的详细过程 前言 IntelliJ IDEA版本&#xff1a;2017.3.2 JDK版本&#xff1a;1.8 操作过程 JDK的安装以及IntelliJ IDEA配置JDK的操作这里就不讨论了&#xff0c;不知道可以网上查一下 jdk的安装包里自带的有源码&#xff0c;就在jdk安装的根目录下。 一…

在BGP中使用Lo0口时必须注意的问题

在BGP中若使用Lo0口作为update source&#xff0c;必须在bgp中用net命令通告lo0口&#xff0c;而且必须在其他邻居里用静态路由中指明该lo0口的路由。这是我多次实验失败后总结的经验教训。或者最直接的&#xff0c;使用bgp router-id命令。转载于:https://blog.51cto.com/gole…