【Java】this与static关键字
2013-08-25 17:58
260 查看
this关键字
this关键字调用成员变量和成员方法
Java中,this关键字代表对本类对象的引用,可以用“this.成员变量”和“this.成员函数”的方式调用成员变量和成员函数public class MainClass { String propertyStr = "Use this"; public static void main(String[] args) { MainClass mainInstant = new MainClass(); mainInstant.say(); } private void say() { this.print(this.propertyStr);//等价于print(propertyStr); } private void print(String str) { System.out.println(str); } }
一般这种情况下,this关键字可以省略。但是当局部变量或方法参数覆盖成员变量,即与成员变量同名的时候,成员变量前必须添加this关键字予以区分。
public class MainClass { String propertyStr = "Use this"; public static void main(String[] args) { MainClass mainInstant = new MainClass(); mainInstant.say(); } private void say() { this.print("this关键字不能省略"); } private void print(String propertyStr) { this.propertyStr = propertyStr;//this不能省略 System.out.println(this.propertyStr); } }
this关键字返回本类的一个对象
public class MainClass { String propertyStr = "this返回对象"; public static void main(String[] args) { MainClass mainInstant = new MainClass(); MainClass instant = mainInstant.getInstant(); instant.say(); } public MainClass getInstant() { return this;//返回MainClass的对象 } private void say() { this.print(propertyStr); } private void print(String propertyStr) { System.out.println(this.propertyStr); } }
this关键字调用有参构造函数
public class MainClass { String propertyStr; public static void main(String[] args) { MainClass mainInstant = new MainClass(); MainClass instant = mainInstant.getInstant(); instant.say(); } public MainClass() { this("调用有参构造函数MainClass(String str)"); } public MainClass(String str) { propertyStr = str; } public MainClass getInstant() { return this; } private void say() { this.print(propertyStr); } private void print(String propertyStr) { System.out.println(this.propertyStr); } }
此时,this关键字只能在无参构造函数的第一句使用。
static关键字
静态变量、常量、方法
被声明为static的变量、常量和方法称为静态成员,属于类所有,静态的成员属性为类的不同对象共享。一般用“类名.静态成员”的形式访问。“对象.静态成员”也可以访问,但是为了区分静态成员与非静态成员,请使用第一种形式。
public class MainClass { private static String propertyStr = "调用静态属性"; public static void main(String[] args) { MainClass mainInstant = new MainClass(); MainClass.print(MainClass.propertyStr);//OK MainClass.print("类调用静态方法");//OK MainClass.print(mainInstant.propertyStr);//warning mainInstant.print("对象调用静态方法");//warning } private static void print(String propertyStr) { System.out.println(propertyStr); } }在elipse中用对象访问静态成员会得到警告
静态方法中不能使用this
之所以上述代码在main函数中,用new的对象来调用类的成员,而不是直接用this,是因为Java规定,static方法中不能使用this关键字。静态方法中不能直接调用非静态方法
如果方法声明为static,那么方法体里面不能直接调用非static方法,这个时候便需要new一个对象,然后通过对象调用非static方法方法体中局部变量不能声明为static
Java中规定,在方法内部不能声明static的局部变量(Object-C中局部变量可以声明为static)private void print() { static String str = "Hello";//Error only final is permitted System.out.println(str); }
static定义类的初始化动作
public class HelloWorld { static { //do something } }
这个时候static定义了一个静态区域,每次这段代码被执行时,首先执行static块中的动作,且只会执行一次。对需要类先执行一些初始化操作的情况下,可以使用。
相关文章推荐
- 黑马程序员——Java之this和static关键字解析
- java 关键字this-static
- Java中的this、super、static和final关键字
- 智渔课堂官方免费教程十:Java基础之关键字static和this
- java this,static,package等关键字与相关练习
- java this、static关键字
- java中的this、super、static关键字
- JAVA之旅(五)——this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块
- Java基础语法之this关键字与static关键字
- Java程序设计6——static、final、this、super关键字介绍
- 解密main函数 和this,static关键字,以及用java命令传参
- Java基础之构造方法、this、static关键字
- JAVA之旅(五)——this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块
- Java基础之六:关键字this、super、static
- JAVA初学之this ,static , super 与final关键字
- 【Java基础】java中常用关键字理解this、static、final、volatile理解
- Java关键字:static、this、super
- Java中this,static,super及final关键字和代码块
- Java关键字final、static、this、super使用总结
- java -private,this,static关键字 和构造方法,final关键字