Java引用类型用法总结(重点)
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引用类型用法总结(重点)相关推荐
- java引用类型用法的总结
引用类型用法总结 实际的开发中,引用类型的使用非常重要,也是非常普遍的.我们可以在理解基本类型的使用方式基础上,进一步去掌握引用类型的使用方式.基本类型可以作为成员变量.作为方法的参数.作为方法的返回 ...
- 【Java基础学习笔记】- Day11 - 第四章 引用类型用法总结
Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 Java基础学习笔记 - Day11 - 第四章 引用类型用法总结 4.1 class作为成员变量 4.2 interface作为成 ...
- java反射用法示例_Java反射示例教程
java反射用法示例 Java Reflection provides ability to inspect and modify the runtime behavior of applicatio ...
- P41 引用类型用法总结
P41 引用类型用法总结 1.class作为成员变量 2.interface 作为成员变量 3. interface 作为方法参数和返回值类型 系统:Win10 Java:1.8.0_333 IDEA ...
- 41_引用类型用法总结
第41章 引用类型用法总结 作者:张子默 实际的开发中,引用类型的使用非常重要,也是非常普遍的.我们可以在理解基本类型的使用方式基础上,进一步去掌握引用类型的使用方式.基本类型可以作为成员变量.作为方 ...
- 【Java 虚拟机原理】Java 引用类型 ( 强引用 | 软引用 | 弱引用 | 虚引用 | 静态变量 )
文章目录 一.静态变量 二. Java 引用类型 ( 强.软.弱.虚 ) 一.静态变量 GC Root 对象 : 线程栈 中的 栈帧 中的 局部变量表 中的 引用对象 ; 方法区 中的 静态引用对象 ...
- 【Android 内存优化】Java 引用类型 ( 强引用 | 软引用 | 弱引用 | 虚引用 )
文章目录 一. Java 引用类型 ( 强.软.弱.虚 ) 二. 软引用代码示例 三. 弱引用代码示例 强引用 ( 不回收 ) > 软引用 ( OOM 前回收 ) > 弱引用 ( GC 必 ...
- java resume过时方法_学点开发|关于Java多线程用法解析
在进行学习之前,我们先来了解下,什么是Java多线程: 多线程是实现并发机制的一种有效手段.进程和线程一样,都是实现并发的一个基本单位.为了让大家更清晰读懂关于Java多线程用法,由以下几点入手学,帮 ...
- Java引用类型与常量
Java引用类型与常量 引用数据类型 Java中,引用类型的变量非常类似于C/C++的指针. 引用类型指向一个对象,指向对象的变量是引用变量,这些变量在声明时被指定为一个特定的类型,比如Employe ...
最新文章
- C++:运算符重载函数之成员运算符重载函数
- 3、Power View—数据透视表般华丽
- 通过docker的方式进行RocketMQ的安装
- IOS开发之coreData
- ehcahe总结 思维导图
- 数据有序_CATTI汉译英批改 | 人工智能、大数据有序推进
- python考试题目及答案-这就是你需要的python99道练习题(附答案)
- 【重点】LeetCode 135. Candy
- UGUI的Drag实现鼠标拖拽
- php微信接口调用,PHP调用微信接口报错
- git 远程删除分支之后 本地分支更新后还在
- 安卓rom制作教程_OPPO Reno安卓9系统如何升级ColorOS6.7最新版本-安卓10系统
- 带蓝牙5.0芯片选型厂商总结和市场趋势分析
- ios android 自动化测试工具,AndroidIOS自动化测试框架整合升级方案
- MAPGIS67默认打开方式失败
- Win10Edge护眼色设置
- Linux基础入门(详细教程)
- 线性表学习归纳总结一
- 独立开发的基于springboot + websocket IM网站聊天系统总结
- Windows 10 屏幕亮度调节快捷方法