Java 集合学习笔记【二】
Properties因为这个和 IO 的流输入流输出有关,所以日后再来补坑。
Queue首先来看看 Queue 接口:
1public interface Queue<E> extends Collection<E>
这里可以看到是和 List 同级别的接口,都继承了 collection,顾名思义啊,这个 Queue 就是一个实现了队列功能的集合,First In First Out 先进先出。
而在 Java 中,实现 Queue 接口的类是:LinkedList,虽说它叫作 LinkedList ,但是它实际上是实现了 List 和 Queue 两个接口。我们可以向上转型为 Queue,然后把它当作队列的实例使用。
看一看 Queue 里面封装的方法:
123456boolean add(E e); //向队列尾部加入元素boolean offer(E e); //向队列尾部加入元素E remove(); //返回队头元素,并删除E poll(); //返回队头元素,并删除E element(); //返回队头元素,但不删除E peek(); //返回 ...
Java 集合学习笔记【一】
集合导论集合 Collection
用来存储数据使用,对应着不同类型的需求,拥有着不同的集合来处理它。Collection 是一个顶层接口,下面继承他的还有两个接口,分别是 List 接口和 Set 接口,其中 List 接口实现的是有序可重复的列表,Set 接口实现的是无序不可重复的列表。剩下的就是实现 List 和 Set 接口的各种类了,这些类五花八门,可以根据需要选择使用。
Collection 接口Collection 的定义首先我们看 Collection 接口的定义:
1public interface Collection<E> extends Iterable<E>
继承了一个 Iterable 的接口,并使用了泛型,泛型用于定义此集合存储的数据类型,而继承的接口 Iterable 可以先不管,一会再看它。接口里面定义了所有实现这个接口的类所必须要有的方法,因为 Collection 接口是所有集合都要实现的接口,因此所有的集合都有 Collection 接口里面的方法,下面是一些主要的方法:
1234567int size(); // ...
Java 泛型学习笔记
何为泛型泛型概念泛型故名思意,就是广泛的类型,其本质就是参数化类型。在各种资料里面,泛型的概念都是通过 ArrayList 这个类来引入的,那么这里也用它来引入泛型的概念。
ArrayList 我没有使用过,但是它是一个变长数组,可以通过方法 .add() 来不断增加元素,而不用担心空间大小不够的问题。这个类可以实现任意类型的可变数组,而实现的方法就是通过泛型来实现:
12public class ArrayList<E> extends AbstractList<E> // ArrayList 类的声明public void add(int index, E element) // add方法的一个重载
首先可能就注意到了,这个类名是 ArrayList<E> 并且在 add 方法的参数里面,element 的类型是 E ,这个 E 就是一个类型的代称,取什么名字都行,这个 E 表示什么类型,完全取决于在实例化 ArrayList 的时候,给它指定的类型。
比如我们想要一个 String 类型的可变数组,那么声明方法就是:
1ArrayList& ...
Java 注解学习笔记
Java 注解对于 Java 的注解,其实前面我们已经接触过了,在对接口或者抽象类的方法进行重写的时候,我们会在重写的方法的前面加上 @Override 这个注解,注意这个是注解不是注释,注释是完全被编译器忽略的东西,而注解并不会被忽视,是会被编译器处理的。这个注解的作用就是让编译器帮我们检查我们重写的方法是否正确。
按照 Java 中一切皆为对象来看,注解也自然是对象了(其实准确的说,注解本质上是一个接口,继承于 java.lang.annotation.Annotation ),下面的代码就是 @Override 注解的声明:
1234567package java.lang;import java.lang.annotation.*;@Target(ElementType.METHOD)@Retention(RetentionPolicy.SOURCE)public @interface Override {}
注解的作用注解在 Java 中一般拥有三个用途:
用来编写文档
用来编译检查
用来代码分析
这些用途我们一点一点的说:
用来编写文档记得我 ...
我的 2020 年
这神奇的一年2020 年一直对于我来说都是一个很神奇的年份,可能是因为这是 21 世纪第二个十年的最后一年吧,各种宏伟的计划的实现时间都定在了 2020 年。出于对美好未来的向往,自然十分期待 2020 年的到来,而当我开始写下这篇回忆录的时候,2020 已经接近尾声了,站在年末,不得不说,2020 真的是一个很神奇的年份,无论是对于世界还是我。
本来作为懒狗的我是不太想写这些东西的,但是想到自己差到爆炸的记忆力,觉得还是有必要把这些经历都记录下来,因为今年发生的事情还都是非常有纪念意义的,无论是好的方面还是差的方面,2020 年真的是让人又爱又恨啊。
绝不松懈的复习在 2020 的开头,最深的记忆还是和丹阳同学一起学习的时候的情景,有一个能一同努力的伙伴真的是非常棒的体验。那个时候的我学习状态处于最巅峰的时候,每天的学习任务都安排的满满的,和丹阳同学讨论题目,一起进步,最后在寝室锁门前的 5 分钟冲刺回去,路上还要记忆一两个知识点。也正是和他坐在一起的时间里面,我学到了他的一些高效的学习方法,印象最深的是用一个总结本去记录所有重要 知识点/易错点,然后早读的时候拿出来进行记忆,这个习 ...
Java 反射学习笔记
Class 类JVM中保存类的Class在理解反射这个概念之前,我们要先理解一下 Class,Class 是一个 Java 自己带的类,注意这里的 Class 首字母是大写的,说明它是一个类的名字,而不是 类 的英文翻译,就像我们自己定义的一个类一样:
123public class Xorex { ...}
这叫作 Class 的类(这个名字容易误解成这个叫类的类,但实际上 Class 只是它的名字),也有自己的定义,虽然有点长:
12345678public final class Class<T> implements java.io.Serializable, GenericDeclaration, Type, AnnotatedElement, TypeDescriptor.OfField<Class& ...
Java 异常学习笔记
Java的异常异常概念异常的概念,就是程序由于一些其他原因导致了它并没有按照我们想要的状态去运行。程序出现异常是很常见的一种情况,我们需要对可能出现的异常进行提前处理,保证程序即使遇到了异常,也能顺利地运行下去。
对于访问文件不存在,用户输入错误,这些都属于异常,是程序可以自我拯救的,并不是非常严重的不同寻常。我们可以通过合理的异常处理机制来将这些不和谐的东西压制下来,让程序仍然快乐的运行。
对于堆栈溢出,内存耗尽,无法加载类,这些属于错误,是程序自己也无能为力的,是非常严重的不同寻常。对于这些,我们只能让程序自我结束生命,毕竟它也很绝望啊。
Java 的编译器对于 Exception 中的 非 RuntimeException 是要求必须捕获它们的,而 RuntimeException 和 Error 则不做强制的要求。当然不做强制要求并不代表着就不需要对这些进行捕获处理,而是要根据实际的情况进行判断。
异常的实现方法上面的异常说的是程序设计中的一个概念,那么再 Java 里面,真正的异常是什么呢?想到 Java 中万物皆对象,没错抛出的异常也是一个对象,它们的模板——类,也同样存在 ...
Java 核心类学习笔记
String 相关String 的实现String 在老版本的 Java 中以 private final char[] 基本数据结构封装成为类,新版本则是换成了 private final byte[] (因为对于 ASCII 字符可以节省大量的空间)。里面封装了很多方法和属性可以使用。
在 Java 的编译期,会自动地把所有的字符常量都放入一个常量池中,然后 String 类型的变量其 实就是引用了一个常量的地址。那么在判断两个字符串是否相同其实就是在判断它们对于常量池的地址引用是否相同。所以对于涉及到可变字符串的比较(在程序运行中会对字符串进行改变),是不可以使用 == 来判断两个字符是否相等,反而应该使用 String 类内置的方法 String1.equals(String1) 来进行比较。 如果要忽略大小写则可以使用 equalsIgnoreCase() 方法来比较忽略大小写之后是否相同。
搜索和提取字串String 类里面还内置了很多用来操作字符串的方法:
判断是否包含子串:contains(String) 返回 boolean 为输入的 String 是否在当前的实 ...
Java 面向对象学习笔记
类中的方法在方法中使用变量和属性在 Java 类中的方法中,我们可以直接声明各种变量使用,但是如果需要使用这个类中的属性的时候,有两种方法可以调用这个属性。一种是使用 this.field 这个this 始终指向当前实例。另外一种就是比较简单的,如果不存在属性和变量名冲突的情况下,可以直接像调用变量一样调用这个类的属性(局部变量的优先级大于类属性)
方法也想要可变参数一个类的方法可以设置输入的参数,调用的时候就严格的按照设置的参数进行输入就可以了,但是如果不确定调用方法的时候要输入的参数的时候该怎么办呢?这里就要说到可变参数了。
可变参数的设置方法就是 Type... variable 然后调用这个方法的时候,可以传入任意数量的参数,Java会把这些参数整合成为对应类型的数组。需要注意的是,这个可变参数必须在所有参数的最后面,否则就会报错。
下面就是两种实现可变参数传入的方法,第一种是传进去之后Java整合成数组,第二种是构造好一个数组之后再传进去。
1234567891011121314151617181920public class test{ private st ...
Java 基础学习笔记
安全学的真的是太菜了,所以不得已只能转了开发,emmmmm,打工人,努力去学习搬砖吧!
Java 简介编译 or 解释?Java的独特之处Java 是一种介于编译性和解释性的语言,首先需要明确两个概念,编译性和解释性。
编译性语言:在执行之前,需要使用编译器编译成可以被计算机执行机器码,然后计算机直接运行对应的机器码。这样的语言被称为编译性语言,比如 C / C++。这样好处是性能很好,但是因为不同架构的 CPU 使用的是不同的指令集,所以需要对应每一个平台都进行不同的编译才可以。
解释性语言:在运行的时候,使用解释器将代码解释成对应的机器码,然后执行。这是一个同步的过程,解释和运行。所以写出来的代码只需要在运行的时候用对应平台的解释器来运行就可以了,所以可拓展性就很强,比如 Python ,就是解释性语言。
编译-解释性语言:同时拥有上面两种语言的特性的Java就属于 编译-解释性 语言,Java 代码在编写出来之后,会首先经历 编译。但是这个编译并不是要生成机器码,而是生成字节码。因为机器码是高度依赖硬件的,所以为了实现良好的可移植性,Java 通过编译生成字节码来表达代码运算 ...