java学习基础面向对象之this和static关键字 五-4

一、this关健字

1.      有什么用?

三个代表,在类中代表对象引用成员变量

在函数中代表对象调用函数

在构造函数中代表构造函数的引用

2.      怎么用?

this只能用在方法中,代表对象的引用,因为成员变量里加载于对象创建之前.

this.成员变量名:在方法中代表对象引用成员变量

this,方法名():在函数中代表对象调用函数

格式this(变量):用于构造函数间的相互调用,而且只能放在构造函数的第一行。

然后先初始化其this调用的构造函数,再初始化本身的构造函数。

因为所有构造函数名是一样的,都是重载函数,

所以,通过变量来标记构造函数,用this去引用

3.      什么时候用?

当需要引用时?

4.      有什么特点?

this只能应用在本类中.可以修饰类的成员也可以修饰类的成员.

但凡本类功能内部使用到了本类对象,用this表示。

看到this就是有代表对象,代表哪个对象就看其所在功能被哪个对象调用。

这样就知道谁在参与运算。

二、静态(static关键字)

1.    什么是静态?

类的成员用static修饰后,就叫静态.

2.    静态有什么用?

静态可以让类的成员随类的加载而加载,先于对象存在,可以真接用类名访问,不用先创建象.

静态成员只在随类加载一次,并给所有对象共享,这样可以节省内存空间,不用在每个对象中生成.

3.    静态怎么用?

静态可以修饰类的成员里的成员变量,成员方法,和构造代码块.

静态使用格式为:在成员前面加static 就可以.

修饰后类的成员调用格式,类名.类属性    类名.类方法

4.    静态什么时候用?

有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个静态成员,它能够被它自己使用,而不必引用特定的实例。

或者一个类的成员变量,你不需要为各个对象所独有,而是由所有对象共享,任意对其改变将影响所有的对象,即当对象中出现共享数据时,使用静态修饰。

当功能内部没有访问到非静态数据时,(即对象的特有数据)那么可以使用静态修饰。

 

5.    静态有什么特点?

静态只能修饰类的成员变量和方法,而不能修饰局部变量

静态成员可以直接通过 类名.类属性     类名.类方法

被static修饰后,类属性与类方法加载到方法区的静态区内,普通实例属性是在对象中存在,也就是说它在堆内.

static修饰后的成员属于类的,当类被创建时创建,当类销毁时销毁。它的生命周期比实例变量的生命周期长.

static修饰的属性也是有默认值的。Static属性它被类的对象所共享,实例属性是每一个对象自己的。

(在使用static方法时,要注意只能使用static成员。在实例方法中可以使用任意成员

static中不可以使用this,super关键字,为什么不能使用this关键字,因为static成员是在对象创建前就被加载的,这时还没有对象产生,所以不能用this。this 指代对象的。

 
静态的利于弊”
利:对对象的共享数据进行单独空间的存储,节省空间,没有必要每一个对象中都存储一份
    可以被类名调用
弊:生命周期过长
    访问出现局限性(静态只能访问静态)
执行优先级

静态代码块初始化----默认初始化------显示初始化------构造代码块初始化----构造函数初始化
例子工具类:
class ArrayTool {
	
	//私有化构造函数
	private  ArrayTool(){		
	}
	
	//定义一个功能获取数组中的最大值
	public static int  getmax(int[] arr){
		
		int max=0;
		for(int x=0; x<arr.length;x++){
			if(arr[max]<arr[x]){
				max=x;
			}
		}
			return max;
		}
	//查询某个值在数组中是否存在
	public static int  select(int[] arr,int key){
					
			for(int x=0; x<arr.length;x++){
				if(arr[x]==key){
					
					return x;
				}
			}
				return -1;
		}
	//选择排序
	public static void  xuanze(int[] arr){
		
		
		for(int x=0; x<arr.length-1;x++){
			 
			for(int y=x;y<arr.length;y++)
			{
				if(arr[x]>arr[y]){
					int temp=arr[y];
					arr[y]=arr[x];
					arr[x]=temp;
						}
			}
		}
	}
	//冒泡排序
	public static void  maopo(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]){
					int temp=arr[y+1];
					arr[y+1]=arr[y];
					arr[y]=temp;					
				}				
			}
		}
	}
	//数组打印
	public static void pring(int[] arr)
	{
		  for(int x=0;x<arr.length;x++)
		  {
		         if(x!=arr.length-1)
		          System.out.print( arr[x]+",");
		         else
		           System.out.println( arr[x]);
		  }
	}
	
}

 

 
发布了210 篇原创文章 · 获赞 1042 · 访问量 56万+

猜你喜欢

转载自blog.csdn.net/onceing/article/details/54971431