java 基本类型 引用_语法重点

java 基本类型 引用_语法重点Java引用类型引用数据类型:数组,类,接口。class作为成员变量类作为成员变量时,对它进行赋值的操作,实际上,是赋给它该类的一个对象。在这里插入代码片interface作为成员变量在这里插入代码片interface作为方法参数和返回值类型接口作为参数时,传递它的子类对象。接口作为返回值类型时,返回它的子类对象。在这里插入代码片…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

Java引用类型

引用数据类型:数组,类(String),接口。

class作为成员变量

类作为成员变量时,对它进行赋值的操作,实际上,是赋给它该类的一个对象。

Role.java

package referenceType2;

public class Role { 
   
    private String name;
    private int blood;
    private Weapon weapon;
    private Armour armour;

    public Role(String name, int blood) { 
   
        this.name = name;
        this.blood = blood;
        // this.armour = armour;
    }

    public String getName() { 
   
        return name;
    }

    public void setName(String name) { 
   
        this.name = name;
    }

    public Weapon getWeapon() { 
   
        return weapon;
    }

    public void setWeapon(Weapon weapon) { 
   
        this.weapon = weapon;
    }

    public Armour getArmour() { 
   
        return armour;
    }

    public void setArmour(Armour armour) { 
   
        this.armour = armour;
    }

    public void attack() { 
   
        System.out.println(weapon.getName() + " ------ " + weapon.getDamage());
    }

    public void defend() { 
   
        System.out.println(armour.getName() + " ------- " + armour.getProtect());
    }

    public void life() { 
   
        //不写this.getName()也可以了,默认this调用
        System.out.println(getName() + "的初始生命值 = " + blood);
        System.out.println("穿上防弹衣后生命值 = " + (this.blood + armour.getProtect()));
        System.out.println("穿上防弹衣,挨了一刀");
        blood += armour.getProtect() - weapon.getDamage();
        System.out.println(getName() + "的剩余生命值 = " + blood);
    }
}

Weapon.java

package referenceType2;

public class Weapon { 
   
    private String name;
    private int damage;

    public Weapon(String name, int damage) { 
   
        this.name = name;
        this.damage = damage;
    }

    public String getName() { 
   
        return name;
    }

    public void setName(String name) { 
   
        this.name = name;
    }

    public int getDamage() { 
   
        return damage;
    }

    public void setDamage(int damage) { 
   
        this.damage = damage;
    }
}

Armour.java

package referenceType2;

public class Armour { 
   
    private String name;
    private int protect;

    public Armour(String name, int protect) { 
   
        this.name = name;
        this.protect = protect;
    }

    public String getName() { 
   
        return name;
    }

    public void setName(String name) { 
   
        this.name = name;
    }

    public int getProtect() { 
   
        return protect;
    }

    public void setProtect(int protect) { 
   
        this.protect = protect;
    }
}

Test.java

package referenceType2;

public class Test { 
   
    public static void main(String[] args) { 
   
        Weapon weapon = new Weapon("刀(伤害)", 80);
        Armour armour = new Armour("Bulletproof Vest(增加防护)", 50);

        Role role = new Role("张三", 100);
        //Role role = new Role("张三",100,armour);
        role.setWeapon(weapon);
        role.setArmour(armour);

        //打印武器伤害
        role.attack();
        //打印防弹衣保护
        role.defend();
        System.out.println("");
        role.life();
    }
}

在这里插入图片描述

interface作为成员变量

接口是对方法的封装,对应游戏当中,可以看作是扩展游戏角色的技能。如果想扩展更强大技能,我们在Role中,可以增加接口作为成员变量,来设置不同的技能。

我们使用一个接口,作为成员变量,以便随时更换技能,这样的设计更为灵活,增强了程序的扩展性。
接口作为成员变量时,对它进行赋值的操作,实际上,是赋给它该接口的一个子类对象

set()方法中可以传入匿名内部类

Role.java

package referenceType3;

public class Role { 
   
    MagicAttack magicAttack;

    public void setMagicAttack(MagicAttack magicAttack) { 
   
        this.magicAttack = magicAttack;
    }

    public void skillAttack(){ 
   
        magicAttack.magicAttack();
    }
}

MagicAttack.java(接口)

package referenceType3;

public interface MagicAttack { 
   
    void magicAttack();
}

Test.java

package referenceType3;

public class Test { 
   
    public static void main(String[] args) { 
   
        Role role = new Role();
        //set()方法中传入匿名内部类
        role.setMagicAttack(new MagicAttack() { 
   
            @Override
            public void magicAttack() { 
   
                System.out.println("火雨");
            }
        });
        role.skillAttack();
        System.out.println("");

        System.out.println("更换技能。。。");

        System.out.println("");

        //更换技能攻击
        role.setMagicAttack(new MagicAttack() { 
   
            @Override
            public void magicAttack() { 
   
                System.out.println("闪电链");
            }
        });
        role.skillAttack();
    }
}

在这里插入图片描述

interface作为方法参数和返回值类型

接口作为参数时,传递它的子类对象。
接口作为返回值类型时,返回它的子类对象。

ArrayList类我们并不陌生,查看API我们发现,实际上,它是 java.util.List 接口的实现类。所以,当我们看见List 接口作为参数或者返回值类型时,当然可以将ArrayList的对象进行传递或返回。

