Java |
您所在的位置:网站首页 › gta终极版 › Java |
this是一个非常灵活的关键字,不会明确表示一个固定概念,比如int,它就是表示一个整型。 1、调用本类属性类中有许多成员,大部分情况下类中直接进行成员调用,但是为了清楚的描述调用是本类属性,会用this.属性表示。 class Person{ String name; int age; public Person(){} public Person(String name, int age) { name = name; age = age; } }如上定义的类,构造方法按上述写法,对象中不会保存我们定义的内容,而是默认值,因为程序以{}为界定范围,如果在此范围内有指定的变量名称,则会直接调用,若没有,则会调用类中的相应属性。 当参数与属性名称相同时,则会出现混淆,则需要用户自己手动明确调用的是属性还是方法中的参数,若是属性,则需要加this.属性,标准程序开发中都会以此方式进行: class Person{ String name; int age; public Person(){} public Person(String name, int age) { this.name = name; this.age = age; } }2、调用本类方法一个类中存在普通方法和构造方法,this调用本类方法时,对应的语法不同: 1)调用本类中的其他方法:this.方法() 一个类中可能存在很多方法,这些方法之间可以直接进行调用,但是不够标准,应用this.方法()调用,标准化风格。 2)调用本类其他构造方法:this() 一个类中可以有多个方法,且可以重载,并且构造方法在实例化对象时只能被调用一次。 若现在需求:Person类中中有三个构造方法,无论调用哪个构造方法,都要求执行语句"**********"。 【举例】:原始实现方式 class Person{ String name; int age; public Person(){ System.out.println("********"); } public Person(String name, int age) { this.name = name; this.age = age; System.out.println("********"); } }程序设计的一个重要原则,避免重复代码。按照这个原则,以上的代码并不符合开发要求,这时可以使用this()形式实现,调用本类无参构造。 class Person{ String name; int age; public Person(){ System.out.println("********"); } public Person(String name) { this(); this.name = name; } public Person(String name, int age) { this(name); this.name = name; this.age = age; } }需要注意的是,this()形式只能放在构造方法的首行。在使用this()调用本类其他构造方法时,应该避免循环调用。 下面通过实例说明构造方法互调的意义所在。 【举例】:写一个雇员的信息类,类中提供如下四个属性:姓名、职位、部门、工资,还有4个构造方法: 无参构造:姓名未知、职位待定、部门后勤、工资为0;单参构造(姓名):职位主管、部门技术部、工资10;双参构造(姓名、部门):职位工程师、工资5;四参构造。针对以上要求可以有两种代码实现方法: 第一种:传统实现 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Emp emp = new Emp(); System.out.println(emp.getInfo()); } class Emp{ private String name; private String job; private String dept; private double sal; public Emp(){ this.name ="未知"; this.job = "待定"; this.dept = "后勤"; this.sal = 0.0; } public Emp(String name){ this.name =name; this.job = "主管"; this.dept = "技术部"; this.sal = 10.0; } public Emp(String name,String dept){ this.name =name; this.job = "工程师"; this.dept = dept; this.sal = 5.0; } public Emp(String name,String job, String dept, double sal){ this.name =name; this.job =job; this.dept = dept; this.sal = sal; } public String getInfo(){ return "姓名:"+this.name+"职位:"+this.job+"部门:"+this.dept+"工资:"+this.sal; } }以上程序重复的代码太多,过于冗余。 第二种:使用this改进 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Emp emp = new Emp(); System.out.println(emp.getInfo()); } class Emp{ private String name; private String job; private String dept; private double sal; public Emp(){ this("未知","待定","后勤",0.0); } public Emp(String name){ this(name,"主管","技术部",10.0); } public Emp(String name,String dept){ this(name,"工程师",dept,5.0); } public Emp(String name,String job, String dept, double sal){ this.name =name; this.job =job; this.dept = dept; this.sal = sal; } public String getInfo(){ return "姓名:"+this.name+"职位:"+this.job+"部门:"+this.dept+"工资:"+this.sal; } }以上代码消除了很多重复代码,实际开发中应用较多。 3、表示当前对象一个类,可以生成若干个对象,每个对象都可调用类中的方法,类中实际上很难描述某一个具体的对象,为了能区分出当前正在操作类中的方法是哪一个,可以使用this完成。 【举例】:观察 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Person perA = new Person(); Person perB = new Person(); System.out.println("MainActivity类中对象输出:"+perA); System.out.println("MainActivity类中对象输出:"+perB); } class Person{ }protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Person perA = new Person(); Person perB = new Person(); System.out.println("MainActivity类中对象输出:"+perA); perA.print(); System.out.println("--------------------------------"); System.out.println("MainActivity类中对象输出:"+perB); perB.print(); } class Person{ void print(){ System.out.println("Person类中的输出,this="+this); } }由以上可知,由perA调用print()方法时,this=perA,由perB调用print()方法时,this=perB, 所以,this的对象引用会随着调用类方法对象的不同而不同,属于相对性的概念。 进一步考虑,this.属性表示的就是当前对象中的属性。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |