JAVA基础学习- 接口与继承
8.1 接口在设计LOL的时候,进攻类英雄有两种,一种是进行物理系攻击,一种是进行魔法系攻击这时候,就可以使用接口来实现这个效果。接口就像是一种约定,我们约定某些英雄是物理系英雄,那么他们就一定能够进行物理攻击。物理攻击接口创建一个接口 AD ,声明一个方法 physicAttack 物理攻击,但是没有方法体,是一个“空”方法package charactor; public interface
Java-两个较大的List快速取交集、差集
工作中经常遇到需要取两个集合之间的交集、差集情况,但是普通的retainAll()和removeAll()无法满足数据量大的情况,由此就自己尝试运用其他的方法解决。注:如果数据量小的情况下,还是使用retainAll()和removeAll()方便1.假使不存在重复数据,如果存在重复数据,也会被覆盖掉,实际情况中,重复数据也无意义。2.取交集或者差集时存在主数据和从数据的关系,可提前判断一下那个集
Java条件编译是什么?
一、概述条件编译是指源程序的代码行,可以在满足一定条件的情况下才进行编译,而未选中的源码,不会生成中间码或机器码,即部分内容参与编译。条件编译的好处: 对于不同硬件平台或者软件平台,或者不同功能模块的代码,编写到在同一个源文件,从而方便程序的维护和移植。很多程序设计语言都提供条件编译的功能,比如C/++c采用预处理器指示符来达到条件编译。而Java语言并没有提供直接的预处理器,那么Jav
Java 关键字分类详解
Java 关键字是预先定义的具有特别意义的标识符,也可以叫 Java 保留字,Java 关键字不能用作包名、类名、方法名、变量名和参数。访问控制类、方法和变量修饰符程序控制错误处理包相关基本数据类型特殊值 变量引用保留字
Java 中12个常见的语法糖
本文从 Java 编译原理角度,深入字节码及 class 文件,抽丝剥茧,了解 Java 中的语法糖原理及用法,帮助大家在学会如何使用 Java 语法糖的同时,了解这些语法糖背后的原理。语法糖语法糖(Syntactic Sugar)也称糖衣语法,是由英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算
提高 Java 效率的 35 个小技巧,用了的都说好!
前言代码优化 ,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无 BUG 上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个
Java反射机制的作用是什么?
一、反射的概念:主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。反射是Java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接。但是反射使用不当会成本很高!二、反射机制的作用:1,反编译:.class-->.java2,通过反射机制访问j
Java中如何比较字符串?方法有哪些?
字符串比较是常见的操作,包括比较相等、比较大小、比较前缀和后缀串等。在Java中,比较字符串的常用方法有 3 个:equals() 方法、equalsIgnoreCase() 方法、 compareTo() 方法。下面简单介绍这 3 个方法的使用。equals() 方法equals() 方法将逐个地比较两个字符串的每个字符是否相同。如果两个字符串具有相同的字符和长度,它返回 true,
三年写BUG得出的找BUG经验
前言零零碎碎从开始写代码已经整整三年多了,别人说只要写十万行代码就能在大学毕业时找到一份好工作,像我种写了超过十万行BUG的不知道会不会有大厂愿意雇用我去竟对上班。愿意写bug的好处就是也开始总结了一些找bug的经验分享给大家找 BUG 第一式找BUG首先要明确BUG出现的原因,第一种方法是从整个页面的加载过程中去先粗略定位,这种方法是从最直观的地方去找出你的BUG。//java学习交流:7372
遇到生产bug时,你会慌嘛?
前言作为程序员,我们经常需要面对bug。刚毕业的孩子或者工作没多久的程序员,遇到生产问题,很容易就惊慌失措。其实,我们都知道,着急是没有用,因为急是解决不了问题的。如何应对生产问题?当然,这句话既是对你们说的,也是对我自己说的,我自己也在成长阶段啦。1. 调整好自己的心态。遇到生产问题时,着急是人的一种正常反应,我们要做的是,冷静一下。一定要调整好自己的心态。因为如果你急的像热锅上的蚂蚁,领导看在
实战!聊聊工作中使用了哪些设计模式
前言平时我们写代码呢,多数情况都是流水线式写代码,基本就可以实现业务逻辑了。如何在写代码中找到乐趣呢,我觉得,最好的方式就是:使用设计模式优化自己的业务代码。今天跟大家聊聊日常工作中,我都使用过哪些设计模式。1.策略模式1.1 业务场景假设有这样的业务场景,大数据系统把文件推送过来,根据不同类型采取不同的解析方式。多数的小伙伴就会写出以下的代码:if(type=="A"){ &
理解Java的强引用、软引用、弱引用和虚引用
前言Java执行GC判断对象是否存活有两种方式其中一种是引用计数。引用计数:Java堆中每一个对象都有一个引用计数属性,引用每新增1次计数加1,引用每释放1次计数减1。在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于(reachable)可达状态,程序才能使用它。从JDK 1.2版本开始,对象的引用被划分为4种级别,从而使程序能更加灵活
这一次,彻底解决Java的值传递和引用传递
本文旨在用最通俗的语言讲述最枯燥的基本知识学过Java基础的人都知道:值传递和引用传递是初次接触Java时的一个难点,有时候记得了语法却记不得怎么实际运用,有时候会的了运用却解释不出原理,而且坊间讨论的话题又是充满争议:有的论坛帖子说Java只有值传递,有的博客说两者皆有;这让人有点摸不着头脑,下面我们就这个话题做一些探讨,对书籍、对论坛博客的说法,做一次考证,以得出信得过的答案。其实,对于值传递
List 去重的 6 种方法,这个方法最完美!
在日常的业务开发中,偶尔会遇到需要将 List 集合中的重复数据去除掉的场景。这个时候可能有同学会问:为什么不直接使用 Set 或者 LinkedHashSet 呢?这样不就没有重复数据的问题了嘛?不得不说,能提这个问题的同学很机智,一眼就看到了问题的本质。但是,在实际的业务开发中遇到的情况会更复杂。比如,List 集合可能是历史遗留问题,也有可能是调用接口返回的类型限制,只能使用 List 接收
[万字长文,建议收藏]关于Synchronized锁升级,你该了解这些
前言毫无疑问,synchronized是我们用过的第一个并发关键字,很多博文都在讲解这个技术。不过大多数讲解还停留在对synchronized的使用层面,其底层的很多原理和优化,很多人可能并不知晓。因此本文将通过对synchronized的大量C源码分析,让大家对他的了解更加透彻点。本篇将从为什么要引入synchronized,常见的使用方式,存在的问题以及优化部分这四个方面描述,话不多说,开始表
不要再死记硬背Java的类加载啦
作为一个程序员,面试的时候都绕不过JVM,可以说这是我们永远的痛。是不是感觉每次面试的时候,都要重新背一下,不然面试会被虐惨。那么问题就来了,为什么每次面试都要背?``为什么背完过了断时间就忘了?除了记忆不深刻,还有一个重要原因是没理解,不理解的东西当然记不久。所以从这篇开始,我们要开始学习JVM,争取做到理解记忆,将知识点串起来。虽然这块知识很无聊,很枯燥,但是我争取写的简单,有趣点
终于有人把Java内存区域说清楚了!(不是内存模型,不要再混淆了)
不要再把Java内存区域和Java内存模型混淆,再问就自闭啦。😏小橙出品 必属精品。先赞后看 养成习惯 。上次我们讲了JVM的类加载机制,主要涉及了双亲委派机制,如何破坏双亲委派机制,不明白的小伙伴可以移步上篇不要再死记硬背Java的类加载啦。网上有很多关于Java区域和内存模型的文章,但是很多人读完之后还是搞不清楚,主要是因为大家把这两个混为一谈,也不关心JDK版本。所以概念一多,非
真的懂Java的String吗?
1.String的特性1.1不变性我们常常听人说,HashMap 的 key 建议使用不可变类,比如说 String 这种不可变类。这里说不可变指的是类值一旦被初始化,就不能再被改变了,如果被修改,将会是新的类,我们写个demo 来演示一下。public class test { public static void main(String[] args){
你还在 for 循环里使用 + 拼接字符串?明天想想去哪里面试吧
引言都说 StringBuilder 在处理字符串拼接上效率要强于 String,但有时候我们的理解可能会存在一定的偏差。最近我在测试数据导入效率的时候就发现我以前对 StringBuilder 的部分理解是错误的。后来我通过实践测试 + 找原理 的方式搞清楚了这块的逻辑。现在将过程分享给大家测试用例我们的代码在循环中拼接字符串一般有两种情况第一种就是每次循环将对象中的几个字段拼接成一
面试官:为什么 Java 不把基本类型放在堆中?我竟然答不上来。。
为什么要把堆和栈区分出来呢?第一,从软件设计的角度看,栈代表了处理逻辑,而堆代表了数据。这样分开,使得处理逻辑更为清晰。分而治之的思想。这种隔离、模块化的思想在软件设计的方方面面都有体现。第二,堆与栈的分离,使得堆中的内容可以被多个栈共享(也可以理解为多个线程访问同一个对象)。这种共享的收益是很多的。一方面这种共享提供了一种有效的数据交互方式(如:共享内存),另一方面,堆中的共享常量和缓存可以被所