1.List接口做参数类型,返回值也是List接口类型
2.方法参数,返回值类型的List如果用List< Integer>泛型表示的话,集合获取元素时就不用强转了

package referenceType4;

import java.util.ArrayList;
import java.util.List;

public class Test { 
   
    public static void main(String[] args) { 
   
        ArrayList<Integer> aList = new ArrayList<>(10);
        /** * 错误写法,foreach中不能用list.add(i) * for (Integer i : aList) { aList.add(i); }*/
        for (int i = 1; i <= 10; i++) { 
   
            aList.add(i);
        }
        aList.add(0);
        aList.add(-1);
        aList.add(-2);
        aList.add(-3);
        aList.add(-4);
        System.out.println("aList = " + aList);

        //List list = new Test().getEvenNum(aList);
        List list = getEvenNum(aList);
        System.out.println("list = " + list);
    }

    //获取集合中所有偶数方法
    //不写静态方法也可以
    // public List getEvenNum(List list){ 
   
    //List接口做参数类型,返回值也是List接口类型
    public static List getEvenNum(List list) { 
       
        // public static List<Integer> getEvenNum(List<Integer> list) { 
   
        List<Integer> evenNumList = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) { 
   
          //加List泛型后就不用强制转换了
          // Integer integer = list.get(i);
            Integer integer = (Integer) list.get(i);
            //Integer integer = list.get(i);
            /** * if (integer % 2 == 0) { evenNumList.add(integer); }*/
            //按位与更快
            if ((integer & 1) != 1) { 
   
                evenNumList.add(integer);
            }
        }
        return evenNumList;
    }
}

()

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180111.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Django(21)migrate报错的解决方案

    Django(21)migrate报错的解决方案前言在讲解如何解决migrate报错原因前,我们先要了解migrate做了什么事情,migrate:将新生成的迁移脚本。映射到数据库中。创建新的表或者修改表的结构。问题1:migrate怎么判断哪

    2022年7月30日
    2
  • 理解LSTM模型[通俗易懂]

    理解LSTM模型[通俗易懂]写在前面:这是翻译自colah的一篇博客,原文关于LSTM神经网络模型的理解写的非常直观、简单易懂,所以翻译过来帮助大家学习理解LSTM模型。当然我不是按照原文一字不落的翻译,而是摘出其中对模型理解最有帮助的部分,然后用我自己理解的方式和语言来写的博文。这是我翻译博文的一贯做法。有兴趣的可以自行去看原文,比较简短,原博客地址:http://colah.github.io/posts/2015-08-Understanding-LSTMs/一、循环神经网络RNNRNN循环神经网络使用循环核来实

    2022年9月10日
    0
  • c语言程序设计打卡系统,C语言程序设计报告书学生考勤系统设计.doc[通俗易懂]

    c语言程序设计打卡系统,C语言程序设计报告书学生考勤系统设计.doc[通俗易懂]设计题目:学生考勤系统设计设计方案:该系统能考察学生的出勤情况,所以包括每个班学生的全部信息。每个学生是一条记录,包括姓名﹑性别﹑学号,对应于某天某门课程的出勤情况等。该系统可模拟考勤过程,记录考勤结果,并能在课程结束后按照设定的考勤评分标准自动给出每个学生的考勤分数。其中,学生可在本系统在线请假以及查看学期内的上课出勤信息。在线请假中,学生可以随时查看到请假的详细进展情况。同时,学生可以查看本期…

    2025年6月12日
    0
  • C++——try、throw、catch实例学习程序[通俗易懂]

    C++——try、throw、catch实例学习程序

    2022年1月31日
    47
  • 海外代理服务器有哪些好处?[通俗易懂]

    海外代理服务器有哪些好处?[通俗易懂]国外代理服务器的配置分为服务器端和客户端两部分,其中服务器端的配置包括用户创建、管理、监控、统计、分析、查询等功能。但是,这一工作通常都是由因特网服务商或专门的网络管理员来完成,对于一般拨号用户来说,海外代理服务器的配置实际上是指客户机的配置,具体的好处包括以下几点。1、能够有效地提高访问速度。一般来说,最好的海外代理服务器会预先设置一个更大的硬盘缓冲区,以便能够容纳足够多的数据,因此,当有外来信息通过时,该缓冲区的容量非常大,便于将外来信息保存到缓冲区中。国外代理服务器采用这种方式,当又有其他用户可.

    2022年6月8日
    40
  • 黑盒测试c语言用例,黑盒测试用例设计技术包括_测试用例包括什么_常用黑盒测试用例设计(4)…

    黑盒测试c语言用例,黑盒测试用例设计技术包括_测试用例包括什么_常用黑盒测试用例设计(4)…因此,可以把全部输入数据合理地划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,这样就可以用少量的代表性测试数据,来取得较好的测试结果。黑盒测试用例设计技术包括*是指对于程序的规格说明来说,是合理的有意义的输入数据构成的集合。利用它可以检验程序是否实现预先规定的功能和性能。在具体问题中,有效等价类可以是一个,也可以是多个。有效等价类*是指对于程序的规格说明…

    2022年6月13日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号