知识就是力量

当前位置:首页 > 技巧


Java笔记整理——静态变量、静态方法、主要方法

2022-10-10

静态变量简介

静态变量也称为类变量或静态属性。它是类的所有对象共享的变量。当类的任何对象访问它时,它将获得相同的值。同样,类的任何对象都会修改它。,相同的变量被修改。

public static int a;

类变量内存布局

根据版本的不同,静态变量的存储位置可能在堆中,也可能在静态域中。以下是两个相关的博客:

Java静态变量存储在哪里?_万青小猪-CSDN博客_java静态变量存放在哪里

java中的静态变量和Class对象存放在哪个区域?- 几乎知道

无论静态变量在哪里,都有几个共识—— 1. 静态变量由同一类的所有对象共享。2.静态类变量是在类加载时生成的(所以可以用类名调用java 静态方法的加载,即使不创建对象实例也可以访问)。

如何定义静态变量

语法:访问修饰符静态数据类型静态变量名;(推荐,访问修饰符和static也可以互换)

如何访问静态变量

类名.静态变量名(推荐)或对象名.静态变量名

请注意,静态变量的访问修饰符与普通属性具有相同的访问权限和范围。

预防措施

1、什么时候需要使用静态变量:当我们需要一个类的所有对象共享一个变量时,可以考虑使用静态变量:比如定义一个学生班级,统计所有学生付了多少钱。

2、静态变量和实例变量(普通属性)的区别:静态变量是类的所有对象共享的,而实例变量是每个对象独占共享的。

3.加上static称为类变量或静态变量。否则称为实例变量/普通变量/非静态变量。

4.实例变量不能通过类名访问。静态变量名。

5.静态变量在类加载时初始化,即即使没有创建对象,只要类加载完毕,就可以使用静态变量。

6、静态变量的生命周期从类的加载开始,随着类的死亡而销毁。

静态方法的基本介绍

静态方法也称为类方法,具有以下形式:

访问修饰符 static 数据返回类型 方法名(){ }  //推荐
static 访问修饰符 数据返回类型 方法名(){ }

用法:类名。静态方法名或对象名。静态方法名称。

使用场景

当方法不涉及任何与对象相关的成员时(即不需要声明对象),可以将方法设计为静态方法以提高开发效率,例如Math类和Arrays类的方法。

在实际开发中,一些通用的方法往往被设计成静态方法,这样就可以不用创建对象就可以使用,比如冒泡排序、打印一维数组等。

预防措施

1.静态方法和普通方法都随着类的加载而加载,结构信息存放在方法区。类方法中没有this参数,普通方法中隐含了this参数。

2.静态方法可以通过类名调用,也可以通过对象名调用(遵循继承规则,只要能被继承,就可以通过父类名或者子类名调用) . 普通方法只能通过对象名调用。

3. 静态方法中不允许使用this、super等对象相关的关键字。

4、静态方法只能访问静态成员(没有this,只能访问静态变量和静态方法)。非静态方法可以访问静态和非静态成员。

public class Person {
    private int id;
    private static int total = 0;
    public static void setTotalPerson(int total){
        this.id = total;   //错误,不能使用this
        this.total = total; //错误,不能使用this
        Person.total = total; //正确,如果不重名的话可以不加类名
    }
}

5.不能用普通方法给静态变量赋值。

public class Person {
    public static int id = this.show();  //报错
    public int show(){
        System.out.println("调用show");
        return 10;
    }
}

主要方法说明表

公共静态 void main(String[] args){}

1.public:因为main方法是Java虚拟机调用的,所以访问修饰符需要使用public。

2.静态:Java虚拟机在执行main方法时不必创建对象java 静态方法的加载,所以方法必须是静态的。

3. String[] args:main方法接收一个String类型的数组参数,里面存储了执行Java命令时传递给运行类的参数。

public class args{
	public static void main(String[] args) {
		System.out.println("传入的第一个参数是"+args[0]);
		System.out.println("传入的第二个参数是"+args[1]);
		System.out.println("传入的第三个参数是"+args[2]);
	}
}

在 IDEA 中传入参数:

特别说明

1、在main方法中,我们可以直接调用main方法所在类的静态方法或者静态属性。

2、但是类中的非静态成员不能直接访问,必须先创建类的实例对象,然后才能通过该对象访问类中的非静态成员。

public class Test {
    public static double PI = 3.14;
    public int ss = 10;
    public static void test100(){
        System.out.println("调用静态方法");
    }
    public static void main(String[] args) {
        test100();  
        System.out.println(PI);
        System.out.println(ss);  //报错
    } 
}