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() {@Overridepublic void magicAttack() {System.out.println("火雨");}});role.skillAttack();System.out.println("");System.out.println("更换技能。。。");System.out.println("");//更换技能攻击role.setMagicAttack(new MagicAttack() {@Overridepublic 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;}
}

Java引用类型用法总结(重点)相关推荐

  1. java引用类型用法的总结

    引用类型用法总结 实际的开发中,引用类型的使用非常重要,也是非常普遍的.我们可以在理解基本类型的使用方式基础上,进一步去掌握引用类型的使用方式.基本类型可以作为成员变量.作为方法的参数.作为方法的返回 ...

  2. 【Java基础学习笔记】- Day11 - 第四章 引用类型用法总结

    Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 4.1 class作为成员变量 4.2 interface作为成 ...

  3. java反射用法示例_Java反射示例教程

    java反射用法示例 Java Reflection provides ability to inspect and modify the runtime behavior of applicatio ...

  4. P41 引用类型用法总结

    P41 引用类型用法总结 1.class作为成员变量 2.interface 作为成员变量 3. interface 作为方法参数和返回值类型 系统:Win10 Java:1.8.0_333 IDEA ...

  5. 41_引用类型用法总结

    第41章 引用类型用法总结 作者:张子默 实际的开发中,引用类型的使用非常重要,也是非常普遍的.我们可以在理解基本类型的使用方式基础上,进一步去掌握引用类型的使用方式.基本类型可以作为成员变量.作为方 ...

  6. 【Java 虚拟机原理】Java 引用类型 ( 强引用 | 软引用 | 弱引用 | 虚引用 | 静态变量 )

    文章目录 一.静态变量 二. Java 引用类型 ( 强.软.弱.虚 ) 一.静态变量 GC Root 对象 : 线程栈 中的 栈帧 中的 局部变量表 中的 引用对象 ; 方法区 中的 静态引用对象 ...

  7. 【Android 内存优化】Java 引用类型 ( 强引用 | 软引用 | 弱引用 | 虚引用 )

    文章目录 一. Java 引用类型 ( 强.软.弱.虚 ) 二. 软引用代码示例 三. 弱引用代码示例 强引用 ( 不回收 ) > 软引用 ( OOM 前回收 ) > 弱引用 ( GC 必 ...

  8. java resume过时方法_学点开发|关于Java多线程用法解析

    在进行学习之前,我们先来了解下,什么是Java多线程: 多线程是实现并发机制的一种有效手段.进程和线程一样,都是实现并发的一个基本单位.为了让大家更清晰读懂关于Java多线程用法,由以下几点入手学,帮 ...

  9. Java引用类型与常量

    Java引用类型与常量 引用数据类型 Java中,引用类型的变量非常类似于C/C++的指针. 引用类型指向一个对象,指向对象的变量是引用变量,这些变量在声明时被指定为一个特定的类型,比如Employe ...

最新文章

  1. C++:运算符重载函数之成员运算符重载函数
  2. 3、Power View—数据透视表般华丽
  3. 通过docker的方式进行RocketMQ的安装
  4. IOS开发之coreData
  5. ehcahe总结 思维导图
  6. 数据有序_CATTI汉译英批改 | 人工智能、大数据有序推进
  7. python考试题目及答案-这就是你需要的python99道练习题(附答案)
  8. 【重点】LeetCode 135. Candy
  9. UGUI的Drag实现鼠标拖拽
  10. php微信接口调用,PHP调用微信接口报错
  11. git 远程删除分支之后 本地分支更新后还在
  12. 安卓rom制作教程_OPPO Reno安卓9系统如何升级ColorOS6.7最新版本-安卓10系统
  13. 带蓝牙5.0芯片选型厂商总结和市场趋势分析
  14. ios android 自动化测试工具,AndroidIOS自动化测试框架整合升级方案
  15. MAPGIS67默认打开方式失败
  16. Win10Edge护眼色设置
  17. Linux基础入门(详细教程)
  18. 线性表学习归纳总结一
  19. 独立开发的基于springboot + websocket IM网站聊天系统总结
  20. Windows 10 屏幕亮度调节快捷方法

热门文章

  1. 微信朋友圈python广告演员_微信自己在朋友圈投了个广告,原来幕后团队是他们!...
  2. 鸿蒙系统适配荣耀机型,荣耀鸿蒙系统支持的手机型号机型名单 曝6月开始适配...
  3. 非煤矿山UWB精准定位系统+工业互联网系统建设
  4. js计算两个经纬度之间的距离
  5. python爬取视频
  6. Python每日一题之0005
  7. Spring boot定制个性化banner(七彩佛祖版)
  8. ZigBee_加密算法设置
  9. 通用类App的模块划分
  10. QCon北京2015报名火爆,4月8日提前停止售票