欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > static、 静态导入、成员变量的初始化

static、 静态导入、成员变量的初始化

2024/10/23 18:51:04 来源:https://blog.csdn.net/hanxuewei666/article/details/143185740  浏览:    关键词:static、 静态导入、成员变量的初始化

static

static 常用来修饰类的成员:成员变量、方法、嵌套类

成员变量

  • static修饰:类变量、成员变量、静态字段
    • 在程序中只占用一段固定的内存(存储在方法区),所有对象共享
    • 可以通过实例、类访问 (一般用类名访问和修改,不建议用实例修改),但是不能通过类名访问实例变量和实例方法
  • 没有被static修饰:实例变量
    • 每个实例都有一份内存
package com.hxw.demo4;public class Person {public static  int count = 0;public int age;
}
package com.hxw.demo4;
public class Main {public static void main(String[] args) {Person.count = 20;Person p1 = new Person();p1.age = 20;System.out.println(p1.count);Person p2 = new Person();p2.age = 30;System.out.println(p2.count);}
}

控制台输出

20
20

方法

  • static修饰:类方法、静态方法
    • 可以通过实例、类访问
    • 内部不可以使用this
    • 可以直接访问类变量、类方法
    • 不可以直接访问实例变量和实例方法
  • 没有被static修饰:实例方法
    • 只能通过实例访问,不可以通过类访问
    • 内部可以使用this
    • 可以直接访问实例变量和实例方法
package com.hxw.demo4;public class Person {public static int count = 0;public int age;// 实例方法public void run1(){// 实例方法中可以使用this调用其他实例方法this.run2();//实例方法可以直接访问类变量和类方法System.out.println(count);test1();System.out.println(this.age);}public void run2(){System.out.println("void run2");}public static void test1(){System.out.println("static void test1");test2();System.out.println(count);}public static void test2(){System.out.println("static void test2");}
}
package com.hxw.demo4;public class Main {public static void main(String[] args) {Person person = new Person();person.age = 18;person.run1();Person.test1();}
}

总结:
在这里插入图片描述

静态导入

使用了静态导入之后,就可以省略类名来访问静态成员(成员变量、方法、嵌套类)

在这里插入图片描述

静态导入的经典应用

为了避免每一次都是用Math.PI,可以考虑使用静态导入,其他的Math方法也是一样的道理。
在这里插入图片描述

成员变量的初始化

  • 编译器会自动为未初始化的成员变量设置初始值
  • 如何手动给实例变量提供初始值
    • 在声明中:定义变量的时候直接给其设置初始值
    • 在构造方法中:在构造方法内部利用this进行初始化
    • 在初始化中 :这个情况看下面代码,了解一下,
package com.hxw.dmeo6;public class Person {public static int count;public int age = 1; //申明中public Person(){age = 20;// 在构造方法中,但是先执行初始化中的代码}//在初始化中{age = 18;}
}

一般很少使用初始化代码,方法如下 公共初始化代码一般放到参数最多的构造方法中

package com.hxw.dmeo6;public class Person {public static int count;public int age = 1; //申明中public Person(){this(0, 0);}public Person(int age){this(age, 0);}public Person(int age, int no){// 公共初始化代码一般放到参数最多的构造方法中}//    //在初始化中
//    {
//        age = 18;
//    }
}
  • 如何手动给类变量提供初始值
    • 在声明中
    • 在静态初始化代码块中:当一个类初始化的时候(也就是一个类第一次被主动使用时,JVM会对类进行初始化),就会执行静态初始化代码块,且只会执行一次。
      • 可以有多个静态初始化块,按照在源码中出现的顺序被执行

在这里插入图片描述

初始化块和静态初始化块

这里实际的执行顺序和自己想的不一样,要先初始化完父类,再初始化子类
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com