iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >java static 详解
  • 474
分享到

java static 详解

javastatic 2023-10-25 16:10:37 474人浏览 八月长安
摘要

1、static目的  java中的static关键字主要用于内存管理。 2、static范围 使用范围:java static关键字可以用在变量、方法、代码块和嵌套类伤。 作用范围:static关键字属于类,而不是类的实例。 静态(sta

1、static目的 

java中的static关键字主要用于内存管理。

2、static范围

使用范围:java static关键字可以用在变量、方法、代码块和嵌套类伤。

作用范围:static关键字属于类,而不是类的实例。

静态(static)修饰如下:

  1. 变量:称为类变量、静态变量
  2. 方法:称为类方法、静态方法
  3. 代码块:称为静态代码块
  4. 嵌套类:称为静态内部类

3、静态变量

类的成员变量可以分为以下两种:

  1. 静态变量(或称为类变量),指被 static 修饰的成员变量。
  2. 实例变量,指没有被 static 修饰的成员变量。

静态变量与实例变量的区别如下:
1)静态变量

  1. 运行时,Java 虚拟机只为静态变量分配一次内存,加载类过程中完成静态变量的内存分配。
  2. 在类的内部,可以在任何方法内直接访问静态变量。
  3. 在其他类中,可以通过类名访问该类中的静态变量。

2)实例变量

  1. 每创建一个实例,Java 虚拟机就会为实例变量分配一次内存。
  2. 在类的内部,可以在非静态方法中直接访问实例变量。
  3. 在本类的静态方法或其他类中则需要通过类的实例对象进行访问。

静态变量在类中的作用如下:

  1. 静态变量可以被类的所有实例共享,因此静态变量可以作为实例之间的共享数据,增加实例之间的交互性。
  2. 如果类的所有实例都包含一个相同的常量属性,则可以把这个属性定义为静态常量类型,从而节省内存空间。例如,在类中定义一个静态常量 PI。

静态变量的好处:它能使程序存储器高效(即它节省内存)。

class Student8 {    int rollno;    String name;    static String college = "ITS";    Student8(int r, String n) {        rollno = r;        name = n;    }    void display() {        System.out.println(rollno + " " + name + " " + college);    }    public static void main(String args[]) {        Student8 s1 = new Student8(111, "Karan");        Student8 s2 = new Student8(222, "Aryan");        s1.display();        s2.display();    }}//原文出自【易百教程】,商业转载请联系作者获得授权,非商业请保留原文链接:https://www.yiibai.com/java/static-keyWord-in-java.html

4、静态方法

同成员变量,成员方法也可以分为以下两种:

  1. 静态方法(或称为类方法),指被 static 修饰的成员方法。
  2. 实例方法,指没有被 static 修饰的成员方法。

静态方法与实例方法的区别:

  1. 静态方法,属于类,而不属于类的对象。
    1)它通过类直接被调用,无需创建类的对象。
    2)静态方法中,不能使用 this 关键字,也不能直接访问所属类的实例变量和实例方法;
    3)静态方法中,可以直接访问所属类的静态变量和静态方法。
    4)同this 关键字,super 关键字也与类的实例相关,静态方法中不能使用 super 关键字。
  2. 实例方法,可直接访问所属类的静态变量、静态方法、实例变量和实例方法。

静态方法与静态变量好处:

属于类级别,无需创建对象就即可直接使用,使用方便。

全局唯一,内存中唯一,静态变量可以唯一标识某些状态。

类加载时候初始化,常驻在内存,调用快捷方便。

静态方法与静态变量缺点:

静态方法不能调用非静态的方法和变量。

不能使用this和super关键字。

静态方法与静态变量适用场景:

静态方法,最适合工具类中方法的定义;比如文件操作,日期处理方法等。

静态方法,适合入口方法定义;比如单例模式,因从外部拿不到构造函数,所以定义一个静态的方法获取对象非常有必要。

静态变量适合全局变量的定义;举例:用一个布尔型静态成员变量做控制标志。

5、静态代码块

定义:静态代码块,是 Java 类中的 static{ } 修饰的代码。

