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();
   }
}

运行结果如下图所以:

Java深入讲解static操作符

我定义了一个动物类,成员变量有名字和年龄,还有一个被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修饰的成员变量不需要创建对象,可以直接通过 类名.静态成员变量进行访问。运行结果结果如图所示:

Java深入讲解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();
   }
}

Java深入讲解static操作符

我们平时写的方法一般都是static修饰的,为什么要用static修饰我相信你的心里应该也有答案了。

因为static修饰的方法不属于对象,不需要创建对象就可以直接使用。你也可以把static修饰的成员方法看成我们平时写的方法,只不过这是个在不同的类里面定义的一个成员方法罢了。

static修饰的成员方法是不依赖于对象的方法,所以在static修饰的方法中,不能直接访问普通的成员变量,因为普通的成员方法是需要依赖对象的。如果不创建对象,直接在static中修饰的成员方法中访问普通成员变量是不可以的。如果想要在static中修饰的成员方法中访问成员变量,有两种方法,第一种是直接在static修饰的成员方法中创建一个对象,这样就可以访问了。第二种是把创建好的对象作为static修饰成员方法的形参,这样也可以直接访问。

静态方法特性

  • 不属于某个具体的对象,是类方法

  • 可以通过对象调用,也可以通过类名.静态方法名(…)方式调用,更推荐使用后者

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

来源:https://blog.csdn.net/m0_63463510/article/details/125698697

标签:Java,static,操作符
0
投稿

猜你喜欢

  • C#中Params的用法

    2023-06-03 22:23:27
  • c#调用api控制windows关机示例(可以重启/注销)

    2021-12-20 14:52:06
  • C#/VB.NET 在PDF中添加文件包(Portfolio)的方法

    2023-08-28 03:01:18
  • Java中的对称加密详解

    2023-09-30 12:17:16
  • C#中关于double.ToString()的用法

    2021-12-06 13:12:22
  • mybatis根据表逆向自动化生成代码的实现

    2023-03-12 15:39:02
  • Android事件分发机制(上) ViewGroup的事件分发

    2022-05-28 12:40:05
  • Android Vibrator调节震动代码实例

    2022-07-06 04:56:46
  • JSON 与对象、集合之间的转换的示例

    2021-12-04 20:08:58
  • SpringBoot配置外部静态资源映射问题

    2021-07-22 00:27:50
  • mybatis plus新增(insert)数据获取主键id的问题

    2023-08-09 10:50:52
  • Android图片处理实例分析

    2022-09-10 20:34:50
  • Android USB转串口通信开发实例详解

    2022-01-05 15:28:17
  • Android中使用AspectJ详解

    2022-01-29 19:12:05
  • springboot +rabbitmq+redis实现秒杀示例

    2022-04-21 02:29:28
  • Andriod 资源文件之存取操作

    2021-11-22 09:26:52
  • mybatis-plus的批量新增/批量更新以及问题

    2022-10-28 04:44:16
  • C#利用反射来判断对象是否包含某个属性的实现方法

    2023-02-26 06:57:52
  • java时区转换的理解及示例详解

    2022-01-19 08:35:20
  • Android实现分享功能

    2023-12-08 10:10:48
  • asp之家 软件编程 m.aspxhome.com