java中this详解

this关键字在Java中表示以下概念:

|·调用类中的属性:this.属性;

|·调用类中的方法:this.方法();

|·调用类中的构造:this();

|·表示当前对象

1:(调用类中的属性和方法)

class Person{

   private String name;

   private int age;

   public Person(String name, int age){

      this.setName(name);  //调用类中的方法

      this.setAge(age);

   }

   public void setName(String name){

      this.name = name;    //调用类中的属性

   }

   public void setAge(int age){

      this.age = age;

   }

   public String getName(){

      return this.name;

   }

   public int getAge(){

      return this.age;

   }

}

public class Test{

   public static void main(String [] args){

      Person per = new Person("张三",30);

         System.out.println("姓名:" + per.getName() + "年龄:" + per.getAge());

      }

}

//使用this关键字完美解决属性name与局部变量name的命名冲突。并且让程序更加通俗易懂。

 

2:(调用类中的构造:)

现要求无论调用哪一个构造方法,都必须打印 我被调用了!

class Person{

   private String name;

   private int age;

   public Person(){  //无参构造

      System.out.println("我被调用了!");

   }

   public Person(String name){

      this();   //调用无参构造

      this.setName(name);

   }

   public Person(String name, int age){

      this(name);  //调用有一个参数的构造

      this.setName(name);

      this.setAge(age);

   }

   public void setName(String name){

       this.name = name;

   }

   public void setAge(int age){

      this.age = age;

   }

   public String getName(){

      return this.name;

   }

   public int getAge(){

      return this.age;

   }

}

public class Test{

   public static void main(String [] args){

      Person per = new Person("张三",30);

      System.out.println("姓名:" + per.getName() + "年龄:" + per.getAge());

   }

}

//以上代码无论是哪一个构造方法被调用,都会打印输出 我被调用了!而且提高了代码的重用性。

//调用类中的构造时,this()必须写在构造方法的第一行,并且在所有的构造中至少有一个不被调用。

//使用this()调用类中的构造方法,代码量减少了,代码的重用性提高了。

二)内部类与外部类及外围类的关系

1、内部类不仅可以访问而且可以操作外层类的private成员变量(比如赋值),而外围类不能直接直接访问内部类的成员变量,必须通过

内部类对象引用才能调用;外部类也不能访问其它类的private成员变量的,除非其它类提供了非private的方法来访问这些成员变量。

public void A{

  priave int a;

  private void B{

    private int a;

    public A get(){

      return A.this;//对外层类引用

    }

    public void set(int a){

       this.a = a;//内部类成员变量及方法参数变量

       A.this.a = this.a;//外层及内部类成员变量

    }

  };//B为A的内部类

}2、内部类可以调用外层类的方法,如果内部类有同名方法必须使用"OuterClass.this.MethodName()"格式调用(其中OuterClass与

MethodName换成实际外部类名及其方法;this为关键字,表示对外部类的引用);若内部类无同名方法可以直接调用。而外围类无法直接

调用内部类的private方法,外部类同样无法直接调用其它类的private方法。注意:内部类直接使用外部类的方法与该方法的权限与是否

static无关,它取决于内部类是否有同名方法。

//内部类对外围类的成员方法调用的一般方法事例

public class OuterClass {

 private static void outerMethod() {

  System.out.println("It's Method of OuterClass");

 }

 class Innerclass {

  public void innerMethod() {

   OuterClass.this.outerMethod();//内部类成员方法与外部类成员方法同名时,使用this调用

   outerMethod();//内部类没有同名方法时执行外部类的方法

  }

  

 }

 public static void main(String[] args) {

  OuterClass t = new OuterClass();

  OuterClass.Innerclass in = t.new Innerclass();

  in.innerMethod();

 }

}

(三)内部类的实例化

内部类实例化不同于普通类,普通类可以在任意需要的时候实例化,而内部类必须在外层类实例化以后方可实例化,并与外层类建立关系

假设B是A的内部类,methodC是类A的一个方法,可以通过以下两种途径实现B的实例化:

一是在其它外部类或main()中实例化,声明和初始都要明确与外层类及引用对象的关系:

 A a = new A();

 A.B b = a.new B();

二是在A内部方法内实例化,实例化时java自动把它与外层类引用对象联系起来:

  void method(){

    B b = new B();

  }

另外,内部类如果定义为静态类(static class),在实例化时不需要对外部类实例化:

public class StaticCls{

  public static void main(String[] args){

    OuterCls.InnerCls oi=new OuterCls.InnerCls(); //

  }

}

class OuterCls{

  public static class InnerCls{ //内定类定义为静态类

    InnerCls(){

    System.out.println("InnerCls");

    }

   }

}

  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值