作用:用于类初始化时,为类的静态变量赋初始值,提升程序性能。
静态代码块的特点如下:

  1. 静态代码块,有点类似于一个方法,但不可以存在于任何方法体内。
  2. 静态代码块,可以置于类中的任何地方,类中可以有多个静态初始化块。 
  3. Java 虚拟机在加载类时执行,将只需要进行一次初始化的操作放在 static 代码块。
  4. 类中含多个静态代码块,Java虚拟机将按它们在类中出现的顺序依次执行,且都执行一次。
  5. 同静态代码块与静态,不能直接访问类的实例变量和实例方法,需通过类的对象访问。
public class StaticCode {    public static int count = 0;    {        count++;        System.out.println("非静态代码块 count=" + count);    }    static {        count++;        System.out.println("静态代码块1 count=" + count);    }    static {        count++;        System.out.println("静态代码块2 count=" + count);    }    public static void main(String[] args) {        System.out.println("*************** StaticCode1 执行 ***************");        StaticCode sct1 = new StaticCode();        System.out.println("*************** StaticCode2 执行 ***************");        StaticCode sct2 = new StaticCode();    }}

6、静态类

 java中一个类要被声明为static的,只有一种情况,就是静态内部类(内嵌类)。如在外部类声明为static的,程序会编译都不会通过。

静态内部类,跟静态方法一样,只能访问静态成员变量和方法,不能访问非静态方法和属性。

普通内部类,可以访问任意外部类的成员变量和方法。

静态内部类,可以声明普通成员变量和方法,而普通内部类不能声明static成员变量和方法。

静态内部类,可以单独初始化。

Inner i = new Outer.Inner();

 普通内部类初始化:

Outer o = new Outer();Inner i = o.new Inner();

适用场景:当外部类需要使用内部类,而内部类无需外部类资源,并且内部类可以单独创建时,考虑采用静态内部类的设计,在知道如何初始化静态内部类。

public class Outer {    private String name;    private int age;    public static class Builder {        private String name;        private int age;        public Builder(int age) {            this.age = age;        }        public Builder withName(String name) {            this.name = name;            return this;        }        public Builder withAge(int age) {            this.age = age;            return this;        }        public Outer build() {            return new Outer(this);        }    }    private Outer(Builder b) {        this.age = b.age;        this.name = b.name;    }}

静态内部类,调用外部类的构造函数来构造外部类;静态内部类可被单独初始化,于是在外部就可以有下面的实现:

public Outer getOuter(){    Outer outer = new Outer.Builder(2).withName("Yang Liu").build();    return outer;}

静态类总结

如果类的构造器或静态工厂中有多个参数,设计这样类时,最好使用Builder模式,特别是当大多数参数都是可选的时候。

2.如果现在不能确定参数的个数,最好一开始就使用构建器即Builder模式。

参考:

Java static关键字(静态变量和静态方法)

Java static关键字 -Java教程™

Java静态类 - Facilitate - 博客园

来源地址:https://blog.csdn.net/jiahao1186/article/details/121886704

--结束END--

本文标题: java static 详解

