博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

java this static final

Posted on 2011-12-13 11:36  酸梅拯救地球  阅读(294)  评论(0)    收藏  举报

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。