static 【重点】

1static 概述

static可以修饰方法和成员变量

【没有对象】

2static修饰成员变量【重点】

【static修饰成员变量是一个人共享资源认知】

2.1代码中对static修饰静态成员变量的需求



2.3代码演示static修饰成员变量基本使用

【处理警告方式】

使用类名操做静态成员变量

【数据共享性】

静态成员变量不管通过那一种方式修改操作数据,都会影响所有使用位置

【没有对象】

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

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

2.4总结

总结: 

 1. 静态成员变量推荐使用的方式是通过类名直接调用,不推荐 使用类对象来进行操作,IDE工具中会存在一定的警告提示,与对象 无关!!!【没有对象】 

 2. 静态成员变量不管通过哪一种方式修改,都会影响到所有的 使用者,这是一个【共享资源】 

 3. 静态成员变量在类对象创建之前可以使用,类对象销毁之后 依然可以使用,【生存期完全不同】,所有说静态成员变量和类对象 无关,【没有对象】

2.5内存角度分析【重点】


类对象: 

 占用内存空间是内存的【堆区】

 人 

 私人空间

静态成员变量:    

占用内存空间是内存的【数据区】    

在北京布置的共享单车        

不会占用私人空间,在一个公共区域!!!       

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

 【引用操作】你可以理解成租赁关系!!

2.6 从代码加载过程分析【抽象,重点】

1. 在类对象创建之前,静态成员变量已经可以使用,已经准备 完毕!!! 

 2. 在类对象销毁之后,静态成员变量依旧可以使用,依然存 在!!

代码加载原理性过程: 

 1. .java文件,会通过Java编译器(javac.exe)编译生成对 应的.class字节码文件(二进制文件。文件中包含了所有的.java文 件内容) 

 2. 在程序的加载过程中,.class字节码文件会加载到内存的 【方法区】,同时会按照基本的顺序结构【从上至下,从左至右】完 成.class字节码文件的加载过程 

 3. 在加载过程中,static修饰的内容会在准备就绪,可以执 行,可以使用。 以上操作过程过程中,是否和类对象有关??? 整个类文件加载过程中,是完成不依赖对象的创建,所有 从加载过程中可以分析得 出,类对象和静态成员变量无关。【没有对象】

资源销毁过程:   

 1. Java中存在的类对象,是通过该JVM中的垃圾回收机制销毁 对象,回收内存。    

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

2.7关于static修饰静态成员变量的总结

1. static修饰静态成员变量是一个【共享资源】,但是需要明确当 前代码中的确需要对应的共享资源之后,才可以使用static修饰, 而且static修饰的方式只是共享资源解决案例的一种。 例如: 姓名,年龄,家庭住址...[以上数据不能使用静态]

2. static修饰静态成员变量,推荐使用类名调用,因为【没有对 象】

 3. static修饰的静态成员变量,一处修改,处处受影响,因为【共 享资源】

 4. static修饰的静态成员变量,在类对象创建之前出现,在类对象 销毁之后销毁,生存周期不同,所有【没有对象】

3static修饰静态成员方法总结和问题


总结 

 1. 静态成员方法不推荐使用类对象调用,而是推荐使用类名直 接调用,因为【没有对象】

 2. 静态成员方法中不能够使用类内非静态成员变量 【没有对 象】

 3. 静态成员方法中不能够使用类内非静态成员方法 【没有对 象】 

 4. 静态成员方法中不能够使用this关键字 【没有对象】 

 5. 静态成员方法可以使用类内的其他静态成员变量和静态成员 方法 【难兄难弟】

3.1从静态方法调用方式来解释

静态成员方法,我们推荐是采用类名直接调用的!!!当然可以 使用类对象调用,只不过会存在警告!!!而且这个警告是非常重要 的!!! 

 IDE工具都在提示你 (静态成员方法,静态成员变量)与对象无 关 静态成员方法和对象无关,那也就是说所有和对象有关的内容就 不要使用了!!!

 静态成员方法推荐使用类名调用,那么也就是说调用过程中是没 有对象的,所有需要使用对象来操作的非静态成员变量,非静态成员 方法都是无法直接在静态方法中使用的

3.2从加载时间和销毁时间来解释

发现: 

 1. 在代码中创建对象之前,静态成员方法已经可以通过类名直 接调用,而且是明确可以执行的状态。 

 2. 对象销毁之后,依然可以通过类名直接调用静态成员方法

代码加载过程的分析:    

1. .java文件通过编译之后,生成对应的.class字节码文 件。字节码文件中包含了Java文件的所有内容   

 2. Java程序需要运行的时候,首先会加载对应的资源 (.class字节码文件)到内存的【方法区】    3. 加载.class文件的过程中,static修饰的静态成员方法会 准备就绪!!!所有运行需要的内容,条件全部OK,可以直接通过类 名调用。

整个过程和类对象无关!!!完全是摆脱类对象存在的!!!

销毁过程:    

1. 程序运行结束退出之前,会销毁所有的类对象

2. 所有的类对象销毁之后,对于资源没有任何的需求,资源销 毁,内存释放,这时静态成员方法使用空间,才会被销毁

3.5 静态成员方法的作用

最重要的作用 工具类!!! 

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

 好处: 

 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,没有找 到返回负数 【要求】 当前查询使用的数组必须是升序排序完成的数组、

4代码块

代码就是

 {}包含内容 

 主要有: 方法体代码块,分支结构,循环结

4.1构造代码块


功能: 

 初始化当前类所有的类对象,只要【使用new + 构造方法创建 当前类对象】,就一定会执行构造代码块中的内容

格式:    

在class大括号以内,成员变量之后,构造方法之前    

// 构造代码块  

  {      

  }

4.2静态代码块


功能: 

 类文件加载,静态代码块中的内容一定会执行,有且只执行一 次!!! 类文件的加载是当前代码中的确需要当前类,才会进行加载。

格式:    

在class大括号以内,成员变量之后,构造方法之前   

 // 静态代码块    

static 

{        

}

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。