Java深入讲解static操作符
作者:白朝槿kk 发布时间:2023-11-27 00:59:16
前言
这篇文章主要是从类中static修饰的成员变量,static修饰的成员方法这两个方面来讲解static,static成员变量的初始化会在代码块中讲解
static修饰成员变量
在Java中,被static修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对象,是所有对象所共享的。
举个例子:
class Animal{
String name;
int age;
static String type = "Dog";
//构造方法
public Animal(String name,int age){
this.name = name;
this.age = age;
}
public void SetAnimal(){
System.out.println(this.name+" "+this.age+" "+type);
}
}
public class Test {
public static void main(String[] args) {
Animal animal1 = new Animal("小白",1);
Animal animal2 = new Animal("大黄",2);
animal1.SetAnimal();
animal2.SetAnimal();
}
}
运行结果如下图所以:
我定义了一个动物类,成员变量有名字和年龄,还有一个被static修饰的变量type(种类),以及一个构造方法。我在主函数中创建了两个对象,对象的种类都是狗。并用构造方法为我创建的两个变量进行赋值。而种类type是我实现在定义定义变量的时候就进行初始化的,这种初始化变量叫做就地初始化。
注意: s t a t i c 修 饰 的 成 员 变 量 不 是 一 定 要 就 地 初 始 化 \color{#FF0000}{static修饰的成员变量不是一定要就地初始化} static修饰的成员变量不是一定要就地初始化
在我们用完static修饰完type之后,type就是静态成员变量,静态成员变量也叫类变量。没被static修饰的成员变量叫做普通成员变量。静态成员变量有个特点就是 不 属 于 对 象 \color{#FF0000}{不属于对象} 不属于对象。
什么是不属于对象?
也就是说static修饰过的变量,是不依赖对象的。举个例子:
class Animal{
String name;
int age;
static String type = "Dog";
//构造方法
public Animal(String name,int age){
this.name = name;
this.age = age;
}
public void SetAnimal(){
System.out.println(this.name+" "+this.age+" "+type);
}
}
public class Test {
public static void main(String[] args) {
Animal animal1 = new Animal("小白",1);
Animal animal2 = new Animal("大黄",2);
System.out.println(animal1.type);
System.out.println(Animal.type);
}
}
仍然是上面的代码,我们都知道 对象名.成员变量可以访问成员变量,而访问static修饰的成员变量不需要创建对象,可以直接通过 类名.静态成员变量进行访问。运行结果结果如图所示:
两个打印的结果都是Dog,所以static修饰的变量不属于对象,因为不需要创建对象也可以访问。如果大家是想访问static修饰的变量,建议大家就直接用类名.静态成员变量就可以了,不建议使用对象.变量名进行访问。
静态成员变量的特性
不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
类变量存储在方法区当中
生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)
可以不初始化,如果就地初始化了如果没被final修饰也是可以通过方法进行修改的
static修饰的成员方法
static修饰的成员方法和成员变量一样 ,不属于对象。static修饰的成员方法也叫类方法。也就是说,如果我想调用static修饰的成员方法直接用 类名.成员方法 就可以了。举个例子:
class Animal{
String name;
int age;
static String type = "Dog";
public static void staticFunc(){
System.out.println("static修饰的成员方法");
}
}
public class Test {
public static void main(String[] args) {
Animal animal1 = new Animal("小白",1);
Animal animal2 = new Animal("大黄",2);
Animal.staticFunc();
}
}
我们平时写的方法一般都是static修饰的,为什么要用static修饰我相信你的心里应该也有答案了。
因为static修饰的方法不属于对象,不需要创建对象就可以直接使用。你也可以把static修饰的成员方法看成我们平时写的方法,只不过这是个在不同的类里面定义的一个成员方法罢了。
static修饰的成员方法是不依赖于对象的方法,所以在static修饰的方法中,不能直接访问普通的成员变量,因为普通的成员方法是需要依赖对象的。如果不创建对象,直接在static中修饰的成员方法中访问普通成员变量是不可以的。如果想要在static中修饰的成员方法中访问成员变量,有两种方法,第一种是直接在static修饰的成员方法中创建一个对象,这样就可以访问了。第二种是把创建好的对象作为static修饰成员方法的形参,这样也可以直接访问。
静态方法特性
不属于某个具体的对象,是类方法
可以通过对象调用,也可以通过类名.静态方法名(…)方式调用,更推荐使用后者
不能在静态方法中访问任何非静态成员变量
来源:https://blog.csdn.net/m0_63463510/article/details/125698697


猜你喜欢
- 要判断输入金额为正确金额的方法有两个,一个是用正则表达式,另一个就是用textfield的代理方法有时候难免遇到这样的需求,不符合规则的金额
- 如何检查一个数组(无序)是否包含一个特定的值?这是一个在Java中经常用到的并且非常有用的操作。同时,这个问题在Stack Overflow
- 一、扫雷扫雷小游戏主要是利用字符数组、循环语句和函数实现。设计思路:雷盘大小为9*9,但是为了后续能更好的统计出雷的个数在定义数组的时候定义
- 在nginx.conf文件的http模块新增以下内容gzip &nbs
- 之前一篇文章研究完横向二级菜单,发现其中使用了SparseArray去替换HashMap的使用.于是乎自己查了一些相关资料,自己同时对性能进
- 效果图如下所示:一、shape 样式:(在drawable新建--》new--》Drawable resource file 在父级标签se
- 之前进行Web开发的时候使用的是myeclipse,但只用过的人都知道,由于其插件太多,而且有很多插件的功能根本就接触不到。所以导致一旦工程
- 1、类的修饰符分为:可访问控制符和非访问控制符两种。 可访问控制符是:公共类修饰符 public非访问控制符有:抽象类修饰符 abstrac
- 根据约定,在使用java编程的时候应尽可能的使用现有的类库,当然你也可以自己编写一个排序的方法,或者框架,但是有几个人能写得比JDK里的还要
- 引言: 在现代的网络应用程序中,进行HTTP请求是一项常见的任务。Apache HttpClient是一个功能强大且广泛使用的Java库,它
- 1、注意事项众所周知,对一个文件进行读写操作时,我们需要创建对应的输入流和输出流但需要注意的是,读写操作不能同时进行(边读边写),即不能同时
- Java中List.of()和Arrays.asList()的区别及原因动手写一下,让自己更有印象1.Arrays.asList()可以插入
- 前言使用Redis来实现Session共享,其实网上已经有很多例子了,这是确保在集群部署中最典型的redis使用场景。在SpringBoot
- AsyncTask,顾名思义,异步任务。说到异步,最简单的理解就是不同步。再复杂一点理解,就得举例子了。假设我要去火车站买票,刚到火车站我突
- 接收JSON浏览器传来的参数,可以是 key/value 形式的,也可以是一个 JSON 字符串。在 Jsp/Servlet 中,我们接收
- C#调用C++ dll string类型返回为了这个问题,百度了一堆不靠谱的资料,什么C#调用c++类型对应啥的,说用string ,Str
- 本文实例讲述了Java实现字符串解析为日期时间的方法。分享给大家供大家参考,具体如下:Java版本:1.8开始import java.tim
- 定义:当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。特
- 导航和路由Flutter提供了一个完整的用于在屏幕之间导航和处理深层链接的系统。没有复杂深度链接的小型应用程序可以使用Navigator,而
- 相信不少喜欢开发的朋友都已经知道微信小程序是个什么物种了,楼主也是从小程序内测期间就开始关注,并且也写过几个已经上线的微信小程序。但是基本上