相信在无数经典动漫中,有一部动漫在很多80、90后心中的地位举重若轻,它承载了我们很多美好的童年回忆 ——《龙珠》。它的主人公孙悟空,为了将散落在世界各地的七颗珠子全部集齐,从此展开了的一场冒险之旅,这场冒险注定坎坷曲折、荡气回肠.....
然而,在人生的道路上,有一些力量并非是你与生俱来的,除了自身的不断努力外,还需要借助那么一丢丢外力——世外高人和幸运之神,方能助你抵达成功彼岸!!!
让我们来看看小宝同学能否找到他的七龙珠呢? (一定要看到最后噢~~)
目录
1、小宝儿时崇拜的英雄
2、场景技术实现
2.1 最终效果图
2.2 奉上源码
2.2.1 幸运光环
2.2.2 路遇高人
2.2.3 龙珠等级
2.2.4 小宝能否拿到龙珠
3、回头看技术
3.1 Final的基础要点(你应该知道的)
3.2 Final的底层原理(面试加分项)
1、小宝儿时崇拜的英雄
小宝是一个90后,在儿时最喜欢看的动漫就是《龙珠》。其中的主人公孙悟空就是他一直崇拜的大英雄~~,想象着有一天自己也能像孙悟空一样降妖除魔快意江湖。
当小宝渐渐长大后,也想去外面的世界寻找属于自己的“龙珠”。
理想总是美好的,然而现实却是残酷的,需要碰到高人指点和幸运之神的光顾方可成功。那小宝能否取到龙珠呢?让我们拭目以待~~
2、场景技术实现
2.1 最终效果图
2.2 奉上源码
2.2.1 幸运光环
import java.util.Random;
public final class LuckHope {
// 幸运比例-每个人的幸运星不一样
private final Float luckRate = new Random().nextFloat();
public final String getLuckName(String name) {
return String.format("恭喜[%s]获得幸运之神[%s]眷顾,",name, ((int)(luckRate*100))+"%");
}
}
2.2.2 路遇高人
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class MeetMaster {
// 遇到的高人的等级
private final Integer level = new Random().nextInt(7)+1;
// 继承等级
public String getIntegrationLevel(List list) {
StringBuilder builder = new StringBuilder();
String desc = "";
if (level >= 7) {
desc = "完美";
return String.format("你的表现[%s], 龙珠已获取。",desc);
}
else if (level >= 6) {
desc = "优秀";
}
else if (level >= 5) {
desc = "良好";
}
else if (level >= 4) {
desc = "及格";
}
else if (level < 4) {
desc = "今天不努力,明天卖红薯";
}
List randomThreeInfoList = getRandomThreeInfoList(list, 7 - level);
return String.format("你的表现[%s], 待修炼%s。",desc, randomThreeInfoList.toString());
}
private static List getRandomThreeInfoList(List list, int level) {
List olist = new ArrayList<>();
if (list.size() <= level) {
return list;
} else {
Random random = new Random();
for (int i = 0; i < level; i++) {
int intRandom = random.nextInt(list.size() - 1);
olist.add(list.get(intRandom));
list.remove(list.get(intRandom));
}
return olist;
}
}
}
2.2.3 龙珠等级
import java.util.ArrayList;
import java.util.List;
public class DragonBallLevel extends MeetMaster{
public DragonBallLevel(String name) {
this.name = name;
}
// 寻找找龙珠的人
private String name;
// 每个人都是同等的7颗珠子
private final List dragonBall = new ArrayList<>();
private List getDragonBall() {
dragonBall.add("一星龙");//宇宙终极邪恶力量
dragonBall.add("二星龙");//阴霾污染之龙
dragonBall.add("三星龙");//新星神龙的兄弟
dragonBall.add("四星龙"); //火之龙
dragonBall.add("五星龙");//狂暴龙
dragonBall.add("六星龙");//水和风之龙
dragonBall.add("七星龙");//拥有土的力量
return dragonBall;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void msg(){
LuckHope luckHope = new LuckHope();
System.out.println(luckHope.getLuckName(getName())+getIntegrationLevel(getDragonBall()));
}
}
2.2.4 小宝能否拿到龙珠
public class FindDragonBall {
public static void main(String[] args) {
for(int i = 0; i<100; i++) {
new DragonBallLevel("小宝").msg();
}
}
}
3、回头看技术
import java.util.Random;
public final class LuckHope {
// 幸运比例-每个人的幸运星不一样
private final Float luckRate = new Random().nextFloat();
public final String getLuckName(String name) {
return String.format("恭喜[%s]获得幸运之神[%s]眷顾,",name, ((int)(luckRate*100))+"%");
}
}
2.2.2 路遇高人
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class MeetMaster {
// 遇到的高人的等级
private final Integer level = new Random().nextInt(7)+1;
// 继承等级
public String getIntegrationLevel(List list) {
StringBuilder builder = new StringBuilder();
String desc = "";
if (level >= 7) {
desc = "完美";
return String.format("你的表现[%s], 龙珠已获取。",desc);
}
else if (level >= 6) {
desc = "优秀";
}
else if (level >= 5) {
desc = "良好";
}
else if (level >= 4) {
desc = "及格";
}
else if (level < 4) {
desc = "今天不努力,明天卖红薯";
}
List randomThreeInfoList = getRandomThreeInfoList(list, 7 - level);
return String.format("你的表现[%s], 待修炼%s。",desc, randomThreeInfoList.toString());
}
private static List getRandomThreeInfoList(List list, int level) {
List olist = new ArrayList<>();
if (list.size() <= level) {
return list;
} else {
Random random = new Random();
for (int i = 0; i < level; i++) {
int intRandom = random.nextInt(list.size() - 1);
olist.add(list.get(intRandom));
list.remove(list.get(intRandom));
}
return olist;
}
}
}
2.2.3 龙珠等级
import java.util.ArrayList;
import java.util.List;
public class DragonBallLevel extends MeetMaster{
public DragonBallLevel(String name) {
this.name = name;
}
// 寻找找龙珠的人
private String name;
// 每个人都是同等的7颗珠子
private final List dragonBall = new ArrayList<>();
private List getDragonBall() {
dragonBall.add("一星龙");//宇宙终极邪恶力量
dragonBall.add("二星龙");//阴霾污染之龙
dragonBall.add("三星龙");//新星神龙的兄弟
dragonBall.add("四星龙"); //火之龙
dragonBall.add("五星龙");//狂暴龙
dragonBall.add("六星龙");//水和风之龙
dragonBall.add("七星龙");//拥有土的力量
return dragonBall;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void msg(){
LuckHope luckHope = new LuckHope();
System.out.println(luckHope.getLuckName(getName())+getIntegrationLevel(getDragonBall()));
}
}
2.2.4 小宝能否拿到龙珠
public class FindDragonBall {
public static void main(String[] args) {
for(int i = 0; i<100; i++) {
new DragonBallLevel("小宝").msg();
}
}
}
3、回头看技术
import java.util.ArrayList;
import java.util.List;
public class DragonBallLevel extends MeetMaster{
public DragonBallLevel(String name) {
this.name = name;
}
// 寻找找龙珠的人
private String name;
// 每个人都是同等的7颗珠子
private final List dragonBall = new ArrayList<>();
private List getDragonBall() {
dragonBall.add("一星龙");//宇宙终极邪恶力量
dragonBall.add("二星龙");//阴霾污染之龙
dragonBall.add("三星龙");//新星神龙的兄弟
dragonBall.add("四星龙"); //火之龙
dragonBall.add("五星龙");//狂暴龙
dragonBall.add("六星龙");//水和风之龙
dragonBall.add("七星龙");//拥有土的力量
return dragonBall;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void msg(){
LuckHope luckHope = new LuckHope();
System.out.println(luckHope.getLuckName(getName())+getIntegrationLevel(getDragonBall()));
}
}
2.2.4 小宝能否拿到龙珠
public class FindDragonBall {
public static void main(String[] args) {
for(int i = 0; i<100; i++) {
new DragonBallLevel("小宝").msg();
}
}
}
3、回头看技术
Java中,Final的作用就是对所定义的类、方法或者属性的一种保护机制,避免被外界随意修改。
3.1 Final的基础要点(你应该知道的)
1) 可以用来修饰一个类,表明该类不允许被继承。
2)可以用来修饰一个方法,表明该方法不允许被重写,与abstract相互矛盾。
3)可以用来修饰一个局部变量或成员变量,可以在同一条语句中赋值,或在构造方法中赋值。
3.2 Final的底层原理(面试加分项)
1)final修饰变量时,变量会指向一块固定的内存, 而且内存中的值不能改变。
2)final修饰引用类型变量时, 指向一个也是固定对象地址, 这个地址不能被修改; 但是对象的数据值是可以被修改。
3)保证线程可见性:final原理对比volite关键字就会非常好理解,有一个写屏障。(面试加分项)
4)提升读取效率:final方法比非final方法要快,因为在编译的时候已经静态绑定了,jvm会提前缓 存好改变量,不需要在运行时再动态绑定。
5)Final变量可以安全的在多线程环境下进行共享,不需要额外的同步开销。
6)使用final关键字,JVM会对方法、变量及类进行优化。
在后面的章节,老王会进一步展开对Jvm运行机制的深入分析。
敬请期待,持续关注!



