Java补充—13

个人笔记13

Scanner

一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串。

Java 5添加了java.util.Scanner类,这是一个用于扫描输入文本的新的实用程序。由于任何数据都必须通过同一模式的捕获组检索或通过使用一个索引来检索文本的各个部分。于是可以结合使用正则表达式和从输入流中检索特定类型数据项的方法。这样,除了能使用正则表达式之外,Scanner类还可以任意地对字符串和基本类型(如int和double)的数据进行分析。借助于Scanner,可以针对任何要处理的文本内容编写自定义的语法分析器。

next(): next()只读空格之前的数据,并且cursor指向本行

next() 方法遇见第一个有效字符(非空格,非换行符)时,开始扫描,当遇见第一个分隔符或结束符(空格或换行符)时,结束扫描,获取扫描到的内容,即获得第一个扫描到的不含空格、换行符的单个字符串。

nextLine()

可以扫描到一行内容并作为一个字符串而被获取到。nextLine()会自动读取了被next()去掉的Enter作为他的结束符

在这里插入图片描述
因此在s1=sc.next();后面添加sc.nextLine(); 来过滤enter
在这里插入图片描述

枚举类型

枚举类型创建常量的有序列表作为类型。它以特定顺序指定常量
在枚举类型中定义的常量是该枚举类型的实例。
声明了一个名为Level的公共枚举类型,它具有四个枚举常量:LOW,MEDIUM,HIGH和URGENT。

public enum Level {
LOW, MEDIUM, HIGH, URGENT;
}

在这里插入图片描述

嵌套枚举类型

在这里插入图片描述

集合类

Java中的集合主要分为以下集合类:

Map、List、Set、Queue和concurrent包里面供多线程环境下使用的以上几种集合类。一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue
在这里插入图片描述

Map

Map 接口存储一组键值对象,提供key(键)到value(值)的映射。
Map主要有HashMap、TreeMap、WeakHashMap、LinkedHashMap、IdentityHashMap
TreeMap

继承了AbstractMap,并且使用一颗树。

WeakHashMap

继承AbstractMap类,使用弱密钥的哈希表。

LinkedHashMap

继承于HashMap,使用元素的自然顺序对元素进行排序.

IdentityHashMap

继承AbstractMap类,比较文档时使用引用相等。

HashMap(重点)

HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
该类实现了Map接口,根据键的HashCode值存储数据,具有很快的访问速度,最多允许一条记录的键为null,不支持线程同步。
在这里插入图片描述在这里插入图片描述

List

List接口是一个有序的 Collection,使用此接口能够精确的控制每个元素插入的位置,能够通过索引(元素在List中位置,类似于数组的下标)来访问List中的元素,第一个元素的索引为 0,而且允许有相同的元素。List 接口存储一组不唯一,有序(插入顺序)的对象。
ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。

在这里插入图片描述

LinkedList(链表)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。LinkedList(链表) 类似于 ArrayList,是一种常用的数据容器。与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低

在这里插入图片描述

Set

Set 具有与 Collection 完全一样的接口,只是行为上不同,Set 不保存重复的元素。Set 接口存储一组唯一,无序的对象。(List存储不唯一,有序的对象)
HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。

在这里插入图片描述

Queue(队列)

Queue继承了Collection接口
它支持 FIFO,尾部添加、头部删除(先进队列的元素先出队列),跟我们生活中的排队类似。

Queue使用时要尽量避免Collection的add()和remove()方法,add()和remove()方法在失败的时候会抛出异常。
要使用offer()来加入元素,使用poll()来获取并移出元素

压入元素(添加):add()、offer()

	相同:未超出容量,从队尾压入元素,返回压入的那个元素。
	区别:在超出容量时,add()方法会对抛出异常,offer()返回false

弹出元素(删除):remove()、poll()

	相同:容量大于0的时候,删除并返回队头被删除的那个元素。
	区别:在容量为0的时候,remove()会抛出异常,poll()返回false

获取队头元素(不删除):element()、peek()

	相同:容量大于0的时候,都返回队头元素。但是不删除。
	区别:容量为0的时候,element()会抛出异常,peek()返回null。

在这里插入图片描述

concurrent(本人表示不太懂…)

而当针对高质量Java多线程并发程序设计时,为防止死锁等现象的出现,比如使用java之前的wait()、notify()和synchronized等,每每需要考虑性能、死锁、公平性、资源管理以及如何避免线程安全性方面带来的危害等诸多因素,往往会采用一些较为复杂的安全策略,加重了程序员的开发负担。之后,推出了java.util.concurrent工具包以简化并发完成,将有效的减少竞争条件(race conditions)和死锁线程。concurrent包很好的解决了这些问题,为我们提供了更实用的并发程序模型。

Executors主要方法

newFixedThreadPool(固定大小线程池)、newCachedThreadPool(无界线程池,可以进行自动线程回收)、newCachedThreadPool(无界线程池,可以进行自动线程回收)。

Executor :具体Runnable任务的执行者
ExecutorService :一个线程池管理者,其实现类有多种,我会介绍一部分。我们能把Runnable,Callable提交到池中让其调度。

会清楚看到只能执行4个线程。当执行完一个线程后,才会又执行一个新的线程
在这里插入图片描述在这里插入图片描述

反射

Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。
反射:就是将各个组成部分封装为其他对象,这就是反射机制。
作用

我们知道反射机制允许程序在运行时取得任何一个已知名称的class的内部信息,包括包括其modifiers(修饰符),fields(属性),methods(方法)等,并可于运行时改变fields内容或调用methods。那么我们便可以更灵活的编写代码,代码可以在运行时装配,无需在组件之间进行源代码链接,降低代码的耦合度。

Java运行三个阶段在这里插入图片描述

获取class对象的方式

在这里插入图片描述
同一个字节码文件只会加载一次,只会有一个 Class 实例

反射机制对应第二阶段:
成员变量——>封装为class对象
API 可以看到 Class 有很多方法

getName():获得类的完整名字。
getFields():获得类的public类型的属性。
getDeclaredFields():获得类的所有属性。包括private 声明的和继承类
getMethods():获得类的public类型的方法。
getDeclaredMethods():获得类的所有方法。包括private 声明的和继承类
getMethod(String name, Class[] parameterTypes):获得类的特定方法,name参数指定方法的名字,parameterTypes 参数指定方法的参数类型。
getConstructors():获得类的public类型的构造方法。
getConstructor(Class[] parameterTypes):获得类的特定构造方法,parameterTypes 参数指定构造方法的参数类型。
newInstance():通过类的不带参数的构造方法创建这个类的一个对象。

获取成员变量
在这里插入图片描述
获取成员方法在这里插入图片描述
获取构造方法在这里插入图片描述
指定成员变量,方法在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值