0%

泛型的概念

设计背景

集合容器类在设计阶段/声明阶段不能确定这个容器到底实际存的是什么类型的对象,所以在JDK1.5之前只能把元素类型设计为Object,JDK1.5之后使用泛型来解决。因为这个时候除了元素的类型不确定,其他的部分是确定的,例如关于这个元素如何保存,如何管理等是确定的,因此此时把元素的类型设计成一个参数,这个类型参数叫做泛型。Collection<E>,List<E>,ArrayList<E> 这个就<E>是类型参数,即泛型。

概念

所谓泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。这个类型参数将在使用时(例如, 继承或实现这个接口,用这个类型声明变量、创建对象时)确定(即传入实 际的类型参数,也称为类型实参)。

从JDK1.5以后,Java引入了“参数化类型(Parameterized type)”的概念, 允许我们在创建集合时指定集合元素的类型,正如:List<String>,这表明该List只能保存字符串类型的对象。

JDK1.5改写了集合框架中的全部接口和类,为这些接口、类增加了泛型支持,从而可以在声明集合变量、创建集合对象时传入类型实参。

阅读全文 »

Java 集合框架概述

一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另一方面,使用Array存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。

  • 数组在内存中存储方面的特点:

    ​ 数组初始化之后,长度就确定了,不能更改了

    ​ 数组声明的类型,就决定了元素初始化时候的类型

  • 数组在存储方面的弊端:

    ​ 数组初始化之后,长度就不能改变了,不便于扩展

    ​ 数组中提供的属性和方法较少,不便于进行增删改查插入等操作,且效率不高。数组无法直接获取存储元素的个数

    ​ 数组存储的数据是有序的,可以重复的,存储的特点单一

Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组。

Java 集合可分为 Collection 和 Map 两种体系 :

Collection接口:单列数据,定义了存取一组对象的方法的集合

​ List:元素有序、可重复的集合

​ Set:元素无序、不可重复的集合

Map接口:双列数据,保存具有映射关系“key-value对”的集合

阅读全文 »

枚举类

在JDK5.0之前需要自定义枚举类,JDK5.0中新增了enum关键字,用来定义枚举类

枚举类的特点

  • 枚举类对象的属性不允许被改动,所以应该使用private final修饰
  • 枚举类的被private final修饰的属性要在构造器中为期赋值
  • 若枚举类显式的定义了带参数的构造器,则在列出枚举值时也必须传入对应参数

自定义枚举类

  1. 私有化类的构造器,保证不能再类的外部创建其对象
  2. 在类的内部穿件枚举类的实例,并用public static final修饰
  3. 对象如果有实例变量,应该声明为private final,并在构造器中初始化
阅读全文 »

字符串相关的类

String类

String类的特性

  • String类是字符串类,java中所有的字符串字面值,都作为此类的示例实现。
  • String类是一个final类,不可用继承,定义的变量是常量,定义之后也不能改变。
  • String对象的字符内容是存储在一个字符数组value[]中的。
image-20200606144906113

String str1 = “abc”;与String str2 = new String(“abc”);的区别?

  • 前者是一个字符串常量,存储在字符串常量池中,目的是共享。
  • 后者是字符串非常量对象,存储在堆中。
阅读全文 »

好久没更新过博客了,之前一段时间及比较忙,快要期末了,考试要准备,课程设计要做,中间还水了个自动打卡的脚本,闲下来的时间比较少(可能是打游戏去了),就一直没更新吧,上一次更新是两三周之前,虽然不存在什么有人催更的问题(滑稽),但是自己心里还是不舒服,于是就来水一篇博客。

1、 基本功能

  1. 抢答器系统提供八路抢答,分别代表八支队伍,分别用按钮S1-S8表示,最先按下按钮的队伍对应的LED灯会亮起来,其他队再按下按钮无效。
  2. 当按下开始抢答按钮(reset)之后计时模块开始计时30S,扬声器会发出短暂报警,LED灯亮,若30秒之内有队伍按下抢答按钮,则计时模块停止计时,同时扬声器短暂报警;若30S内没有队伍按下抢答按钮,到了30S时计时停止,扬声器短暂报警,且LED灯熄灭。
  3. 抢答器系统设有清除按钮/开始按钮(reset),第一次按下之后,代表抢答的LED灯亮,计时器开始计时,再次按下,所有的LED灯熄灭,计时器归零,系统回到初始状态。
阅读全文 »

查看进程

pa a 显示终端机下所有进程

ps -A 查看所有进程(ps -e和-A是一样的效果,-e更常用一点)(这两个看到的比上面那个多些)

ps u 以用户为主的格式来显示程序状况

ps x 显示所有程序,不以终端机来区分

lsof -i:端口号 根据指定的端口查询进程

常用的组合命令:

ps aux,然后再通过管道使用grep命令过滤查找特定的进程,然后再对特定的进程进行操作。

ps -ef|grep java|grep -v grep 显示出所有的java进程,去处掉当前的grep进程。

结束进程

kill -9 进程PID 根据进程号结束进程

killall -9 进程名 根据进程名结束进程

参考资料:https://blog.csdn.net/wojiaopanpan/article/details/7286430

程序、进程、线程的基本概念

程序(program)

是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。

进程(process)

是程序的一次执行过程,或是正在运行的一个程序。是一个动态 的过程:有它自身的产生、存在和消亡的过程。

  • 如:运行中的QQ,运行中的MP3播放器
  • 程序是静态的,进程是动态的
  • 进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域
阅读全文 »

文件基本权限

首先看一下Linux中的文件权限,可以用ll命令或者带-l的ls命令查看

image-20200515135526284

第一个字符代表文件的类型,然后是权限、链接数、所属用户、所属用户组、文件大小、最后修改时间、文件名

Linux中的文件权限一共有7种:

阅读全文 »

Packet

01 00 F2 03 F4 F5 F6 F7 00 00

(00 00 is the checksum field)

Form the 16-bit words

0100 F203 F4F5 F6F7

Calculate 2’s complement sum

0100 + F203 + F4F5 + F6F7 = 0002 DEEF (store the sum in a 32-bit word)

Add the carries (0002) to get the 16-bit 1’s complement sum

DEEF + 002 = DEF1

Calculate 1’s complement of the 1’s complement sum

~DEF1 = 210E

We send the packet including the checksum 21 0E

01 00 F2 03 F4 F5 F6 F7 21 0E

At the receiving

0100 + F203 + F4F5 + F6F7 + 210E = 0002 FFFD
FFFD + 0002 = FFFF

which checks OK.

阅读全文 »