zoukankan      html  css  js  c++  java
  • JAVA 基础 / 第二十四课: 类和对象 / JAVA 中的THIS 是什么意思?传参祥解

    2018-03-14

    一、this这个关键字,相当于普通话里的“我” ,例如:

    小明说 “我吃了” 这个时候,“我” 代表小明 
    小红说 “我吃了” 这个时候,“我” 代表小红 
    "我"代表当前人物 。

    1、this即代表当前对象:

    public class Hero {     
        String name; //姓名     
        float hp; //血量     
        float armor; //护甲     
        int moveSpeed; //移动速度
         //打印内存中的虚拟地址
        public void showAddressInMemory(){
            System.out.println("打印this看到的虚拟地址:"+this);
        }     
        public static void main(String[] args) {
            Hero garen =  new Hero();
            garen.name = "盖伦";
            //直接打印对象,会显示该对象在内存中的虚拟地址
            //格式:Hero@c17164 c17164即虚拟地址,每次执行,得到的地址不一定一样
     
            System.out.println("打印对象看到的虚拟地址:"+garen);
            //调用showAddressInMemory,打印该对象的this,显示相同的虚拟地址
            garen.showAddressInMemory();
             
            Hero teemo =  new Hero();
            teemo.name = "提莫";
            System.out.println("打印对象看到的虚拟地址:"+teemo);
            teemo.showAddressInMemory();
        }       
    }

    2、通过this关键字访问对象的属性:

    public class Hero {     
        String name; //姓名     
        float hp; //血量     
        float armor; //护甲     
        int moveSpeed; //移动速度 
        //参数名和属性名一样
        //在方法体中,只能访问到参数name
        public void setName1(String name){
            name = name;
        }     
        //为了避免setName1中的问题,参数名不得不使用其他变量名
        public void setName2(String heroName){
            name = heroName;
        }     
        //通过this访问属性
        public void setName3(String name){
            //name代表的是参数name
            //this.name代表的是属性name
            this.name = name;
        }     
        public static void main(String[] args) {
            Hero  h =new Hero();        
            h.setName1("teemo");
            System.out.println(h.name);
             
            h.setName2("garen");
            System.out.println(h.name);    
             
            h.setName3("死歌");
            System.out.println(h.name);    
        }
        
    }

    3、通过this调用其他的构造方法:

    如果要在一个构造方法中,调用另一个构造方法,可以使用this()

    public class Hero {       
        String name; //姓名       
        float hp; //血量      
        float armor; //护甲        
        int moveSpeed; //移动速度        
        //带一个参数的构造方法
        public Hero(String name){
            System.out.println("一个参数的构造方法");
            this.name = name;
        }      
        //带两个参数的构造方法
        public Hero(String name,float hp){
            this(name);
            System.out.println("两个参数的构造方法");
            this.hp = hp;
        } 
        public static void main(String[] args) {
            Hero teemo =  new Hero("提莫",383);       
            System.out.println(teemo.name);        
        }      
    }

    二、变量有两种类型:基本类型和类类型;参数也是变量,所以传参分为基本类型传参和类类型传参:

    1、基本类型传参:

    在方法内,无法修改方法外的基本类型参数

    public class Hero {       
        String name; //姓名        
        float hp; //血量        
        float armor; //护甲        
        int moveSpeed; //移动速度     
        public Hero(){}  
        //回血
        public void huixue(int xp){
            hp = hp + xp;
            //回血完毕后,血瓶=0
            xp=0;
        }     
        public Hero(String name,float hp){
            this.name = name;
            this.hp = hp;
        } 
        public static void main(String[] args) {
            Hero teemo =  new Hero("提莫",383);
            //血瓶,其值是100
            int xueping = 100;         
            //提莫通过这个血瓶回血         
            teemo.huixue(xueping);
             
            System.out.println(xueping);         
        }      
    }

    2、引用与=

    如果一个变量是基本类型,比如 int hp = 50;我们就直接管hp叫变量,=表示赋值的意思。
    如果一个变量是类类型,比如 Hero h = new Hero();我们就管h叫做引用。

    =不再是赋值的意思,=表示指向的意思:

    比如 Hero h = new Hero();这句话的意思是:引用h,指向一个Hero对象。

    3、类类型传参:

    类类型又叫引用 
    第24行的引用 teemo与 第17行的引用hero,是不同的引用 
    通过调用garen.attack(teemo, 100); 使得这两个引用都指向了同一个对象 
    所以在第18行hero.hp = hero.hp - damage; 就使得该对象的hp值,发生了变化 
    因此第25行,打印该对象的Hp值就是变化后的值

    public class Hero {
        String name; // 姓名 
        float hp; // 血量 
        float armor; // 护甲 
        int moveSpeed; // 移动速度
     
        public Hero(String name, float hp) {
            this.name = name;
            this.hp = hp;
    }
    // 攻击一个英雄,并让他掉damage点血 public void attack(Hero hero, int damage) { hero.hp = hero.hp - damage; } public static void main(String[] args) { Hero teemo = new Hero("提莫", 383); Hero garen = new Hero("盖伦", 616); garen.attack(teemo, 100); System.out.println(teemo.hp); } }
  • 相关阅读:
    R语言与概率统计(三) 多元统计分析(上)
    R语言与概率统计(二) 假设检验
    win系统下启动linux上的kafka集群及使用
    MD5加密解密帮助类
    Effective JavaScript Item 39 绝不要重用父类型中的属性名
    博客搬家啦!
    ABAP 中的搜索帮助
    <转>bash: qmake: command not found...
    EJB学习笔记六(EJB中的拦截器)
    需求管理之被遗忘的需求
  • 原文地址:https://www.cnblogs.com/Parker-YuPeng/p/8564530.html
Copyright © 2011-2022 走看看