JAVA 面向对象进阶 01- 03 static

1 static 概述

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

静态和类有关(随着类的加载而加载)    非静态和对象有关

2 static 分类

2.1 静态变量

被 static 修饰的成员变量,叫做静态变量

特点:

  • 被该类所有对象共享,即共享同一个值
  • 不属于对象,属于类
  • 随着类的加载而加载,优先于对象存在

调用方式:

  • 类名调用(推荐)
  • 对象名调用

2.2 静态方法

被 static 修饰的成员方法,叫做静态方法

特点:

  • 多用在测试类和工具类中
  • Javabean 类中很少会用

调用方式:

  • 类名调用(推荐)
  • 对象名调用

2 static 内存图

静态变量是随着类的加载而加载的,优先于对象出现的

静态变量在内存中会共享

3 static 注意事项

  • 静态方法只能访问静态变量和静态方法
  • 非静态方法可以访问静态变量或者静态方法,也可以访问非静态的成员变量和非静态的成员方法
  • 静态方法中是没有 this 关键字

总结:

  • 静态方法中,只能访问静态。
  • 非静态方法可以访问所有。
  • 静态方法中没有 this 关键字

普通的成员方法,是有隐含的 this

3.1 为什么 非静态有 this ,静态没有 this 

3.2 从内存角度

3.3 总结 :

非静态的普通成员变量、成员方法,他们调用,都需要通过对象去调用

而静态由于共享,是没有具体的对象的,那么他就不能调用普通的变量、方法

4 重新认识 main

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

5 工具类

  • Javabean类:        用来描述一类事物的类。比如,Student,Teacher,Dog,Cat等
  • 测试类:                用来检查其他类是否书写正确,带有 main 方法的类,是程序的入口
  • 工具类:                帮助我们做一些事情的,但是不描述任何事物的类

5.1 要求

  • 类名见名知意
  • 私有化构造方法   ---->   因为私有化构造方法,就不能创建此类的对象,而创建工具类的对象也是没有意义的
  • 方法定义为静态

5.2 例子

定义一个对数组进行操作的工具类

public class ArrUtil{
    privateArrUtil(){}

    publicstaticintgetMax(...){..}
    publicstaticintgetMin(..){..}
    publicstaticintgetsum(..){..}
    public:staticintgetAvg(..){...}
}

5.3 练习 定义数组工具类

请按照如下要求编写一个数组的工具类:ArrayUtil

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

数组工具类

package com.bjpowernode.a01staticdemo1;

public class ArrayUtil {

    //私有化构造方法
    public ArrayUtil() {
    }

    //方法需要定义为静态的,方便调用
    public static String printArr(int[] arr){
        //字符串的拼接用 StringBuilder
        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] + ", ");
            }
        }
        return sb.toString();   // StringBuilder 转成 字符串 在返回
    }

    //返回平均值
    public static double getAverage(double[] arr){
        double sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        return sum / arr.length;
    }

}

测试类

package com.bjpowernode.a01staticdemo1;

public class TestDemo {
    public static void main(String[] args) {
        //测试工具类中的两个方法
        int[] arr1 = {1,2,3,4,5};
        String str = ArrayUtil.printArr(arr1);
        System.out.println(str);    //字符串可直接打印

        double[] arr2 = {1.1,2.2,3.3,4.4,5.5};
        double average = ArrayUtil.getAverage(arr2);
        System.out.println(average);
    }
}

参考链接:

面向对象进阶-01-static-静态变量_哔哩哔哩_bilibili

面向对象进阶-02-static-静态方法和工具类_哔哩哔哩_bilibili

面向对象进阶-03-static的注意事项_哔哩哔哩_bilibili

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值