您的位置:首页 > 编程语言 > Java开发

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

2017-02-10 21:41 591 查看

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

}

最后附上JDK使用文档API 下载

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