/** * 关于java语言当中的this关键字:(其内存图见下图) * 1、this是一个关键字,翻译为:“这个” * 2、this是一个引用,它是一个变量,this变量中保存的内存地址指向了自身,this存储在JVM堆内存java对象的内部 * 3、每个java对象中都有this这个变量,创建多少个对象,就有多少个this。 * 4、this出现在“实例方法”当中,this指向当前正在执行这个动作的对象。(this代表当前对象) * 5、多数情况下this是可以省略的。 * 6、this不能在带有static的方法中直接使用,在静态方法中不能直接访问实例变量和实例方法,因为访问实例变量和实例方法都需要对象的存在 * 7、this什么时候不能省略:用来区分实例变量和局部变量的时候“this”不能省略(比如:有参构造方法和setter方法中this不能省略) * 8、this可以使用在构造方法当中,作用是通过当前的构造方法调用其他构造方法,作用是代码复用 * - 语法格式:this(实参); * - this()这种语法只能出现在构造方法的第一行 */ public class ThisText { // 实例变量 int i = 20; // 静态变量 static int k = 10; // 静态方法 public static void doSome(){ System.out.println("do some!"); } // 实例方法 public void doOther(){ System.out.println("do other!"); } // 静态方法 public static void method1(){ // 在静态方法中调用静态方法doSome 完整的方式 ThisText.doSome(); // 同一个类中静态方法调用静态方法doSome 的省略方式 doSome(); // 在静态方法中调用实例方法doOther 需要有对象的参与 完整的方式如下 // 创建ThisText对象 ThisText t1 = new ThisText(); t1.doOther(); // 在静态方法中调用实例方法doOther 没有省略的方式 // 在静态方法中访问静态变量k的完整方式 System.out.println(ThisText.k); // 在静态方法中访问静态变量k的省略方式(省略"类名.") System.out.println(k); // 在静态方法中访问实例变量i 需要有对象的参与 完整的方式 System.out.println(t1.i); // 在静态方法中访问实例变量i 没有省略的方式 } // 实例方法 public void method2(){ // 在实例方法中调用静态方法doSome 完整的方式 ThisText.doSome(); // 在实例方法中调用静态方法doSome 省略的方式 doSome(); this.doSome();// 带有static关键字的静态方法应该采用"类名."的正规方式访问,但是通过"引用."的方式访问也是可以的, // 只不过实际执行的时候和引用指向的对象无关,并且当引用为空的时候,也不会出现空指针异常。 // 当采用"引用."来访问静态方法的时候“IDEA软件”会出现警告,程序仍然可以执行。 // 在实例方法中 调用实例方法doOther 完整的方式 因为实例方法method被调用的时候已经有了对象,此位置的this就是指向这个对象, this.doOther(); // 在实例方法中调用实例方法doOther 省略的方式 (省略了this) doOther(); // 在实例方法中访问静态变量k 完整的方式 System.out.println(ThisText.k); System.out.println(this.k);//这里访问静态变量是使用的"引用.",虽然可以,但是不建议这样使用 // 在实例方法中访问静态变量k 省略的方式 System.out.println(k);//这里省略了"类名." // 在实例方法中访问实例变量i 完整的方式 System.out.println(this.i); // 在实例方法中访问实例变量i 省略的方式 System.out.println(i); } // 主方法(也是静态方法) public static void main(String[] args) { // 编写程序调用静态方法method1 完整方式调用 ThisText.method1(); // 编写程序调用静态方法method1 省略方式调用 method1(); // 创建ThisText对象 ThisText tt = new ThisText(); // 编写程序调用method2 完整方式调用 tt.method2(); // 编写程序调用method2 没有省略方式 } }