java基础知识
java基础
Reverse train.
这个作者很懒,什么都没留下…
展开
-
maven打包测试jar包冲突
maven打包,本地测试和服务器测试不一致原创 2022-11-10 20:20:46 · 313 阅读 · 1 评论 -
枚举
public enum Spiciness { NOT,MILD,MEDIUM,HOT,FLAMING}这里创建了一个Spiciness的枚举类型,它有5个具名值。枚举类型的实例是常量,用大写字母表示。public class SimpleEnumUse { public static void main(String[] args) { Spi...原创 2020-03-20 17:04:57 · 457 阅读 · 0 评论 -
String.intern()
String.intern()是一个Native方法,它的作用是:如果字符串常量池中已经包含一个等于此String对象的字符串,则返回代表池中这个字符串的String对象;否则,将此String对象包含的字符串添加到常量池中,并且返回此String对象的引用。...原创 2020-03-10 16:51:18 · 72 阅读 · 0 评论 -
InputStreamReader、OutputStreamWriter
public class IOTest17 { public static void main(String[] args) {// InputStreamReader isr=new InputStreamReader(System.in);// OutputStreamWriter osw=new OutputStreamWriter(System...原创 2020-02-10 11:10:55 · 183 阅读 · 0 评论 -
缓冲流
BufferedInputStream;BufferedOutputStream。带缓冲区的字节输入输出流,是处理流。以流为数据源。public class IOTest13 { public static void main(String[] args) { File file=new File("a.txt");//源 InputStrea...原创 2020-02-10 11:10:49 · 91 阅读 · 0 评论 -
字节数组流
public class IOTest10 { public static void main(String[] args) throws IOException { //将指定字符串存放到byte数组中 byte[] bytes="Talk is cheap,show me the code".getBytes();//创建源 ...原创 2020-02-10 11:10:34 · 113 阅读 · 0 评论 -
文件字符流
public class IOTest08 { public static void main(String[] args) { readFile("D:\\IDEACODE\\Test2\\b.txt"); } static void readFile(String oldFile){ File file=new File(oldFi...原创 2020-02-10 11:10:35 · 117 阅读 · 0 评论 -
文件拷贝
public class IOTest06 { public static void main(String[] args) { //将oldfile数据copy到newfile copyFile("D:\\IDEACODE\\Test2\\src\\cn\\gakki\\IO\\IOTest05.java","d.txt"); } s...原创 2020-02-10 11:11:01 · 248 阅读 · 0 评论 -
文件字节流
FileInputStream:通过字节的方式读取文件。FileOutputStream:通过字节的方式写出或追加数据到文件。public class IOTest03 { public static void main(String[] args) { InputStream is=null; File file=new File("a.txt"...原创 2020-02-09 12:04:38 · 182 阅读 · 0 评论 -
字节、字符
字符-->字节:编码;字节-->字符:解码。字节字节是计算存储容量的一种计量单位。计算机只能识别1和0组成的二进制位。一个数就是1位(bit),为了方便计算,我们规定8位就是一个字节。字符字符和字节不太一样,任何一个文字或符号都是一个字符,但所占字节不一定,不同的编码导致一个字符所占的内存不同。例如:标点符号+是一个字符,汉字我们是两个字符,在GBK编码中...原创 2020-02-09 12:04:24 · 283 阅读 · 0 评论 -
IO流
输入(Input)指的是:可以让程序从外部系统获得数据(核心含义是“读”,读取外部数据)。数据源data source:提供数据的原始媒介。原创 2020-02-09 12:04:16 · 103 阅读 · 0 评论 -
File
java.io.File类:代表文件和目录。文件和目录路径名的抽象表示形式。public class File01 { public static void main(String[] args) throws IOException { File f1=new File("a.txt");//相对路径:默认放到当前工程目录下面 f1.create...原创 2020-02-09 12:04:10 · 124 阅读 · 0 评论 -
反射
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。反射就是把java类中的各种成分映射成一个个的Java对象。例如:一个类有成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把各个组成部分映射成一个个对象。...原创 2020-02-09 12:04:15 · 200 阅读 · 0 评论 -
TreeSet
TreeSet将元素存储在红黑树(二叉树)数据结构中。TreeSet集合特点:排序和唯一。能够对元素按照某种规则进行排序,同时也保证元素的唯一。两种排序方式:自然排序、比较器排序。第一个元素存储的时候,直接作为根节点。从第二个开始,每个元素从根节点开始比较:大——就作为右孩子小——就作为左孩子相等——不搭理它1.自然排序1)让元素所属的类实现Co...原创 2020-02-09 12:04:09 · 168 阅读 · 0 评论 -
HashSet
HashSet:无序、唯一(不重复)。HashSet存储元素的顺序并不是按照存入时的顺序(和List显然不同), 是按照哈希值来存的,所以取数据也是按照哈希值取得。HashSet底层使用的数据结构为哈希表,也称散列。对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet 的实现比较简单,相关HashSet的操作,基本...原创 2020-02-09 12:04:04 · 195 阅读 · 0 评论 -
TreeMap
TreeMap是基于红黑树(一种自平衡的二叉查找树)实现的一个保证有序性的Map。排序:自然排序、比较器排序。TreeMap在进行put操作时,主要有以下步骤:(1)判断树是否是空的,如果是空的,直接将当前插入的k-v当做是根节点,完成了插入操作;(2)如果树不是空的,获取比较器(不管是自定义的比较器还是默认的比较器),对树从根节点开始遍历,(3)如果k小于结点的key,...原创 2020-02-09 12:03:57 · 137 阅读 · 0 评论 -
HashMap
在JDK1.6,1.7中,HashMap采用位桶+链表(数组加链表)实现,即使用链表处理冲突,同一hash值的数据都存储在一个链表里。但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低(链表过长)。而JDK1.8中,HashMap采用数组+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间。当添加一个元素(key...原创 2020-02-09 12:03:47 · 111 阅读 · 0 评论 -
Map
Map(也称关联数组)在每个槽内保存了两个对象,即键和与之关联的值。Map就是用来存储“键(key)-值(value) 对”的。Map打印出来的内容用大括号括住,键与值由等号联系(键在等号左边,值在等号右边)。对于每一个键,Map只接受存储一次。Map.put(key,value)方法将增加一个值(你想要增加的对象),并将它与某个键(用来查找这个值的对象)关联起来,可以通过键来查找对...原创 2020-02-09 12:03:31 · 627 阅读 · 0 评论 -
ArrayList
ArrayList底层使用数组保存元素。其操作基本上是对数组的操作。它擅长随机访问元素(查询效率高),但是在List的中间插入和移除元素时较慢(增删效率低),线程不安全。ArrayList的默认容量大小为10,如果添加元素后超过容量,则会创建一个新的数组,将原数组元素和新元素一起添加到新数组中,每次扩容为原来的1.5倍。扩容后的容量newCapacity如果仍然小于所需要的最小容量...原创 2020-02-08 11:52:57 · 213 阅读 · 0 评论 -
LinkedList
LinkedList底层用双向链表实现的存储。它通过代价较低的在List中间进行插入和删除操作(增删效率高),提供了优化的顺序访问。LinkedList在随机访问方面相对较慢(查询效率低),线程不安全。双向链表也叫双链表,是链表的一种,它的每个数据节点中都有两个指针,分别指向前一个节点和后一个节点。 所以,从双向链表中的任意一个节点开始,都可以很方便地找到所有节点。...原创 2020-02-08 11:52:48 · 153 阅读 · 0 评论 -
hashcode、equals
如果想查找一个集合中是否包含某个对象,通常的做法是逐一取出每个元素与要查找的对象一一比较,当发现两者进行equals比较结果相等时,则停止查找并返回true,否则,返回false。但是这个做法的一个缺点是当集合中的元素很多时,逐一的比较效率势必下降。于是有人发明了一种哈希算法来提高从该集合中查找元素的效率。这种方式将集合分成若干个存储区域,每个对象可以计算出一个哈希码,可以根据哈希码分组,每组...原创 2020-02-08 11:52:34 · 151 阅读 · 0 评论 -
迭代器
迭代器Iteartor接口中,有以下3个方法:1.hasNext()该方法检查序列中是否还有元素。2.next()获取迭代过的一个元素。3.remove() 移除迭代器返回的最后一个元素(将迭代器新近返回的元素删除)。只有当next执行完后,才能调用remove函数。1.比如你要删除第一个元素,不能直接调用remove(),而要先next一下;2.在没有先调...原创 2020-02-08 11:52:27 · 344 阅读 · 0 评论 -
容器(集合)
容器的接口层次结构图Set:Set中不区分元素的顺序(即使存放的类实现了compareTo方法,也是没用的),不允许出现重复的元素(用户自定义的类有的时候需要实现相应方法),TreeSet容器特殊,元素放进去的时候自然而然就有顺序了,Set容器可以与数学中的集合相对应:相同的元素不会被加入。List:List集合中区分元素的顺序,且允许包含重复的元素。List集合中的元素都对应一个整数...原创 2020-02-08 11:52:31 · 132 阅读 · 0 评论 -
多态
class Animal { //父类 public void shout() { System.out.println("叫了一声!"); }}class Dog extends Animal{ //子类 public void shout() { System.out.println("旺旺旺!"); }...原创 2020-02-08 11:52:25 · 336 阅读 · 0 评论 -
继承
如果定义一个Student类,发现已经有Person类包含了我们需要的属性和方法,那么Student类只需要继承Person类即可拥有Person类的属性和方法。继承是从已有类中派生出新的类,新的类能吸收已有类的属性和方法,并且能拓展新的属性和行为。继承可以提高代码的复用性,让类与类产生关联,是多态的前提。但是增加了耦合性,不符合高内聚,低耦合的原则。使用extends关键字实现类与...原创 2020-02-08 11:52:17 · 220 阅读 · 0 评论 -
数组
数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们。数组的三个基本特点: 1. 长度是确定的。数组一旦被创建,它的大小就是不可以改变的。 2. 其元素必须是相同类型,不允许出现混合类型。 3. 数组类型可以是任何数据类型,包括基本类型和引用...原创 2020-02-08 11:52:10 · 113 阅读 · 0 评论 -
快速排序
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序的平均时间复杂度为O(NlogN),是冒泡排序的一种改进版。方法:快速排序主要采用“二分”的思想,步骤如下:1) 设置两个变量i、j,排序开始的时候:i=0,j=n-1;...原创 2020-02-08 11:52:02 · 75 阅读 · 0 评论 -
二分查找
先将数据集合从小到大排列好,从中间一分为二,然后看所查value位于哪个部分(中间值等于value则结束),然后再进行分割,直到找到所查value。public class ErFenFa { public static void main(String[] args) { int[] arr={1,5,68,145,135,79,75,33,0,97,52,453,...原创 2020-02-08 11:52:50 · 68 阅读 · 0 评论 -
插入排序
工作原理:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。具体算法描述如下(从小到大排序):1.从第一个元素开始,第一个元素不进行改动,视为已排序序列;2.取出下一个元素,在已排序序列中从后往前扫描,与序列中元素进行比较;3.如果元素(已排序)大于新元素(要插入的元素),将该元素移到下一位置,新元素放在原来该元素的位置(交换两元素位置);...原创 2020-02-07 12:11:43 · 70 阅读 · 0 评论 -
选择排序
工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的后面。以此类推,直到所有元素均排序完毕。选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完...原创 2020-02-07 12:11:36 · 79 阅读 · 0 评论 -
冒泡排序
每次冒泡排序操作都会将相邻的两个元素进行比较,看是否满足大小关系要求,如果不满足,就交换这两个相邻元素的次序,然后继续往下进行大小比较。一次冒泡至少让一个元素移动到它应该排列的位置,重复N次,就完成了冒泡排序。拿第一个数和第二个数比较, 如果第一个比第二个大(此处按照从小到大排序)那么就换位置,如果小就不换。接下来拿第二个和第三个比较.....这样依次下去比到最后,就把这些数中最大的一个...原创 2020-02-07 12:11:15 · 91 阅读 · 0 评论 -
泛型的几个问题
1.Java中的泛型是什么 ? 使用泛型的好处是什么?泛型是一种参数化类型的机制。它可以使得代码适用于各种类型,从而编写更加通用的代码,例如集合框架。泛型是一种编译时类型确认机制。它提供了编译期的类型安全,确保在泛型类型(通常为泛型集合)上只能使用正确类型的对象,避免了在运行时出现ClassCastException。2.List<? extends T>和List ...原创 2020-02-07 12:11:05 · 127 阅读 · 0 评论 -
泛型通配符
在java泛型中,? 表示通配符,代表未知类型。< ? extends Object>表示上边界限定通配符;< ? super Object>表示下边界限定通配符。List<? extends Number> eList = null;eList = new ArrayList<>();Number numObject = e...原创 2020-02-07 12:11:17 · 73 阅读 · 0 评论 -
泛型
泛型的本质就是“数据类型的参数化”。 可以把“泛型”理解为数据类型的一个占位符(形式参数),即告诉编译器,在调用泛型时必须传入实际类型。public class FanXing01 { public static void main(String[] args) { //<String>表示泛型类型为String(类似实参),只接受String类型的参数...原创 2020-02-07 12:11:04 · 80 阅读 · 0 评论 -
throws、throw
如果一个方法可能会出现异常,但没有能力处理这种异常,可以在方法声明处用throws子句来声明抛出异常。throws语句用在方法定义时声明该方法要抛出的异常类型。多个异常可使用逗号分割。throw总是出现在方法体中,用来抛出一个Throwable类型的异常。异常是异常类的实例对象,我们可以创建异常类的实例对象通过throw语句抛出。抛出的既可以是异常的引用,也可以...原创 2020-02-07 12:10:58 · 167 阅读 · 0 评论 -
try/catch/finally
try{//可能产生异常的代码(监控区域)}catch(//异常类型+标识符){//捕获异常并处理它(异常处理程序)}如果try代码没有异常,执行完try所有代码,不执行catch里的代码。如果try里代码出现异常,try后续代码不执行。如果catch捕获的异常类型错误(异常类型不是catch()里的类型),那么程序崩溃。public class YiChang ...原创 2020-02-07 12:10:40 · 81 阅读 · 0 评论 -
异常
方法是否抛出异常与方法返回值的类型一样重要。假设方法抛出异常却没有声明该方法将抛出异常,那么程序员可以调用这个方法而且不用编写处理异常的代码。那么,一旦出现异常,那么这个异常就没有合适的异常控制器来解决。RuntimeException与Error可以在任何代码中产生,它们不需要由程序员显示的抛出,一旦出现错误,那么相应的异常会被自动抛出。遇到Error,程序员一般是无能为力的;遇到R...原创 2020-02-07 12:10:33 · 77 阅读 · 0 评论 -
垃圾回收
Java内存回收由Java虚拟机完成。垃圾回收的对象Java垃圾回收的对象很明确:没有引用指向的对象。对于这样的对象,JVM的一个系统级线程会自动删除它并释放该内存块,以便程序能够再次使用这块内存。垃圾回收的算法垃圾回收算法的基础是必须能够区分哪些是live objects,哪些是dead objects。通常的垃圾回收算法完成这个区分的方法是:从根出发可达的对象是现阶段仍...原创 2020-02-07 12:10:35 · 124 阅读 · 0 评论 -
内存(栈、堆)
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干不同的数据区域,这些区域都有各自的用途以及创建和销毁的时间。java虚拟机的内存可与分为栈、堆、方法区。堆是应用程序在运行的时候请求操作系统分配给自己内存,由于从操作系统管理的内存分配,所以在分配和销毁时都要占用时间,因此用堆的效率非常低。但是堆的优点在于,编译器不必知道要从堆里分配多少存储空间,也不必知道存...原创 2020-02-06 12:10:13 · 104 阅读 · 0 评论 -
接口
从接口的实现者角度看,接口定义了可以向外部提供的服务。从接口的调用者角度看,接口定义了实现者能提供哪些服务。在JDK8环境中,接口中的方法不再是只有抽象方法,可以有静态方法和default方法。所谓default方法是使用default关键字来修饰的方法。一个接口可以有多个静态方法和default方法,没有个数限制。对于静态方法,并没有特殊的地方,在接口中直接由接口名...原创 2020-02-06 12:10:05 · 84 阅读 · 0 评论