JAVA--- 关键字static

之前我们学习了JAVA 面向对象的一些基本知识,今天来进阶一下!!!

static关键字

static表示静态,是JAVA中的一个修饰符,可以修饰成员方法,成员变量,可用于修饰类的成员(变量、方法、代码块)和嵌套类。

静态变量

静态变量属于类,并非类的某个实例。

无论创建多少个类的对象,静态变量只有一份存储在内存中。

静态变量可通过类名直接访问,也能通过对象实例访问。

class Student {
    static int totalStudents; // 静态变量,记录学生总数
    //被所有 Student 对象共享。每创建一个 Student 对象,totalStudents 的值就会加 1。
    String name;

    public Student(String name) {
        this.name = name;
        totalStudents++; // 每创建一个学生对象,总数加 1
    }
}

public class StaticVariableExample {
    public static void main(String[] args) {
        Student s1 = new Student("Alice");  //new关键字,堆内存
        Student s2 = new Student("Bob");

        System.out.println("Total students: " + Student.totalStudents); // 通过类名访问静态变量
        System.out.println("Total students (via s1): " + s1.totalStudents); // 通过对象实例访问静态变量
    }
}

静态方法

静态方法属于类,而非类的某个实例;

可以通过类名直接调用静态方法,无需创建类的对象;

静态方法只能访问静态成员(静态变量和静态方法),不能访问实例成员(实例变量和实例方法),因为静态方法在类加载时就已存在,此时可能还没有创建对象。

class MathUtils {
    static int add(int a, int b) { // 静态方法
        return a + b;
    }
}

public class StaticMethodExample {
    public static void main(String[] args) {
        int result = MathUtils.add(3, 5); // 通过类名调用静态方法
        System.out.println("3 + 5 = " + result);
    }
}

拓展:工具类

工具类是帮我们做一些事情的,但是不描述任何事物的类!

JavaBean类

用来描述一类事物的类

e.g. Student,Teacher,Dog,Cat 等

测试类用来检查其他类是否书写正确,带有main方法的类,使程序的入口
工具类帮我们做一些事情的,但是不描述任何事物的类
 工具类书写规则:

1.类名见名知意

2.私有化构造方法                      

public class ArrUtil{

       private ArrUtil(){}
}

3.方法定义为静态     

   

静态代码块

静态代码块在类加载时执行,且仅执行一次。它通常用于对静态变量进行初始化操作。

class MyClass {
    static int value;

    static {
        // 静态代码块
        value = 10;   //对value静态变量进行初始化
        System.out.println("Static block executed.");
    }
}

public class StaticBlockExample {
    public static void main(String[] args) {
        System.out.println("Value: " + MyClass.value);
    }
}

静态嵌套类

静态嵌套类是定义在另一个类内部的静态类。它可以直接访问外部类的静态成员,但不能直接访问外部类的实例成员。

class OuterClass {
    static int outerStaticVar = 10;
    int outerInstanceVar = 20;

    static class StaticNestedClass {
        void display() {
            System.out.println("Outer static variable: " + outerStaticVar);
            // 不能访问 outerInstanceVar,因为它是实例变量
            // System.out.println("Outer instance variable: " + outerInstanceVar); 
        }
    }
}

public class StaticNestedClassExample {
    public static void main(String[] args) {
        OuterClass.StaticNestedClass nested = new OuterClass.StaticNestedClass();
        nested.display();
    }
}

StaticNestedClass 是静态嵌套类,可直接访问外部类的静态变量 outerStaticVar

static的注意事项

1.静态方法只能访问静态变量和静态方法;

2.非静态方法可以访问静态变量或者静态方法,也可以访问非静态成员的成员变量和非静态的成员方法;

3.静态方法中是没有this关键字的。

        

重新认识main方法

public class HelloWorld{
       public static void main(String[] args){
                 System.out.println("HelloWorld");
       }
}
public被JVM调用,访问权限足够大
static

被JVM调用,不用创建对象,直接类名访问

因为main方法是静态的,所以测试类中的其他方法也需要是静态的

void被JVM调用,不需要给JVM返回值
main一个通用的名称,虽然不是关键字,但是被JVM识别

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值