JAVA中 this关键字,比较复杂,灵活

三类结构的描述:

  当前类中的属性:this.属性

  当前类中的方法:(普通方法,构造方法):this()//构造方法        this.方法名称();//普通方法

  描述当前对象:(最头疼的部分)

一。当前类中的属性:this.属性

利用构造方法和setter方法都可以对类中的属性进行赋值,但是在进行赋值的时候,可以进行如下操作

java中大括号{}  是程序的边界,在程序里面当进行变量(参数,构体的边界符),那么在程序里面当进行变量(参数属性成为变量)

都是以大括号{}作为查找边界,按照就近取用的原则,这时构造方法并没能访问类中的属性与参数,往往会在属性前追加一个 this,

表示本类属性

 1 package baba;
 2 
 3 class Person {
 4     private String name;
 5     private int age;
 6 
 7     public Person(String name, int age) {
 8         this.name = name;// 加上this目的为了明确标识出类中的属性与参数区别
 9         this.age = age;// 会在属性前加this,标识本类属性(通俗的说告诉告诉构 造方法
10                         // 你别到处找了,我在这里,你别把参数给别人,和篮球场传球原来一样)
11     }
12 
13     public void tell() {
14         System.out.println("姓名" + this.name + ",年龄" + this.age);
15     }//
16 }
17 
18 /**
19  * 一个一个文件中可以定义多个类,但是只能有一个public的类, 而且java文件名必须和这个public类相同。 
* 看看下面代码这个
20 * 主类的类名和java文件名相同,可以看出一个源文件里能定义多个class,
* 但是有且只能有一个public类可以看出一个源文件里能定义多个class,
21 * 但是有且只能有一个public类 public类的名字必须和源文件名一致 22 * 23 * @author Administrator 24 * 25 */ 26 public class JavaDemo {// 主类 又叫public表示全局类 27 public static void main(String args[]) {// 主方法 28 Person per = new Person("小米", 3);// 声明,并实例化了一个对象 29 per.tell(); 30 31 } 32 33 }

 二.当前类中的方法:(普通方法,构造方法):this()//构造方法        this.方法名称();//普通方法

     但是对于方法调用就必须考虑构造方法与普通方法的区别

 

1.普通方法调用(this.方法名称()):实例化对象产生之后就可以调用普通方法(这个好理解,小孩没出生,怎么会有吃喝

    拉撒的行为呢)

 1 package baba;
 2 class Person {
 3     private String name;
 4     private int age;
 5     public Person(String name, int age) {
 6         /**通过set 方法把值设到构造方法里面,构造方法再把值赋给被封装类的属性
 7          * this调用本类中的方法,来给属性赋值
 8          */
 9         this.setName(name);//加与不加(this)都表示本类中的方法
10         this.setAge(age);  //为了统一最好加上
11     }
12     public void tell() {
13         System.out.println("姓名" + this.name + ",年龄" + this.age);
14     }//
15     public void setName(String name) {
16         this.name=name;        
17     }
18     public void setAge(int age) {
19         this.age=age;
20     }
21     public String getName() {
22         return this.name;
23     }
24     public int getAge() {
25         return this.age;
26     }
27 }
28 public class JavaDemo {// 主类 又叫public表示全局类
29     public static void main(String args[]) {// 主方法
30         Person per = new Person("小明", 3);// 声明,并实例化了一个对象,给这个新的对象设置了初始值
31         per.tell();
32 
33     }
34 
35 }

2.构造方法的调用【     this()   】:使用关键字new实例化对象的时候才会调用构造方法;

评价一个代码的好坏,可以重用,没重复,所有本类构造方法的互相调用要注意以下几个重要问题:

   ① 构造方法必须在实例化新对象的时候调用,所有this()的语句只允许放在构造方法的首行

  ②在构造方法中可以调用普通方法,在普通方法中不允许调用构造方法

③构造方法相互调用时请给程序保留出口,不要形成死循环(不然报错    构造方法的递归调用

  

 1 package baba;
 2 class Emp {
 3     private long empno;// 员工编号
 4     private String ename;// 员工姓名
 5     private String dept;// 部门名称
 6     private double salary;// 基本工资
 7     // setter getter省略
 8     public Emp() {
 9         this(1000,"无名氏",null,0.0);
10     }
11 
12     public Emp(long empno) {
13         this(empno,"新员工",null,0.0);
14     }
15 
16     public Emp(long empno, String ename, String dept) {
17         this(empno,ename,dept,2500.00);
18         
19     }
20 
21     public Emp(long empno, String ename, String dept, double salary) {
22         this.empno = empno;
23         this.ename = ename;
24         this.dept = dept;
25         this.salary =2500.00;
26     }
27 
28     public String getInfo() {
29         return "雇员编号:" + this.empno +"\n 雇员姓名:" + this.ename + "\n 所在部门:" + this.dept + "\n 基本工资:" + this.salary;
30     }
31 }
32 public class JavaDemo {// 主类 又叫public表示全局类
33     public static void main(String args[]) {// 主方法
34         Emp emp=new Emp(5874L,"黎明","财务部门");
35         System.out.println(emp.getInfo());
36     }
37 
38 }

 

总结,通过构造方法来实例化对象时,操作过程是从新对象的小括号内(),依照小括号内给定的参数,选择对应的构造方法

来获取,再把这些参数赋给成员属性,然后,对象通过相应方法取出属性值,再输出到控制台

setter getter 方法 与 构造方法实例化对象的差别

      • 构造方法只有在创建对象时才会被“系统”调用且只调用一次, 而getter和setter方法是随时可以被“对象”调用
      • 构造方法不能获取对象属性的值, 而getter可以获取对象的属性

 

posted on 2020-03-09 01:51  识途老码  阅读(237)  评论(0)    收藏  举报