Java static关键字(重新认识main方法)

static 是静态的意思,可以修饰成员变量,也可以修饰成员方法

一、static修饰成员的特点
  1. 被其修饰的成员, 被该类的所有对象所共享
  2. 多了一种调用方式, 可以通过类名调用(推荐使用)
  3. 随着类的加载而加载, 优先于对象存在
//Student.java
public class Student {
    String name;
    int age;
    static String school;//使用static修饰
}
//Main.java
public class Main {
    public static void main(String[] args) {
        Student.school="xxxx大学";//通过类名调用,随着类的加载而加载, 优先于对象存在
        test1();//李四-----0----xxxx大学
        test2();//张三-----18----xx大学
        test1();//李四-----0----xx大学
    }
    private static void test1() {
        Student student=new Student();
        student.name="李四";
        System.out.println(student.name+"-----"+student.age+"----"+student.school);
    }
    private static void test2() {
        Student student=new Student();
        student.name="张三";
        student.age=18;
        student.school="xx大学";
        System.out.println(student.name+"-----"+student.age+"----"+student.school);
    }
}

test1()和test2()中,两个学生对象共享同一份school值
static修饰的成员变量,在内存中只有一份

在这里插入图片描述

二、static什么时候使用
  • static 成员变量
    • 共享数据(比如说一个网站的在线人数)
  • static 成员方法
    • 常用于制作工具类

工具类:不是描述事物的,而是帮我们完成一些事情
如果发现一个类所有方法,全是用static修饰
----私有该类的构造方法,目的:不让其他类再创建对象

例如:我们之前学的System类
在这里插入图片描述

案列:数组操作类
编写一个类 ArrayTools 内部编写三个方法

  1. 从数组中找最大值
  2. 从数组中找最小值
  3. 打印出数组中所有的元素, 要求格式为 [11, 22, 33]
public class ArrayTools {
    //私有该类的构造方法
    private ArrayTools(){
        
    }
    //从数组中找最大值
    public  static  int getMax(int[] arr){
        int max=arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (arr[i]>max){
                max=arr[i];
            }
        }
        return max;
    }
    //从数组中找最小值
    public  static  int getMin(int[] arr){
        int min=arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (arr[i]<min){
                min=arr[i];
            }
        }
        return min;
    }
    //打印出数组中所有的元素,  要求格式为 [11, 22, 33]
    public  static  void  printArray(int[] arr){
        System.out.print("[");
        for (int i = 0; i < arr.length-1; i++) {
            System.out.print(arr[i]+",");
        }
        System.out.print(arr[arr.length-1]+"]");
    }
}
public class Test {
    public static void main(String[] args) {
        int[] arr={11,22,33};
        //直接使用类调用
        System.out.println(ArrayTools.getMax(arr));//33
        System.out.println(ArrayTools.getMin(arr));//11
        ArrayTools.printArray(arr);//[11,22,33]
    }
}
三、static注意事项
  1. static 方法中, 只能访问静态成员 (直接访问)
public class StaticDemo1 {
    static int num1=10;//静态成员变量
    int num2=20;//非静态成员变量
    //静态成员方法
    public static void method1(){
        System.out.println("static----method");
    }
    //非静态成员方法
    public void method2(){
        System.out.println("method");
    }

    public static void main(String[] args) {
        //可以直接访问
        System.out.println(num1);//10
        method1();//static----method

        //创建对象后才能访问非静态成员
        StaticDemo1 sd=new StaticDemo1();
        System.out.println(sd.num2);//20
        sd.method2();//method
    }
}

因为static修饰的成员随着类的加载而加载, 优先于对象存在,所以在对象还没创建之前便可以直接访问,但是非静态成员则不行。

  1. static 中不允许使用 this 关键字,因为this表示的是当前对象
四、重新认识main方法

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋千水竹马道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值