一、没有静态:若是某个类型的全部对象,都具备一个相同的属性值,那么这个属性值就没有必要在全部对象中,都存储一份。还有坏处:浪费内存空间;维护难度大,一旦须要修改,就得修改全部的对象。java
二、有静态的状态:若是某个类型的全部对象,都具备一个相同的属性值,那么就在这个属性的定义上,加一个static静态关键字。让该变量存储在方法区字节码的静态区中,避免了全部对象都存储相同数据的问题,节省了内存空间,未来维护容易(只须要修改一次)。程序员
一、用static关键字修饰的变量 不会随着对象的变化而变化api
二、加载时机:随着类的加载而加载,加载进方法区的静态区数组
三、静态变量在对象以前就存在,被该类的全部对象所共享jvm
四、可使用 类名.变量名 直接调用,也可以使用对象来调用ide
一、用static关键字修饰的方法工具
二、静态方法不能使用非静态变量测试
缘由:静态方法在一开始就被加载进静态区,能够在没建立对象时使用,而非静态变量只有在对象建立以后this
才能使用,若是静态方法能够访问非静态的变量,就至关于在对象建立以前就访问了对象里面的数据spa
三、静态方法不能访问非静态方法
缘由:非静态方法能够访问非静态变量,若是静态方法能够访问非静态方法,就至关于访问了非静态变量,
与第二点矛盾。
四、静态方法中不能存在this关键字
缘由:静态方法在对象建立以前就存在了,而this指代当前对象,若是使用this指针,就至关于在
对象建立以前访问对象
5.总结 静态不能够访问非静态,非静态能够访问静态。
一、概念上 ,所属不一样
非静态变量属于对象,静态变量属于类
二、内存空间不一样,存储位置不一样
非静态属于对象,因此存储在堆内存中
静态变量属于类,存储在方法区的静态区中
三、生命周期不一样
非静态变量随着对象的建立而存在,消失而消失
静态变量随着类的加载而存在,类的消失而消失
四、访问方式不一样
非静态变量 对象名.变量名;
静态变量 类名.静态对象名; 对象名.静态变量名;
public static void main(String[] args)
关键字public 表示公共状态,权限修饰符,全部状况均可以访问
主方法是全部虚拟机都直接调用的,语言之间相互调用,须要使用最高权限。
static 静态 在不建立对象的状况下也能够访问
主方法是jvm虚拟机直接调用的,测试类中,不须要定义成员变量,也不须要有对象存储数据,
能够直接调用主方法,主方法没有必要声明为非静态;jvm是C语言写的,是一个面向过程的语言,不能建立对象。
void 返回值为空
main 程序的惟一入口
Sring[] args 形式参数 字符串类型的数组
一、工具类:在一个类中,没有维护什么数据,没有任何的成员变量,至关因而一个工具。
类中就都是一些静态方法,快速的解决一些常见的问题。
二、名称:ArrayTool
三、做用:能够提供操做数据的各类方法
四、功能:
数组的遍历
获取数组的最大值
获取数组的最小值
数组元素的交换
数组元素反转
五、方法都是静态的,不须要建立对象;建立对象会浪费系统资源。但愿控制不让建立对象。
方式:使用构造方法私有化
public class Test2 { private Test2(){} /**数组的遍历 @param arr 要遍历的数组 */ public static void printArr(int[] arr) { for(int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } System.out.println(); } /** 数组获取最大值 @param arr 要获取最大值的数组 @return 获取到的最大值 */ public static int getMax(int[] arr) { int max = arr[0]; for(int i = 1; i < arr.length; i++) { if(arr[i] > max) { max = arr[i]; } } return max; } /** 获取数组最小值 @param arr 要获取最小值的数组 @return 获取到的最小值 */ public static int getMin(int[] arr) { int min = arr[0]; for (int i = 1; i < arr.length; i++) { if(arr[i] < min) { min = arr[i]; } } return min; } /** 交换数组中的两个元素 @param arr 要交换元素的数组 @param a 要交换的第一个元素的索引 @param b 要交换的第二个元素的索引 */ public static void swap(int[] arr, int a, int b) { int temp = arr[a]; arr[a] = arr[b]; arr[b] = temp; } /** 数组反转 @param arr 要反转的数组 */ public static void reverse(int[] arr) { for(int i = 0, j = arr.length - 1; i < j; i++, j--) { swap(arr, i, j); } } /** 冒泡排序 * @param arr 要排序的数组 */ public static void paiXu(int[] arr) { for(int i=0;i<arr.length;i++) { for(int j=0;j<arr.length-1-i;j++) { if(arr[i]<arr[j]) { swap(arr, i, j); } } } } }
六、帮助文档的制做
一、工具类准备好以后,编译成.class的字节码文件,外界就没法看懂,因此须要编写工具类的程序员,准备一份工具类的帮助文档。
二、文档注释:用于给代码生成帮助文档的注释
格式:
/**
文档注释
*/
特色:
不能嵌套
三、帮助文档注解:未来能够被文档生成工具解析出来的格式,能够解析出来其中的数据
做者:@author lc
版本:@version v1.0
从哪一个版本该是:@since
参数:@param 参数名称 参数名称的解释
返回值:@return 返回内容的解释
四、生成帮助文档:
使用jdk中的bin目录中的javadoc这个工具,就能够生成帮助文档
Javadoc -d ArrayToolDoc -author -version 源代码文件
五、帮助文档的使用
一、虽然之后不去制做帮助文档,可是对于已经存在的工具类,使用频繁,频繁使用工具类的帮助文档。
二、在线帮助文档:
http://tool.oschina.net/apidocs
三、离线的帮助文档:
1、打开文档
2、点击显示
3、点击索引
4、搜索须要的类型