• this 关键字的理解


    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 +"
     雇员姓名:" + this.ename + "
     所在部门:" + this.dept + "
     基本工资:" + 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可以获取对象的属性
  • 相关阅读:
    memcached源码剖析5:并发模型
    memcached源码剖析4:并发模型
    深入剖析php执行原理(4):函数的调用
    深入剖析php执行原理(2):函数的编译
    剖析php脚本的超时机制
    strerror的坑
    深入理解php中的ini配置(2)
    深入理解php中的ini配置(1)
    一个“日期”字符串进行比较的case
    用valgrind检测php扩展内存泄露
  • 原文地址:https://www.cnblogs.com/shitulaoma/p/12446282.html
Copyright © 2020-2023  润新知