1.static 方法中只能引用方法外的static变量和方法
2.this是当前类的引用,也就是说必须先有new 才会有this
3.static简单理解为内存中仅一份
4.final简单理解为这是不变的 常量
5.final static详情参考 http://lavasoft.blog.51cto.com/62575/18771/
对于Cannot make a static reference to the non-static method quicksort(int[], int, int) from the type
QuickSort的理解
package com.cc;
public class QuickSort {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
QuickSort sort=new QuickSort();
int a[]={18,20,5,22,17,9,27};
for(int i=0;i<a.length;i++)
System.out.print(a[i]+" ");
System.out.println();
quicksort(a,0,a.length-1);
for(int i=0;i<a.length;i++)
System.out.print(a[i]+" ");
System.out.println();
}
void quicksort(int a[],int left,int right){
int temp=a[left],p=left;
int i=left,j=right;
while(i<j){
while(a[j]>temp&&i<j)
j--;
a[p]=a[j];
p=j;
i++;
while(a[i]<temp&&i<j)
i++;
a[p]=a[i];
p=i;
j--;
}
a[p]=temp;
System.out.print(left+"->"+right+": ");
for(int o=left;o<=right;o++)
System.out.print(a[o]+" ");
System.out.println();
if(p-left>1)
quicksort(a,left,p-1);
if(right-p>1)
quicksort(a,p+1,right);
}
}
非静态方法依赖对象实例而存在,对于quicksort没创建对象实例压根就不存在。
QuickSort sort=new QuickSort()后,堆中sort实例有对应方法quicksort,static方法中能找到对应方法。
实质就是静态方法不依赖对象实例存在,即使类所属的对象不存在。非静态方法依赖对象实例存在。
另外啰嗦下static引入的原因,static在内存中,确切的说在进程的虚拟空间的静态存储区(也许这是错的)存储一份。
但static的引入绝不是为了省内存,Static引入的原因是不依赖对象实例。至于为什么要这样,哪些地方应用了?还没体会到。
但是main方法是必须申明还静态方法,若为对象方法,则最先执行的是构造函数,这样main()函数作为程序入口点失去其意义。
super,this等关键字是对象的引用,static方法是类方法,所以static方法和super,this生活永远没有交集,也就是说static方法中
不会存在super,this。
浙公网安备 33010602011771号