黑马程序员——static和final关键字

                                                                    ---------------------- android培训、java培训、期待与您交流! ---------------------- 



一丶Static关键字

1、static是一个修饰符,用于修饰成员(成员变量,成员函数);


2、成员被static修饰后,可以被对象调用,也可以直接被类名调用:类名.静态成员


3、栈内存,方法区(共享区),堆内存


4、特点:
         ①随着类的加载而加载,随着类的消失而消失,说明它的生命周期最长


         ②优先于对象存在。


         ③被所有对象共享
         static String country="CN";//静态成员变量(类变量),随着类的加载存在于方法区
                   String name;//成员变量(实例变量),随着对象的建立存在于堆内存中,随着对象的消失而消失


5、静态方法只能访问静态成员;非静态方法既可以访问静态成员也可以访问非静态成员

            静态方法中不可以出现this,super关键字,以为静态优先于对象存在


6、什么时候使用静态。因为静态修饰的内容有成员变量和成员函数,所以从这两个方面考虑:
               ①什么时候定义静态变量(类变量):
                          当对象中出现共享数据时,该数据被静态所修饰,对象中的特有数据要定义成非静态存在于堆内存中。
               ②什么时候定义静态函数:
                          当功能内部没有访问到非静态数据(对象的特有数据,那么该功能可以定义成静态的


7、静态的应用示例代码:

/*
		每一个应用程序中都有共性的功能,可以将这些功能进行抽取,独立封装,以便复用
		*/
		class Dmeo
		{
			public static void main(String[] args)
			{
				int[] arr={3,4,1,8};
				
				/*
				int max=0;
				for(int x=1;x<arr.length;x++)
				{
					if(arr[x]>arr[max])
						max=x;
				}
				*/
				int max=getMax[arr];
				System.out.println("max="+max);
			}
			
			public static int getMax(int[] arr)
			{
				int max=0;
				for(int x=1;x<arr.length;x++)
				{
					if(arr[x]>arr[max])
						max=x;
				}
				return arr[max];
			}
		}
	  
	  
		class Test
		{
			public static int getMax(int[] arr)
			{
				int max=0;
				for(int x=1;x<arr.length;x++)
				{
					if(arr[x]>arr[max])
						max=x;
				}
				return arr[max];
			}
		}
		
		//数组工具类
		/*
		我们发现ArrayTool对象并未封装特有的数据,操作数组的每一个方法都没有用到ArrayTool对象中的特有数据
		所以可以讲ArrayTool中方法都定义成static的,直接通过类名调用即可
		为了更为严谨,可以强制该类不能创建对象,则将构造函数私有化即可
		*/
		class ArrayTool
		{
			//获取最大值
			private ArrayTool(){};//私有化默认的构造函数
			public static int getMax(int[] arr)
			{
				int max=0;
				for(int x=1;x<arr.length;x++)
				{
					if(arr[x]>arr[max])
						max=x;
				}
				return arr[max];
			}
			//获取最小值
			public static int getMin(int[] arr)
			{
				int min=0;
				for(int x=1;x<arr.length;x++)
				{
					if(arr[x]<arr[min])
						min=x;
				}
				return arr[min];
			}
			//排序
			public static void selectSort(int[] arr)
			{
				for(int x=0;x<arr.length-1;x++)
				{
					for(int y=x+1;y<arr.length;y++)
					{
						if(arr[x]>arr[y])
						{
							swap(arr,x,y);
						}
					}
				}
			}
			//冒泡排序
			public static void bubleSort(int[] arr)
			{
				for(int x=0;x<arr.length-1;x++)
				{
					for(int y=0;y<arr.length-x-1;y++)
					{
						if(arr[y]>arr[y+1])
						{
							swap(arr,y,y+1);
						}
					}
				}
			}
			//交换位置,此功能没有必要提供,所以可以私有化
			private static void swap(int[] arr,int a,int b)
			{
				int temp=arr[a];
				arr[a]=arr[b];
				arr[b]=temp;
			}
			//打印
			public static void printArray(int[] arr)
			{
				System.out.print("[");
				for(int x=0;x<arr.length;x++)
				{
					if(x!=arr.length-1)
						system.out.print(arr[x]+",");
					else
						System.out.print(arr[x]+"]");
				}
			}
		}
		
		//测试功能
		class ArrayToolDmeo
		{
			public static void main(String[] args)
			{
				int[] arr={3,1,87,32,8};
				ArrayToll tool=new ArrayToll();
				int max=tool.getMax(arr);
				System.out.println("max="+max);
			}
		}

9、静态代码块:


/*
	随着类的加载而执行,只执行一次,优先于主函数执行
	*/
	static
	{
		System.out.println("a");
	}  

二、final关键字

1、修饰符,可以修饰类,函数,变量。


2、被final修饰的类不可以被继承。可以避免被子类继承复写功能。


3、被final修饰的方法不可以被复写。


4、被final修饰的变量是一个常量只能赋值一次,既可以修饰成员变量,也可以修饰局部变量。
       当在描述事物时,一些数据的出现值是固定的,那么这时为了增强阅读性,都给这些值起个名字。而这些值不需要改变,所以          加上final修饰。
       常量:常量的书写规范所有字母都大写,如果由多个单词组成,单词间通过"_"连接。


5、内部类定义在类中的局部位置上时,只能访问该局部被final修饰的局部变量。


三、帮助文档的制作示例代码

/**
		这是一个可以对数组进行操作的工具类,该类中提供了:获取最值,排序等功能。
		@author 张三
		@version V1.1
		*/
		class ArrayTool
		{
			
			private ArrayTool(){};//私有化默认的构造函数
			/**
			获取一个整型数组中的最大值。
			@param arr 接收一个int类型的数组。
			@return 返回该数组中的最大值。
			*/
			public static int getMax(int[] arr)
			{
				int max=0;
				for(int x=1;x<arr.length;x++)
				{
					if(arr[x]>arr[max])
						max=x;
				}
				return arr[max];
			}
			/**
			获取一个整型数组中的最小值。
			@param arr 接收一个int类型的数组。
			@return 返回该数组中的最小值。
			*/
			public static int getMin(int[] arr)
			{
				int min=0;
				for(int x=1;x<arr.length;x++)
				{
					if(arr[x]<arr[min])
						min=x;
				}
				return arr[min];
			}
			/**
			给int数组进行选择排序。
			@param arr 接收一个int类型的数组。
			*/
			public static void selectSort(int[] arr)
			{
				for(int x=0;x<arr.length-1;x++)
				{
					for(int y=x+1;y<arr.length;y++)
					{
						if(arr[x]>arr[y])
						{
							swap(arr,x,y);
						}
					}
				}
			}
			/**
			给int数组进行冒泡排序。
			@param arr 接收一个int类型的数组。
			*/
			public static void bubleSort(int[] arr)
			{
				for(int x=0;x<arr.length-1;x++)
				{
					for(int y=0;y<arr.length-x-1;y++)
					{
						if(arr[y]>arr[y+1])
						{
							swap(arr,y,y+1);
						}
					}
				}
			}
			//交换位置,此功能没有必要提供,所以可以私有化
			/**
			给数组中元素进行位置的置换。
			@param arr 接收一个int类型的数组。
			@param a 要置换的位置。
			@param b 要置换的位置。
			*/
			private static void swap(int[] arr,int a,int b)
			{
				int temp=arr[a];
				arr[a]=arr[b];
				arr[b]=temp;
			}
			/**
			用于打印数组中元素,打印形式是:[element1,element2......]
			*/
			public static void printArray(int[] arr)
			{
				System.out.print("[");
				for(int x=0;x<arr.length;x++)
				{
					if(x!=arr.length-1)
						System.out.print(arr[x]+",");
					else
						System.out.print(arr[x]+"]");
				}
			}
		}


                                                      --------------------- android培训、java培训、期待与您交流! ---------------------- 


                                                                                    详细请查看:http://edu.csdn.net/heima


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值