栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

面试必考之Final关键字在 Java 中的作用~小宝能否找到七龙珠

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

面试必考之Final关键字在 Java 中的作用~小宝能否找到七龙珠

相信在无数经典动漫中,有一部动漫在很多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、回头看技术

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运行机制的深入分析。

敬请期待,持续关注!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/853834.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号