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;
    }
}

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
    }
}

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;
    }
}

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;
    }
}

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
    }
}

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设置参数)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值