static关键字概述:
static关键字可以修饰方法、可以修饰成员变量!!!【没有对象】
代码中对于static修饰静态成员变量的需求图例
static关键字,每天进步一点点,加油!!!
代码演示static修饰成员变量基本使用
【数据共享性】
静态成员变量不管通过哪一种方式修改操作数据,都会影响到所有使用的位置
【没有对象】

  1. 在对象未创建的情况下,静态成员变量可以通过类名直接调用
  2. 在对象被销毁的情况下,静态成员变量依然可以通过类名直接调用

总结
2. 静态成员变量推荐使用的方式是通过类名直接调用,不推荐使类对象来进行操作,IDE工具中会存在一定的警告提示,与对象无关!!!【没有对象】
2. 静态成员变量不管通过哪一种方式修改,都会影响到所有的使用者,这是一个【共享资源】
3. 静态成员变量在类对象创建之前可以使用,类对象销毁之后依然可以使用,【生存期完全不同】,所有说静态成员变量和类对象无关,【没有对象】

内存角度分析
类对象:
占用内存空间是内存的【堆区】 私人空间
静态成员变量:
占用内存空间是内存的【数据区】 一个公共区域!!!
类对象和静态成员变量占用的内存空间不属于同一个区域。如果没有引用指向操作,是不存在任何关系。

从代码加载过程分析
分析:

  1. 在类对象创建之前,静态成员变量已经可以使用,已经准备完毕!!!
  2. 在类对象销毁之后,静态成员变量依旧可以使用,依然存在!!!

代码加载原理性过程:
3. .java文件,会通过Java编译器(javac.exe)编译生成对
应的.class字节码文件(二进制文件。文件中包含了所有的.java文
件内容)
4. 在程序的加载过程中,.class字节码文件会加载到内存的
【方法区】,同时会按照基本的顺序结构【从上至下,从左至右】完
成.class字节码文件的加载过程
5. 在加载过程中,static修饰的内容会在准备就绪,可以执
行,可以使用。
整个类文件加载过程中,是完成不依赖对象的创建,所有从加载过程中可以分析得出,类对象和静态成员变量无关。【没有对象】

资源销毁过程:
6. Java中存在的类对象,是通过该JVM中的垃圾回收机制销毁
对象,回收内存。
7. 静态成员变量是在整个程序退出之后,当前代码中不存在任何一块内存被类对象占用。JVM才会释放.class文件占用的【方法区】空间,与之同时,销毁静态成员变量占用的【数据区】空间
以上操作可以得出,静态成员变量生存周期是远远大于类对象的。早于类对象出现,晚于类对象销毁。类对象和静态成员变量没有关系。【没有对象】

static修饰静态成员变量总结
8. static修饰静态成员变量是一个【共享资源】,但是需要明确当
前代码中的确需要对应的共享资源之后,才可以使用static修饰,而且static修饰的方式只是共享资源解决案例的一种。
例如:
姓名,年龄,家庭住址…[以上数据不能使用静态]
9. static修饰静态成员变量,推荐使用类名调用,因为【没有对象】
10. static修饰的静态成员变量,一处修改,处处受影响,因为【共享资源】
11. static修饰的静态成员变量,在类对象创建之前出现,在类对象销毁之后销毁,生存周期不同,所有【没有对象】

static修饰静态成员方法总结和问题
12. 静态成员方法不推荐使用类对象调用,而是推荐使用类名直接调用,因为【没有对象】
13. 静态成员方法中不能够使用类内非静态成员变量 【没有对象】
14. 静态成员方法中不能够使用类内非静态成员方法 【没有对象】
15. 静态成员方法中不能够使用this关键字 【没有对象】
16. 静态成员方法可以使用类内的其他静态成员变量和静态成员方法 【难兄难弟】

静态成员方法的作用
最重要的作用
工具类!!!
静态成员方法是完全不依赖成员变量,也不能使用非静态成员方法和非静态成员变量。所有使用的数据,都是外来数据。
静态成员方法可以摆脱类对象约束,通过类名直接调用。
好处:

  1. 节约内存。简化逻辑
    不需要创建对象,不需要申请对象空间,也不需要销
    毁对象空间。
  2. 复用度更高!!!
    摆脱对象的限制,更加自由。

Arrays工具类

String toString(任意类型数组);

返回整个数组的字符串描述方式

int[] arr = {1, 3, 5, 7, 9};==> [1, 3, 5, 7, 9]
数组内容使用[]包含,然后元素直接使用 ,+空格 隔开字符串展示

sort(int[] arr);

排序算法,int类型

快速排序!!!Quick Sort 性能特别好,占用空间特别大

int binarySearch(int[] arr, int find);

二分法查找,找到对应的元素,返回值大于等于0,没有找到返回负数
【要求】
当前查询使用的数组必须是升序排序完成的数组

代码块
代码就是
{}包含内容
主要有:方法体代码块,分支结构,循环结构

构造代码块
功能:
初始化当前类所有的类对象,只要【使用new + 构造方法创建当前类对象】,就一定会执行构造代码块中的内容
格式:
在class大括号以内,成员变量之后,构造方法之前
// 构造代码块
{
}

静态代码块
功能:
类文件加载,静态代码块中的内容一定会执行,有且只执行一
次!!!
类文件的加载是当前代码中的确需要当前类,才会进行加载。
格式:
在class大括号以内,成员变量之后,构造方法之前
// 静态代码块
static {
}
用途:
一般会使用类文件加载操作过程,完成一定的自动化操作。
程序的配置,数据的加载,驱动的使用,资源的处理…

非静态成员变量,非静态成员方法,this关键字都无法在静态
代码块中使用。

相关文章: