0
点赞
收藏
分享

微信扫一扫

2022Java学习笔记三十(面向对象加强进阶:Static关键字、static修饰成员方法的基本用法、static实际应用案例、static注意事项)

49路末班车 2022-02-19 阅读 75

2022Java学习笔记三十(面向对象加强进阶:Static关键字、static修饰成员方法的基本用法、static实际应用案例、static注意事项)

一、static关键字的作用

成员变量可以分为2类:
1、静态成员变量(有static修饰,属于类,内存中加载一次):表示如在线人数信息、等需要被共享的信息,可以被共享访问
2、实例成员变量(无static修饰,存在于每个对象中):常表示姓名name、年龄age、等属于每个对象的信息

实例代码:

package com.zcl.d1_static_field;

public class User {
    // 在线人数信息 静态成员变量 属于类,加载一次,可以被共享访问
    public static int onLineNumber;
    // 实例成员变量
    private  String name;
    private int age;

    public static void main(String[] args) {
        // 1、类名.静态成员变量
        User.onLineNumber++;
        // 注意:同一个类中访问静态成员变量,类名可以省略不屑
        System.out.println(onLineNumber); // 1

        // 2、对象.实例成员变量
        // System.out.println(name); 报错
        User u1 = new User();
        u1.name = "张三";
        u1.age = 36;
        System.out.println(u1.name);
        System.out.println(u1.age);

        // 不推荐 对象.静态成员变量
        u1.onLineNumber++;
        System.out.println(onLineNumber); // 2
    }

}

二、static修饰成员方法的基本用法
成员方法的分类:
1、静态成员方法(有static修饰,属于类),建议用类名访问,也可以用对象访问
2、实例成员方法(无static修饰,属于对象),只能用对象触发访问

package com.zcl.d2_static_method;

public class Student {
    private String name;
    private int age;

    /*
    实例方法:无static修饰,属于对象的,通常表示对象自己的行为,可以访问对象的成员变量
     */
    public void study(){
        System.out.println(name+"好好学习,天天向上");
    }

    /*
    静态成员方法:有static修饰,属于类,可以被类和对象共享访问
     */
    public static void getMax(int a,int b){
        System.out.println(a>b?a:b);
    }

    public static void main(String[] args) {

        // 1、静态方法
        Student.getMax(10,20);
        // 注意:同一个类中访问静态方法,可以不写类名
        getMax(20,90);

        // 2、对象.实例方法
        // study() 报错
        Student s = new Student();
        s.name = "张三";
        s.study();

        // 3、对象.静态方法(不推荐)
        s.getMax(20,40);
    }
}

三、static实际应用案例

工具类:
1、对于一些应用中多次需要用到的功能,可以将这些功能封装成静态方法,放在一个类中,这个类就是工具类
2、工具类的作用:一是方便调用,二是提高了代码复用性
工具类的原理和延申:
1、一次编写,处处可用
2、建议将工具类的构造器私有化,不让工具类产生对象,浪费内存
生成验证码工具类

package com.zcl.d3_Test;

import java.util.Random;

public class ToolClass {
    /*
    私有构造器(为了不被创建对象,直接通过类名访问)
     */
    private ToolClass(){

    }

    // 验证码工具类 静态方法
    public static String createCode(int n) {
        // 验证码
        // 1、使用String开发验证码
        String chars = "abcdefghijklmnopquvwyzABCDEFGHIJKLMNOPQUVWXYZ0123456789";
        // 定义变量存储5为随机字符为验证码
        String code = "";
        Random r = new Random();
        for (int i = 0; i < n; i++) {
            int index = r.nextInt(chars.length());
            // 对应的所以提取字符
            code += chars.charAt(index);
        }
        return code;
    }
}

调用工具类

package com.zcl.d3_Test;

import java.util.Random;

public class Login {
    public static void main(String[] args) {
        // 调用验证码根据类(静态)
        System.out.println("随机五位验证码:"+ToolClass.createCode(5));
    }
}

定义数组工具类
在这里插入图片描述
定义工具类

package com.zcl.d3_Test;

public class ArrayUtils {
    /**
     * 工具类,把它的构造器私有化,不让其创建对象
     */
    private ArrayUtils() {

    }

    /*
    定义静态方法,工具方法【返回一组一维数组】
     */
    public static String toString(int[] arr) {
        if(arr != null){
            String result = "[";
            // 遍历数组
            for (int i = 0; i < arr.length; i++) {
                // 数组最后一个元素不需要 ,
                result += (i == arr.length - 1 ? arr[i] : arr[i] + ",");
            }
            result += "]";
            return result;
        }else {
            return null;
        }
    }

    /*
    定义返回平均分静态方法
     */
    public static double getAverage(int[] arr) {
        if (arr != null) {
            // 总和 最大值 最小值
            int max = arr[0];
            int min = arr[0];
            int sum = 0;
            // 遍历数组
            for (int i = 0; i < arr.length; i++) {
                //最大值
                if (arr[i] > max) {
                    max = arr[i];
                }
                //最小值
                if (arr[i] < min) {
                    min = arr[i];
                }
                // 总和
                sum += arr[i];
            }
            // 返回平均数
            return (sum - max - min) * 1.0 / (arr.length - 2);
        }else {
            return 0.0;
        }
    }
}

测试工具类

package com.zcl.d3_Test;

public class Test {
    public static void main(String[] args) {
        // 调用数组工具类
        int[] arr = {10,20,30,40};
        System.out.println("原数组:"+arr);
        System.out.println("输出一维数组:"+ArrayUtils.toString(arr));
        System.out.println("输出平均分:"+ArrayUtils.getAverage(arr));
    }
}

四、static注意事项
1、静态方法只能访问静态的成员,不可以直接访问实例成员(先创建对象)
2、实例方法可以访问静态的成员,也可以访问实例成员
3、静态方法中是不可以出现this关键字的,【没有对象】

举报

相关推荐

0 条评论