一、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]);
}
}
}