static相关知识点详解

文章目录

  • 一. 修饰成员变量
  • 二. 修饰成员方法
  • 三. 修饰代码块
  • 四. 修饰类

一. 修饰成员变量

static 修饰的成员变量,称为静态成员变量,该变量不属于某个具体的对象,是所有对象所共享的。

public class Student {private String name;private static String classRoom="106";public static void main(String[] args) {// 方法一:静态成员变量可以直接通过类名访问System.out.println(Student.classRoom);//方法二:静态成员变量也可以通过对象访问,但是classRoom是三个对象共享的Student s1=new Student();Student s2=new Student();Student s3=new Student();System.out.println(s1.classRoom);System.out.println(s2.classRoom);System.out.println(s3.classRoom);}
}

在这里插入图片描述

由以上代码可知:

静态成员变量特性】:

  1. **不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中。
  2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问。
  3. 类变量存储在方法区当中。
  4. 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)。

二. 修饰成员方法

被 static 修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的。在类外部,静态成员一般是通过静态方法访问的。

public class Student {private String name;private static String classRoom="106";public static String getClassRoom(){return classRoom;}
}
class TestStudent{public static void main(String[] args) {Student s1=new Student();System.out.println(Student.getClassRoom());}
}

在这里插入图片描述
由以上代码可知:

静态方法特性】:

  1. 不属于某个具体的对象,是类方法。
  2. 可以通过对象调用,也可以通过**类名.静态方法名(…)**方式调用,更推荐使用后者。

在这里插入图片描述
在这里插入图片描述

  1. 不能在静态方法中访问任何非静态成员变量

在这里插入图片描述
在这里插入图片描述

  1. 静态方法中不能调用任何非静态方法。
  2. 静态方法无法重写,无法实现多态。

三. 修饰代码块

静态成员变量一般不会放在构造方法中来初始化,构造方法中初始化的是与对象相关的实例属性。那么静态成员变量该如何实现初始化呢?

1. 就地初始化:在定义时直接给出初始值

private static String classRoom="106";

2. 静态代码块初始化

使用 static 定义的代码块称为静态代码块。一般用于初始化静态成员变量。

public class Student {private String name;private static String classRoom;static {classRoom="106";}public static void main(String[] args) {System.out.println(Student.classRoom);}
}

在这里插入图片描述
这里有几点需要注意

  • 静态代码块不管生成多少个对象,其只会执行一次。
  • 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的。
  • 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)实例代码块只有在创建对象时才会执行。

四. 修饰类

被 static 修饰的内部成员类称为静态内部类。

public class OutClass {private int a;private static int b;public void methodA(){a=10;System.out.println(a);}public static void methodB(){System.out.println(b);}//静态内部类static class InnerClass{public void methodInner(){//a=100;//编译失败,在内部类中只能访问外部类的静态成员变量b=200;//methodA();//编译失败,因为methodB()不是静态成员方法methodB();}}public static void main(String[] args) {//静态内部类对象创建OutClass.InnerClass innerClass=new OutClass.InnerClass();innerClass.methodInner();}
}

在这里插入图片描述
这里有几点需要注意:

  • 在静态内部类中只能访问外部类中的静态成员。
  • 创建静态内部类对象时,不需要先创建外部类对象。

如果我们一定要访问外部类中的非静态成员呢?

我们可以通过在静态内部类内创建外部类对象,然后通过该对象去访问。

代码示例如下:

static class InnerClass{public void methodInner(){OutClass outClass=new OutClass();outClass.a=10;outClass.methodA();}
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/79812.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

F5负载均衡器参与的Kubernetes架构选项介绍

F5负载均衡器在业内有着很高的知名度,因为它不仅是F5的代表作,负载均衡(Load Balance)这一词汇正是由F5发明并引入国内的。当前,F5的能力不断拓展,从早期聚焦F5负载均衡器到现在的分布式云应用架构&#xf…

如何在网页下载腾讯视频为本地MP4格式

1.打开腾讯视频官网地址 腾讯视频 2.搜索你想要下载的视频 3. 点击分享,选择复制通用代码 <iframe frameborder="0" src="ht

spring boot分装通用的查询+分页接口

背景 在用spring bootmybatis plus实现增删改查的时候&#xff0c;总是免不了各种模糊查询和分页的查询。每个数据表设计一个模糊分页&#xff0c;这样代码就造成了冗余&#xff0c;且对自身的技能提升没有帮助。那么有没有办法实现一个通用的增删改查的方法呢&#xff1f;今天…

(6)(6.2) 任务命令

文章目录 前言 6.2.1 概述 6.2.2 导航命令 6.2.3 条件命令 6.2.4 DO命令 前言 本文介绍了 Copter、Plane 和 Rover 切换到自动模式时支持的任务指令。 &#xff01;Warning 这是一项正在进行中的工作&#xff0c;尚未经过全面审核。有关 Copter 的更佳列表&#xff0c;请…

湘潭大学 湘大 XTU OJ 1325 K-Good Number 题解(非常详细)

链接 1325 题面 题目描述 如果一个整数的二进制&#xff08;无前导0&#xff09;中1的个数比0的个数多&#xff0c;我们称其为好数。如果其中1比0多k个&#xff0c;我们称其为k-好数 现在给你一个整数&#xff0c;请计算它的k。 输入 第一行一个整数T(1≤T≤10000)&#…

jvm-类加载子系统

1.内存结构概述 类加载子系统负责从文件系统或网络中加载class文件&#xff0c;class文件在文件开头有特定的文件标识 ClassLoader只负责class文件的加载&#xff0c;至于它是否运行&#xff0c;则由Execution Engine决定 加载的类信息存放于一块称为方法区的内存空间&#xff…

初识Sentinel

目录 1.解决雪崩的方式有4种&#xff1a; 1.1.2超时处理&#xff1a; 1.1.3仓壁模式 1.1.4.断路器 1.1.5.限流 1.1.6.总结 1.2.服务保护技术对比 1.3.Sentinel介绍和安装 1.3.1.初识Sentinel 1.3.2.安装Sentinel 1.4.微服务整合Sentinel 2.流量控制 2.1.簇点链路 …

如何使用CSS实现一个瀑布流布局?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用CSS实现瀑布流布局⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚…

语法篇--XML数据传输格式

一、XML概述 1.1简介 XML&#xff0c;全称为Extensible Markup Language&#xff0c;即可扩展标记语言&#xff0c;是一种用于存储和传输数据的文本格式。它是由W3C&#xff08;万维网联盟&#xff09;推荐的标准&#xff0c;广泛应用于各种系统中&#xff0c;如Web服务、数据…

【了解一下常见的设计模式】

文章目录 了解一下常用的设计模式(工厂、包装、关系)导语设计模式辨析系列 工厂篇工厂什么是工厂简单工厂「模式」&#xff08;Simple Factory「Pattern」&#xff09;简单工厂代码示例&#xff1a;简单计算器优点&#xff1a;缺点&#xff1a; 静态工厂模式特点&#xff1a; 工…

NLP | 基于LLMs的文本分类任务

比赛链接&#xff1a;讯飞开放平台 来源&#xff1a;DataWhale AI夏令营3&#xff08;NLP&#xff09; Roberta-base&#xff08;BERT的改进&#xff09; ①Roberta在预训练的阶段中没有对下一句话进行预测&#xff08;NSP&#xff09; ②采用了动态掩码 ③使用字符级和词级…

基于nginx禁用访问ip

一、背景 网络安全防护时&#xff0c;禁用部分访问ip,基于nginx可快速简单实现禁用。 二、操作 1、创建 conf.d文件夹 在nginx conf 目录下创建conf.d文件夹 Nginx 扩展配置文件一般在conf.d mkdir conf.d 2、新建blocksip.conf文件 在conf.d目录新建禁用ip的扩展配置文…