本文链接: https://www.lsjlt.com/news/442584.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java static 详解
    1、static目的  java中的static关键字主要用于内存管理。 2、static范围 使用范围:java static关键字可以用在变量、方法、代码块和嵌套类伤。 作用范围:static关键字属于类,而不是类的实例。 静态(sta...
    99+
    2023-10-25
    java static
  • Java---类、static(静态)详解
    一、类 1.1 如何定义类 类的定义格式如下: 修饰符 class 类名 {    // 1.成员变量(属性)    // 2.成员方法 (行为)    // 3.构造方法 (初始化类的对象数据的)} 例如: public cl...
    99+
    2023-09-16
    java 开发语言
  • 详解Java的static关键字
    文章目录 🎄静态方法🌺静态方法和非静态方法对比🛸静态方法实例🛸非静态方法实例 🌹static关键字⭐static变量⭐static代码块 ...
    99+
    2023-12-22
    java 开发语言 static 静态方法
  • Java static关键字详细解析
    目录static目的static范围静态(static)修饰静态变量静态方法静态代码块静态类static变量存储在方法区(Method Area)static目的 java中的sta...
    99+
    2024-04-02
  • Java超详细透彻讲解static
    目录1. 引入2. 理解3. 使用3.1 使用范围3.2 static修饰属性3.2.1 设计思想3.2.2 分类3.2.3 注意3.2.4 举例3.2.5 类变量内存解析3.3 s...
    99+
    2024-04-02
  • C++static详解,类中的static用法说明
    目录C++static详解,类中static用法static特点:用来控制存储方式和可见性类中的static关键字什么时候用static?为什么要引入static?c++中stati...
    99+
    2024-04-02
  • Java修饰符 abstract,static,final 的区别详解
    static 表示静态,它可以修饰属性,方法和代码块。 1.static修饰属性(类变量),那么这个属性就可以用类名.属性名来访问,也就是使这个属性成为本类的类变量,为本类对象所共有...
    99+
    2022-11-15
    abstract static final
  • private static final Long serialVersionUID= 1L详解
    我们知道在对数据进行传输时,需要将其进行序列化,在Java中实现序列化的方式也很简单,可以直接通过实现Serializable接口。但是我们经常也会看到下面接这一行代码, private static final Long serialV...
    99+
    2023-09-11
    java 开发语言 序列化和反序列化 Powered by 金山文档
  • 详解Java中static关键字的使用和原理
    目录概述定义和使用格式类变量静态方法调用格式静态原理图解静态代码块概述 关于 static 关键字的使用,它可以用来修饰的成员变量和成员方法,被修饰的成员是属于类的,而不是单单是属 ...
    99+
    2022-11-13
    Java static关键字 Java static
  • Java关键字详解之final static this super的用法
    目录1. final 关键字:2. static 关键字:3. this 关键字:4. super 关键字:final,static,this,super 关键字总结 正文开始@A...
    99+
    2024-04-02
  • Java深入讲解static操作符
    目录前言static修饰成员变量静态成员变量的特性static修饰的成员方法静态方法特性前言 这篇文章主要是从类中static修饰的成员变量,static修饰的成员方法这两个方面来讲...
    99+
    2024-04-02
  • C/C++ extern和static的使用详解
    目录前言externstaticc++ static members in class总结前言 在讲到extern和static的时候先了解一下定义和声明的基本概念 定义(defin...
    99+
    2024-04-02
  • 解析Java中的static关键字
    目录一.static关键字使用场景1.1、静态变量1.2、静态方法1.3、静态代码块1.4、静态内部类1.5、静态导入二.static变量和普通成员变量区别三.类的构造器到底是不是s...
    99+
    2024-04-02
  • C/C++中的static关键字详解
    目录C/C++ 中的 static1. 静态局部变量2. 静态全局变量3. static 修饰函数C++的 static 成员静态成员变量 静态成员函数总结:static是...
    99+
    2024-04-02
  • 详解php用static方法的原因
    PHP中的静态方法是指在类中定义的可以直接通过类名调用的方法,而不需要实例化类对象。使用静态方法的主要原因有以下几点:1. 访问类成...
    99+
    2023-08-11
    php
  • 浅谈Java中static和非static的区别
    关于static和非static变量的区别 static 修饰的变量称为类变量或全局变量或成员变量,在类被加载的时候成员变量即被初始化,与类关联,只要类存在,static变量就存在。非static修饰的成员变量是在对象new出来的时候划分存...
    99+
    2023-05-31
    java static ava
  • c语言static关键字用法详解
    目录1.static修饰全局变量2.static修饰函数3.static修饰局部变量总结:1.static修饰全局变量 我们创建两个源文件,一个test.c,一个main.c 现在...
    99+
    2024-04-02
  • C语言中static和auto用法详解
    目录static的第一种用法:定义为静态变量static的第二种用法:有理说不清,直接代码见真知auto的用法:直接代码见真知总结static的第一种用法:定义为静态变量 何为静态变...
    99+
    2024-04-02
  • C语言之详解静态变量static
    目录关键字static    修饰局部变量运行结果:调用静态变量static运行结果:结论: 修饰全局变量 代码执行:代码执行:结论...
    99+
    2023-05-15
    C语言详解static关键字 C语言static关键字 详解static关键字
  • 详解C语言中的Static关键字
    一、static关键字的基本含义 首先,static关键字的意思是静态的,用于修饰局部变量,全局变量和函数,修改其数据储存类型 1.局部变量:在任意一个函数内部定义的变量(不加sta...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作