一:类变量基本介绍

1:什么是类变量

类变量也叫静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量。
多发

2:如何定义类变量

定义语法:

  1. //访问修饰符 static 数据结构 变量名;[推荐]
  2. //static 访问修饰符 数据类型 变量名
  3. private static int age; [推荐这种写法]
  4. statoc private int age;

3:如何访问类变量

  1. //类名.类变量名
  2. //或者对象名.类变量名【静态变量的访问修饰符的访问权限和范围和普通属性是一样的。】
  3. //推荐使用:类名.类变量名;
  4. public static void main(String[] args) {
  5. Person p1 = new Person();
  6. //两种方式都可以调用,推荐用类名.类变量名
  7. System.out.println(Person.num);
  8. System.out.println(p1.num);
  9. }
  10. class Person{
  11. public static int num;
  12. }

二:类变量注意事项和细节

  • **_什么时候需要用类变量?

    • 当我们需要让某个类的所有对象都共享一个变量时,就可以考虑使用类变量(静态变量):比如:定义学生类,统计所有学生共交多少钱。Student (name, staticfee)
  • 类变量与实例变量(普通属性)区别?

    • 类变量是该类的所有对象共享的,而实例变量是每个对象独享的
  • 加上static称为类变量或静态变量,否则称为实例变量/普通变量/非静态变量

  • 类变量可以通过类名.类变量名或者对象名.类变量名来访问,但java设计者推荐我们使用类名.类变量名方式访问。【前提是满足访问修饰符的访问权限和范围】

  • 实例变量不能诵讨类名.类变量名方式访问

  • 类变量是在类加载时就初始化了,也就是说,即使你没有创建对象,只要类加载了,就可以使用类变量了。 ```java public class test { public static void main(String[] args) {

    1. //此时即便没有创建对象,类已经加载了,类变量也就可以使用了
    2. System.out.println(person.age);

    } } class person{

    static int age= 1; }

  1. - **_类变量的生命周期是随类的加载开始,随着类消亡而销毁。_**
  2. <a name="A9Y1h"></a>
  3. ### 三:类方法基本介绍
  4. <a name="UaoLi"></a>
  5. #### 1:类方法基本介绍
  6. **_类方法也就静态方法_**
  7. ```java
  8. //访问修饰符 static 数据返回类型 方法名(){ }【推荐】
  9. //static 访问修饰符 数据返回类型 方法名(){ }
  10. public static void Speak(){
  11. System.out.println("说");
  12. }

2:类方法的调用

  1. public class test {
  2. public static void main(String[] args) {
  3. person.Speak();
  4. }
  5. }
  6. class person{
  7. public static void Speak(){
  8. System.out.println("说");
  9. }
  10. }

3:应用案例

  1. //模拟交学费,总学费开始为0;
  2. public class test {
  3. public static void main(String[] args) {
  4. Student sakura = new Student("sakura", 300);
  5. Student sa = new Student("sakura1", 400);
  6. System.out.println(Student.Fee);
  7. }
  8. }
  9. class Student{
  10. public static int Fee = 0;
  11. private String name;
  12. public Student(String name ,int fee) {
  13. this.name = name;
  14. Student.Fee+= fee;
  15. }
  1. //开发自己的工具类时,可以将方法做成静态的,方便调用
  2. class MyTools { //求出两个数的和
  3. public static double calSum(double n1, double n2) {
  4. return n1 + n2;
  5. } //可以写出很多这样的工具方法...
  6. }

4:类方法经典的使用场景

  • 当方法中不涉及到任何和对象相关的成员,则可以将方法设计成静态方法,提高开发效率。
    • 比如:工具类中的方法utils
    • Math类、Arrays类、Collections集合类看下源码:

  • 四:类方法注意事项和细节

  • 类方法和普通方法都是随着类的加载而加载,将结构信息存储在方法区∶

    • 类方法中无this的参数
    • 普通方法中隐含着this的参数
  • 类方法可以通过类名调用,也可以通过对象名调用

    • 普通方法和对象有关,需要通过对象名调用,
    • 比如对象名.方法名(参数),不能通过类名调用
  • 类方法中不允许使用和对象有关的关键字,比如this和super。**普通方法(成员方法)可以**

  • 类方法(静态方法)中只能访问静态变量或静态方法。

  • 普通成员方法,既可以访问非静态成员,也可以访问静态成员。

    1. class Student{
    2. public static int Fee = 0;
    3. String name;
    4. public static void speak(){
    5. System.out.println(Student.Fee);
    6. System.out.println(name);//无法访问
    7. }
    8. }

    :::danger 静态方法;只能访问静态属性;
    非静态方法;可以访问所有成员; :::

    五:练习

    1:

    image.png