dlnb526 发表于 2020-3-1 20:01:29

【Java类与对象】迅腾公司实例探索2(原创)


this关键字
点击加入订阅淘帖:【JAVA练习题】第一季

static/image/hrline/line5.png
不知道触发了什么关键词,总是被审核
【JAVA练习题】【索引贴】
https://fishc.com.cn/thread-157183-1-1.html

今天我们就来谈谈关键字this.
this 关键字是 Java常用的关键字,可用于任何实例方法内指向当前对象,也可指向对其调用当前方法的对象,或者在需要当前类型对象引用时使用。

用事实说话,自己动手做个小实验吧。
public void showAddressInMemory(){
      System.out.println("打印this看到的虚拟地址:"+this);
    }
    我们调用这样的函数来看this指向的地址。
       
       
        怎么看呢?作为阅片无数的优秀员工,鱼大觉得有把身边漂亮的小姐姐,{:10_282:} 咳咳不对,{:10_299:} 是把公司里的女同事拉到一个群里,鱼大做群主。
       
        于是我们就有了一个名为Girls的类。我们忽略这个类具体是怎样构造的。
       public static void main(String[] args) {
      Girs Mary =new Girls();
      Mary.name = "玛丽";
      //直接打印对象,会显示该对象在内存中的虚拟地址,即虚拟地址,每次执行,得到的地址不一定一样
                System.out.println("打印对象看到的虚拟地址:"+Mary);
      //调用showAddressInMemory,打印该对象的this,显示相同的虚拟地址
      Mary.showAddressInMemory();
         
      Girls Lucy =new Girls();
      Lucy.name = "露西";
      System.out.println("打印对象看到的虚拟地址:"+Lucy);
      Lucy.showAddressInMemory();
    }
       
        那this可以用来做神马呢~
        加入我们通过setName()来设置名字,那么
        public void setName(String name){
      name = name;
    }
       
        天啊好像什么不好的事情发生了,参数的名字和属性值都是name,系统傻傻的分不清,就把参数传递给参数自己了,这个时候呢,就要请出公司配备的领路老司机this
        public void setName(String name){
      this.name = name;
       
    }
       
        这样你不用换个昵称就可以搭上老 司 机 的车了。
       
        我们也可以利用this在构造方法中调用其他构造方法
                public setInfo(String name,int age){
                this(name);
                this.age = age
                }
   
        练习
       
        你觉得Girls类应该有哪些属性?,亮出你的代码。
        要求:至少四个属性并且存在一个包含四个属性的构造器,在这个构造器里调用setInfo构造器。

**** Hidden Message *****



传参

老 司 机 小 甲 鱼 登记妹子资料被老板发现了,天啊!
        怎么办呢,小 甲 鱼不敢明目张胆地往新创建的类里传入妹子的参数了。{:10_280:}
        聪明的小 甲 鱼想到:
        变量有两种类型 基本类型 和类类型

        参数也是变量,所以传参分为
        基本类型传参
        类类型传参
       
        还记得等号= 吗~以前我们用它来赋值
        Girls g = new Girls()
        在这里的等号,我们叫做引用,引用Girls类指向一个g对象
       
小甲鱼要来构建一个新的类了,传入类参数,总体来说需要两步
        1、定一个类
        public class Girls{//定义一个类
        }
        2、定一个方法,类Girls作为参数传递
        public class XXX{//定义一个新类
                public void show(Girls a){//类作为参数传递
                }
        }
       
        是不是像废话一样,拿来动动手:
       
        练习:
        在方法中,使参数引用指向一个新的对象

        外面的引用是指向原来的对象?还是新的对象?
       
        答案:
**** Hidden Message *****



类属性(静态属性)与类方法(静态方法)

1
        相信大家看了很久的static一直不知道具体做什么的
        当一个属性被static修饰的时候,就叫做类属性,又叫做静态属性
        当一个属性被声明成类属性,那么所有的对象,都共享一个值
        比如小 甲 鱼 是群主,只需要定义一次,就是所有人的群主啦{:10_281:}

        static String owner;
        好了这回我们有了群主的属性,指定群主可以直接在类里:

        owner = "小甲鱼"

        我们也可以在实例化时候指定,但是只能指定一次

        Lucy.owner ="小甲鱼"

        这时候我们就可以随处访问这个属性,比如Girs.owner,Mary.owner

        这样所有人的群主都是小 甲 鱼 了,当然如果不二在小 甲 鱼之 前抢了小 甲 鱼 群主的头衔,鱼大也只能干生气了
练习:通过Mary.owner修改群主名字,看是否发生变化



static/image/hrline/5.gif
2
        很多人都想进小 甲 鱼的群???
        类方法: 又叫做静态方法

        对象方法: 又叫实例方法,非静态方法

        访问一个对象方法,必须建立在有一个对象的前提的基础上
        访问类方法,不需要对象的存在,直接就访问
       
       
        和访问类属性一样,调用类方法也有两种方式
        比如getGroupNumber()方法可以获得入群方式
        1. 对象.类方法
       
        Mary.getGroupNumber();
       

        2. 类.类方法
       
        Girls.getGroupNumber();
       
        这两种方式都可以调用类方法,但是建议使用第二种方式进行,这样更符合语义上的理解。
        并且在很多时候,并没有实例,比如在前面练习的时候用到的随机数的获取办法
       
        Math.random()
       

        random()就是一个类方法,直接通过类Math进行调用,并没有一个Math的实例存在。
       
       
        练习:在一个类方法中,直接调用一个对象方法,
        比如在GirlList类中调用setName()
        能否直接调用? 为什么?


**** Hidden Message *****
页: [1]
查看完整版本: 【Java类与对象】迅腾公司实例探索2(原创)