关于static关键字的理解

1.为什么会有static关键字的出现?
static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途

因为这样可以方便开发人员在没有创建对象的情况进行调用

2. static的基本概念是什么?

它是Java中的关键字,可以修饰类、方法、变量、代码块

3.它的作用是什么?

  • 当做全局变量来使用,只能在本源文件
  • 独立于其他任何对象,在一般情况下,类成员必须通过对象实例来进行调用,如果加了static关键字,那么就不要通过创建对象来使用了,可以通过类.静态变量名来使用

4.修饰变量

​ 被static关键词修饰的变量,叫做类的静态成员变量,为什么叫做类的静态成员变量呢?因为类的静态成员变量不是属于对象的,是属于这个类的,实例变量就是没有被static修饰的变量之后实例化(new对象)的。

5.修饰方法

叫做静态方法,也是通过类名.方法名进行调用
6.注意事项

静态方法中不能调用非静态方法,因为非静态方法要在类实例化才能调用,但是非静态方法中可以调用静态方法,因为静态方法先与对象存在,类实例化对象之后,才能调用非静态方法。

静态成员变量虽然独立于对象,但是不代表不可以通过对象去访问,所有的类的静态成员方法和类的静态成员变量都可以通过对象访问(只要访问权限足够)。 

7.通过jvm加载来理解static关键字
`public class Person_static{

static string name;
public int id;

public static void printname(){
System.out.println(name);
}
public void show_id_name(){
System.out.println(id+name);
}
public static void main(String[] args){
Person_static ps = new Person_static();
ps.name = "wu";
ps.id = 1;
ps.show_id_name(); // 1wu

   Person_static ps2 = new Person_static();
   ps2.id = 2;
   ps2.name = "the second wu";
   ps2.show_id_name(); // 2the second wu

   ps2.name = "the third wu";
   ps2.show_id_name(); // 2the third wu

   ps..show_id_name(); //1the third wu

我们根据类的实例,变量的赋值,从内存的角度出发。

image

栈会把局部变量压栈,堆存放的是new出来的结构,随着对象的生成而存在,随着对象的消灭而消失,例如成员变量。方法区存放的是静态变量,关于类的静态资源,随着类的加载会存在,类的消失而消失。例如java.util.math中的pi的值,还有一些数学方法

静态资源是类初始化的时候加载的,所以静态资源是先于非静态资源的存在,类的初始化比类的实例化要快,例如Class.forName方法就是初始化一个类,但是并没有实例化,

posted @ 2021-05-15 16:19  wly2zZ  阅读(143)  评论(0)    收藏  举报