java基础回顾---static关键字

简介: 前言:好久没写博文了(我家那只猫咪叫我赶紧写博客涨涨粉,哈哈),最近在重新学习JavaSE部分的知识,在学到static关键字的时候感觉以前学的时候模模糊糊的不是很明白,重新温故了一下,并做一个记录。

个人推荐:

📢📢📢 前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下 "通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。 点击跳转到教程

在这里插入图片描述

前言:好久没写博文了(我家那只猫咪叫我赶紧写博客涨涨粉,哈哈),最近在重新学习JavaSE部分的知识,在学到static关键字的时候感觉以前学的时候模模糊糊的不是很明白,重新温故了一下,并做一个记录。

@[TOC]


一.static关键字

如果一个成员使用 static关键字进行修饰,那么这个成员就不再属于 对象了,而是属于 ,会给所有该类的 对象共享,在 内存中只有一个。

二.static关键字常用操作

1.静态成员的使用

被static修饰的 变量方法可通过 类.变量 类.方法进行 操作

1.1 项目结构:
在这里插入图片描述

1.2 DrinkWater.class:
在这里插入图片描述

1.3 Test.class:
在这里插入图片描述
运行效果:

![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/485ea3aced574ed69a87242bc73918fe.png)

2. static修饰的成员数据可被共享

static修饰的成员,被所有的对象所共享。
例子:统计创建了多少个对象。

2.1 在DrinkWater.class的构造函数中对静态属性num进行+=1操作(即每创建一个对象就进行加1操作)。
在这里插入图片描述
2.2 Test.class测试类中:
在这里插入图片描述
运行效果:
在这里插入图片描述
3.static修饰的成员执行顺序

静态代码块只执行一次【程序执行的时候进行加载】,而 代码块无参构造函数执行情况由 对象决定【对象进行创建的时候代码块和构造函数进行加载】,在测试类中创建了三个对象, 代码块无参构造函数执行了三次,执行顺序并不是从上向下进行执行,而是: 静态代码块>代码块>无参构造函数

3.1 在DrinkWater.class中进行以下操作:
在这里插入图片描述

3.2 执行Test.class测试类
在这里插入图片描述

4.静态代码块的使用

静态代码块在程序执行的时候进行加载【类加载 JVM时运行】,所以在对类的数据进行初始化的时候进行优选考虑。

开发中的例子:
数据库加载驱动的时候使用静态代码块进行加载:
在这里插入图片描述
例子2:使用静态代码块块初始化对象

4.1 创建StaticClass类

![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/d1ec78455a7c4a1384890530c7802bd3.png)

4.2 DrinkWater.class中
在这里插入图片描述
4.3 Test.class测试类中
在这里插入图片描述
执行:
会出现以下错误,调用没有出现问题,只是调用的变量是一个对象,该对象我只在DrinkWater.class进行声明并未对该对象进行初始化,所以对该对象进行初始化即可。
在这里插入图片描述
在无参构造函数中进行初始化:
在这里插入图片描述
再次执行Test.class测试类会发现还是会出现上面的错误:【前面说了,静态修饰的成员执行的顺序要远远大于对象本身,所以通过静态代码块进行初始化即可】
在这里插入图片描述
通过静态代码块进行初始化:
在这里插入图片描述

再次执行【可以正常执行】:
在这里插入图片描述

三.使用static需要注意的问题

1.静态方法只能访问静态成员(变量、方法)。非静态方法既可以访问静态成员,也可以访问非静态成员。
2.静态方法中不可以使用this或者super关键字。

error:Cannot make a static reference to the non-static method getInfo() from the type DrinkWater
在这里插入图片描述

erreo:Cannot use this in a static context
在这里插入图片描述

error:Cannot use super in a static context
在这里插入图片描述

相关文章
|
10天前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
41 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
5天前
|
Java 程序员
Java 面试高频考点:static 和 final 深度剖析
本文介绍了 Java 中的 `static` 和 `final` 关键字。`static` 修饰的属性和方法属于类而非对象,所有实例共享;`final` 用于变量、方法和类,确保其不可修改或继承。两者结合可用于定义常量。文章通过具体示例详细解析了它们的用法和应用场景。
18 3
|
13天前
|
Java 编译器
在Java中,关于final、static关键字与方法的重写和继承【易错点】
在Java中,关于final、static关键字与方法的重写和继承【易错点】
19 5
|
18天前
|
Java
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
这篇文章详细解释了Java中static和final关键字的用法,包括它们修饰类、方法、变量和代码块时的行为,并通过代码示例展示了它们的具体应用。
68 0
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
|
1月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
1月前
|
存储 Java
Java之静态(static)与实例(instance)
Java之静态(static)与实例(instance)
|
2月前
|
Java
【Java基础面试四十一】、说一说你对static关键字的理解
这篇文章主要介绍了Java中static关键字的概念和使用规则,强调了类成员与实例成员的区别及其作用域的限制。
|
2月前
|
存储 Java 对象存储
【Java基础面试四十三】、 static和final有什么区别?
由于网络原因,我无法获取到您提供的链接内容。如果需要我解析该网页,请确保链接有效并重试,或者提供其他问题,我会尽力帮助您。
|
2月前
|
Java
【Java基础面试四十二】、 static修饰的类能不能被继承?
这篇文章讨论了Java中static关键字修饰的类是否可以被继承,解释了静态内部类的概念、规则以及如何实例化。
|
2月前
|
Java
【Java】static 类方法中注意事项
【Java】static 类方法中注意事项