• Java_笔记_static_静态变量方法工具类_main方法


    static表示静态,是Java中的一个修饰符,可以修饰成员方法和成员变量。

    一、静态变量: 被static修饰的成员变量

    1.特点:
    1)被该类所有的对象共享。
    2)不属于对象,属于类。
    3)随着类的加载而加载的,优先于对象出现的。
    JDK8以前,静态区在方法区里;JDK8以后,静态区(静态存储位置)在堆内存中。
    在静态区里存着这个类所有的静态变量。
    在这里插入图片描述

    2.调用方式:
    1)类名调用(推荐)
    2)对象名调用

    二、静态方法:被static修饰的成员方法

    1.特点:
    1)多用在测试类和工具类中

    Javabean类:用来描述一类事物的类。例如Student,Teacher,Dog,Cat等。
    测试类:用来检查其他类是否书写正确,带有main方法的类,是程序的入口。
    工具类:不是用来描述一类事物的,而是帮我们做一些事情的类。类名见名知意;私有化构造方法;方法定义为静态。

    2)Javabean类中很少会用

    2.调用方式:
    1)类名调用(推荐)
    2)对象名调用

    3.练习:
    1)练习1:
    定义数组工具类

    需求:在实际开发中,经常会遇到一些数组使用的工具类。
    请按照如下要求编写一个数组的工具类:ArrayUtil

    提供一个工具类方法printArr,用于返回整数数组的内容。
    返回的字符串格式如:[10, 20, 50, 34, 100](只考虑一维的整数数组)
    提供一个工具方法getAverage,用于返回平均分。(只考虑一维的浮点型数组)
    定义一个测试类Test,调用该工具类的工具方法,并返回结果。

    public class ArrayUtil {
        //私有化构造方法
        //目的:不让外界创建其对象
        private ArrayUtil() {
        }
    
        //为方便调用需要定义静态方法
        public static String printArr(int[] arr) {
            StringBuilder sb = new StringBuilder();
            sb.append("[");
            for (int i = 0; i < arr.length; i++) {
                if (i == arr.length - 1) {
                    sb.append(arr[i]);
                } else {
                    sb.append(arr[i]).append(",");
                }
            }
            sb.append("]");
            return sb.toString();
        }
    
        public static double getAverage(double[] arr) {
            double sum = 0;
            for (int i = 0; i < arr.length; i++) {
                sum = sum + arr[i];
            }
            return sum / arr.length;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    public class Test {
        public static void main(String[] args) {
            //测试工具类中的两个方法是否正确
            int[] arr1 = {1, 2, 3, 4, 5};
            String str = ArrayUtil.printArr(arr1);
            System.out.println(str);//[1,2,3,4,5]
    
            double[] arr2 = {1.5, 6.8, 3.5, 7.2};
            double average = ArrayUtil.getAverage(arr2);
            System.out.println(average);//4.75
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2)练习2:
    定义学生工具类

    需求:定义一个集合,用于存储3个学生对象。
    学生类的属性为:name, age, gender
    定义一个工具类,用于获取集合中最大学生的年龄

    public class Student {
        private String name;
        private int age;
        private String gender;
    
        public Student() {
        }
    
        public Student(String name, int age, String gender) {
            this.name = name;
            this.age = age;
            this.gender = gender;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getGender() {
            return gender;
        }
    
        public void setGender(String gender) {
            this.gender = gender;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    import java.util.ArrayList;
    
    public class StudentUtil {
        private StudentUtil() {
        }
    
        //静态方法
        public static int getMaxAge(ArrayList<Student> list) {
            //1.定义一个参照物
            int max = list.get(0).getAge();
            //2.循环遍历集合
            for (int i = 0; i < list.size(); i++) {
                int tempAge = list.get(i).getAge();
                if (tempAge > max) {
                    max = tempAge;
                }
            }
            return max;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    import java.util.ArrayList;
    
    public class StudentTest {
        public static void main(String[] args) {
            //1.创建一个集合用来存储学生对象
            ArrayList<Student> list = new ArrayList<>();
            //2.创建3个学生对象
            Student s1 = new Student("云苓", 23, "女");
            Student s2 = new Student("黎川", 28, "女");
            Student s3 = new Student("岑溪", 29, "男");
            //3.把学生对象添加到集合中
            list.add(s1);
            list.add(s2);
            list.add(s3);
            //4.调用工具类
            int maxAge = StudentUtil.getMaxAge(list);
            System.out.println(maxAge);//29
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    4.单例设计模式:多线程

    三、static的注意事项

    1.静态方法只能访问静态变量和静态方法。
    2.非静态方法可以访问静态变量或者静态方法,也可以访问非静态的成员变量(实例变量)和非静态的成员方法。
    3.静态方法中没有this关键字(非静态方法的this表示当前方法调用者的地址值,this是由虚拟机赋值的)。
    4.静态和共享有关;非静态和对象有关。

    四、重新认识main方法:

    1.public:被JVM调用,访问权限足够大。
    2.static:被JVM调用,不用创建对象,直接类名访问。因为main方法是静态的,所以测试类中其他方法也需要是静态的。
    3.void:被JVM调用,不需要给JVM返回值。
    4.main:一个通用的名称,虽然不是关键字,但是被JVM识别。
    5.String[] args:以前用于接收键盘录入数据的,现在没用。(Idea Edit Configuration设置参数)

  • 相关阅读:
    系统架构演变历史及集群、分布式、微服务、SOA的概念区别
    uniapp 的video播放如何实现小窗功能
    Android 源码 <package> 了解 [4]
    Arduino + ESP32-C3 + TFT(1.8‘ ST7735S)基础平台(实验七)温湿度动态图表显示的网页服务器
    卷积神经网络-AlexNet
    MP157-2-TF-A移植:
    H5游戏开发H5休闲小游戏定制H5软件定制
    OpenSSL自签名证书
    LeetCode力扣刷题——更加复杂的数据结构
    Sonar: static 修饰符顺序违法了JLS建议
  • 原文地址:https://blog.csdn.net/SisinRyu/article/details/128173542