Java中的静态变量、静态方法和Static关键字如何使用和区别?

2026-04-12 02:391阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1305个文字,预计阅读时间需要6分钟。

Java中的静态变量、静态方法和Static关键字如何使用和区别?

(目录)一、为什么需要静态变量?答:因为成员变量会随着对象的创建而存在,每个对象在内存中都有相应的成员变量。这样,每次创建对象都会创建对应的成员变量,会造成资源浪费。

Java中的静态变量、静态方法和Static关键字如何使用和区别?

(目录)


一、为什么需要静态变量?

答:因为成员变量会随着对象的创建而在堆一直存在,每个对象在内存中都有一份成员变量 这样子会造成每创建一个对象,就会创建对应的成员变量,浪费空间 * 对于共用的,多个对象共享的成员变量,使用static修饰称为静态变量,在内存中产生一份数据,不会浪费 * 静态变量:被所有对象共用,在内存中只会产生一份数据


二、static关键字

1.静态变量的定义格式

格式: 权限修饰符 static 数据类型 变量名; 范例: public static String country;


2.静态变量的调用格式

格式1: 使用类名访问(推荐) 范例: Student.school="清华"; 格式2: 使用对象名访问(不推荐) 范例: Student stu1=new Student(); stu1.school="北大";

3.静态变量和普通变量(非静态变量)的区别

区别: 1.定义不同 类变量(静态变量)定义时候前面要加上static 实例变量(非静态变量)不需要加 2.初始化不同 类变量(静态变量)随着类的加载而初始化 实例变量(非静态变量) 是new对象后才进行初始化 3.内存位置不同 类变量(静态变量)随着类的加载而存在于“方法区”中 实例变量(非静态变量)存储在“堆内存区” 4.调用方式不同 类变量(静态变量)通过类名调用 实例变量(非静态变量)通过对象调用 5.生命周期不同 类变量(静态变量)随着类的加载而加载,虚拟机停止运行类时,静态变量周期结束(类变量生命周期最长,随着类的消失而消失) 实例变量(非静态变量)随着对象的产生而产生,随着对象的消失而失去引用,等待垃圾回收(随着对象的消失而消失)

tips

可以将static理解为同步修改,你变我也变,改变的都是同一份数据


4.静态变量小结


三、静态方法

1.什么是静态方法?

使用static修饰的方法,叫做静态方法


2.静态方法的格式

格式: 权限修饰符 static 返回值类型 方法名(参数){ 方法体; return 数据; } 范例: public static int add(int a,int b){ int c=a+b; return c; }


3.静态方法的调用格式

格式1: 类名.静态方法名(); (推荐) //在本类中调用静态方法,可以省略类名 范例: Student.method(); 格式2: 对象名.静态方法名(); (不推荐) 范例: Student stu=new Student(); stu.method();


4.静态方法和普通成员方法的区别

区别: 格式区别: 静态方法需要static关键字修饰,必须有返回类型,可以没有返回值 (只能访问静态变量,静态方法) //静态访问静态 成员方法可以任意起名,必须有返回类型,可以没有返回值 (可以访问任意变量,任意方法) 调用区别: 静态方法在本类中可以直接方法名调用,其他类中用类名.方法名调用 //show(); Student.show(); 成员方法需要通过 对象名.方法名()才可以调用,可以调用多次 // stu.show();


5.案例

