天天看点

黑马程序员_this和static关键字

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

7、this关键字:

当成员变量和局部变量重名的时候,为了区分这种情况我们可以使用一个关键字来完成,就是this

它代表的是什么呢?This关键字代表的就是一个对象的引用。

代表哪个对象? 代表当前对象,它自己不是对象,只是一个引用。

只要是成员,必须被对象所调用。

总的一句话:定义功能时,如果功能中用到了本类对象,这时就使用this这个关键字表示这个对象。

实现代码:

Eg:

Class Person

{

Private String name;

Private int age;

Person()

{

Name=name;

}

Person(String name,int age)

{

This();//像这样的就是构造函数之间的调用,调用语句必须定义在第一行,这是规则。

This,name=name;//左右两边都是局部变量,并没有把name赋值给成员中的name和age,加this之后指的就是成员变量Name;

This.age=age;

}

Public void speak()

{

Int age=300;

Sop(this.name+this.age);

}

Public void method()

{

This.speak();

}

}

Class personDemo

{

Public static void main(Stirng[] args)

{

Person p1=new person('"lisi",30);

P1.speak();s

}

}

总结:构造函数之间的调用,构造函数中调用其他构造函数的this语句必须定义在构造函数的第一行,因为构造函数是用来初始化的。初始化的动作必须先执行。

黑马程序员_this和static关键字

8、static静态关键字

1、它是一个修饰符,只能修饰成员(成员变量和成员函数)

2、被static修饰的成员变量的数据,可以被所有的对象们共享。

3、被静态修饰的成员多了一种调用方式,就是除了被对象调用以外,还可以被类名直接调用,类名.静态成员。

4、静态之所可以被类名调用,那是因为静态成员是随着类的加载而加载进内存的。非静态的特点随着对象的加载而加载。

5、静态优先于对象加载进内存,所以不能访问对象的内容,但是对象可以访问它的内容。

6、被静态修饰的成员为共有数据,对象里面自身村存储的是特有数据。

Eg:饮水机是共有的,但是喝水的杯子是特有的。

怎么理解共性?只要在描述事物的时候发现这特点是大家都有的。

10、静态的使用注意事项:

1、静态成员函数只能访问类中的静态成员,不能访问非静态的。非静态方法可以访问静态方法。

2、静态方法中不可能定义this spuer关键字,因为This代表的是对象,但是静态加载的时候都没有对象存在。

3、主函数是静态的。

实现代码:

Eg:class MainDemo

   {

int x=4;

public static void main(String[] args)//String[] args=new String[0];

//public : 因为主函数是被JVM调用、权限必须足够大。

//static :

//void :没有返回值。不用返回值给JVM;

//main:比较特殊,jVM只能识别它,

//(String[] args):参数列表,数组类型。arguments

{

sop(args);//[Ljava.lang.String;@c17614 输出的数组实体地址。

//new MainDemo().show();//创建一个对象即可。

}

public static void main()//是可以存在的,重载。

{

}

void show()

{

sop(x);

}

   }

   编译失败:

被修饰后的成员具备以下特点:

class Person

{

String name;

static String country='CN';//每个对象都有国籍,都相同我们可以单独拿出来。

static void show()

//如果被静态修饰。name是不能被访问的。

//函数被静态修饰只能访问被静态修饰的成员,非静态成员不能访问。

//为什么?

{

Sop(country+name);//country之前省略了Person类,Person.country

}

}

class StaticDemo

{

public static void main(String[] args)

{

Person p=new Person();

p.name="zhangsan";

p.show();

Person p=new Person();

p.name="lisi";

p.show();

System.out.println(Person.country);被类名直接调用。

Person.show();

//直接调用show方法,说明自始至终在堆内存中没有name这个成员。

//当show方法进行输出语句的时候访问conutry和name,但是name

//是没有的,访问不到。

}

}

黑马程序员_this和static关键字

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

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