Java笔记整理——静态变量、静态方法、主要方法
静态变量简介
静态变量也称为类变量或静态属性。它是类的所有对象共享的变量。当类的任何对象访问它时,它将获得相同的值。同样,类的任何对象都会修改它。,相同的变量被修改。
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); //报错
}
}