public class Student { public static void method(){ System.out.println("学习"); } public void eat(){ System.out.println("吃饭"); } int age; static String name; public static void method2(){ System.out.println(name); //静态方法只能访问静态变量,从内存图来理解,静态变量是随着类的加载而加载,先存在,而成员变量是new对象后才产生的,所以访问不到 System.out.println(age); //报错 System.out.println(this); //报错,因为this代表的是当前调用类的对象,而静态方法属于类范围的东西,静态优于对象存在,不能调用 System.out.println(super); //super代表对父类对象的引用,指向父类对象;而静态方法比对象先出现 } //成员方法访问任意变量,任意方法 public void method3(){ eat(); method(); System.out.println(age); System.out.println(name); System.out.println(this); } }


执行效果


tips

this和super是属于对象范畴的东西,而静态和静态方法是属于类范畴的东西,比对象先出现,因为是随着类的加载而初始化 静态只能访问静态的东西


作者:KJ.JK

本文共计1305个文字,预计阅读时间需要6分钟。

Java中的静态变量、静态方法和Static关键字如何使用和区别?

(目录)一、为什么需要静态变量?答:因为成员变量会随着对象的创建而存在,每个对象在内存中都有相应的成员变量。这样,每次创建对象都会创建对应的成员变量,会造成资源浪费。

Java中的静态变量、静态方法和Static关键字如何使用和区别?

(目录)


一、为什么需要静态变量?

答:因为成员变量会随着对象的创建而在堆一直存在,每个对象在内存中都有一份成员变量 这样子会造成每创建一个对象,就会创建对应的成员变量,浪费空间 * 对于共用的,多个对象共享的成员变量,使用static修饰称为静态变量,在内存中产生一份数据,不会浪费 * 静态变量:被所有对象共用,在内存中只会产生一份数据


二、static关键字

1.静态变量的定义格式

格式: 权限修饰符 static 数据类型 变量名; 范例: public static String country;


2.静态变量的调用格式

格式1: 使用类名访问(推荐) 范例: Student.school="清华"; 格式2: 使用对象名访问(不推荐) 范例: Student stu1=new Student(); stu1.school="北大";

3.静态变量和普通变量(非静态变量)的区别

区别: 1.定义不同 类变量(静态变量)定义时候前面要加上static 实例变量(非静态变量)不需要加 2.初始化不同 类变量(静态变量)随着类的加载而初始化 实例变量(非静态变量) 是new对象后才进行初始化 3.内存位置不同 类变量(静态变量)随着类的加载而存在于“方法区”中 实例变量(非静态变量)存储在“堆内存区” 4.调用方式不同 类变量(静态变量)通过类名调用 实例变量(非静态变量)通过对象调用 5.生命周期不同 类变量(静态变量)随着类的加载而加载,虚拟机停止运行类时,静态变量周期结束(类变量生命周期最长,随着类的消失而消失) 实例变量(非静态变量)随着对象的产生而产生,随着对象的消失而失去引用,等待垃圾回收(随着对象的消失而消失)

tips

可以将static理解为同步修改,你变我也变,改变的都是同一份数据


4.静态变量小结


三、静态方法

1.什么是静态方法?

使用static修饰的方法,叫做静态方法


2.静态方法的格式

格式: 权限修饰符 static 返回值类型 方法名(参数){ 方法体; return 数据; } 范例: public static int add(int a,int b){ int c=a+b; return c; }


3.静态方法的调用格式

格式1: 类名.静态方法名(); (推荐) //在本类中调用静态方法,可以省略类名 范例: Student.method(); 格式2: 对象名.静态方法名(); (不推荐) 范例: Student stu=new Student(); stu.method();


4.静态方法和普通成员方法的区别

区别: 格式区别: 静态方法需要static关键字修饰,必须有返回类型,可以没有返回值 (只能访问静态变量,静态方法) //静态访问静态 成员方法可以任意起名,必须有返回类型,可以没有返回值 (可以访问任意变量,任意方法) 调用区别: 静态方法在本类中可以直接方法名调用,其他类中用类名.方法名调用 //show(); Student.show(); 成员方法需要通过 对象名.方法名()才可以调用,可以调用多次 // stu.show();


5.案例

public class Student { public static void method(){ System.out.println("学习"); } public void eat(){ System.out.println("吃饭"); } int age; static String name; public static void method2(){ System.out.println(name); //静态方法只能访问静态变量,从内存图来理解,静态变量是随着类的加载而加载,先存在,而成员变量是new对象后才产生的,所以访问不到 System.out.println(age); //报错 System.out.println(this); //报错,因为this代表的是当前调用类的对象,而静态方法属于类范围的东西,静态优于对象存在,不能调用 System.out.println(super); //super代表对父类对象的引用,指向父类对象;而静态方法比对象先出现 } //成员方法访问任意变量,任意方法 public void method3(){ eat(); method(); System.out.println(age); System.out.println(name); System.out.println(this); } }


执行效果


tips

this和super是属于对象范畴的东西,而静态和静态方法是属于类范畴的东西,比对象先出现,因为是随着类的加载而初始化 静态只能访问静态的东西


作者:KJ.JK