JavaSE
本专栏是本人重新学习javaSE的经验
yuan_boss
网络安全领域知识博主
展开
-
字符流(FileReader,FileWriter,BufferedReader,BufferedWriter)
字符流(FileReader,FileWriter,BufferedReader,BufferedWriter)字符流只能对纯文本进行操作,所以输出不会乱码,字符流又分为字符输输入流与字符输出流,他们的管道用法和字节流很相似字符流类:FileReader,FileWriter,BufferedReader,BufferedWriter对字符流字节流的感悟:字节流可以实现一切内容的传输,为什么还需要字符流呢?1.字节流是一个字节一个字节读取,读取汉字会出现乱码问题2.我们如果不知道文本文件的编码方原创 2021-06-09 17:01:11 · 316 阅读 · 0 评论 -
字节缓冲输出流(实现文件的快速复制)
字节缓冲输出流(BufferedOutputStream)实现文件的复制,实现逻辑:1.有水厂(源文件)2.铺设水厂到程序的管道3.铺设程序到目标抽象路径的管道4.创建一个小车5.打开水龙头(读取数据,卸货)注意:BufferedOutputStream类的write()方法的重载方法的第一个参数代表小车(一趟搬运的字节数),第二个参数表示小车的下标(0),第三个参数代表本趟搬运的字节数代码实现public class Test { public static void main(原创 2021-06-09 12:02:30 · 129 阅读 · 0 评论 -
字节缓冲输入流(BufferedInputStream)
字节缓冲输入流(BufferedInputStream)该类继承FilterInputStreamBufferedInputStream是一个比FileInputStream更粗的管道,该管道的构造方法的参数是InputStream类型的,所以在铺设该粗管道之前,应该先铺设一个InputStream类型的细管道,再将此细管道对象传入粗管道的参数之中输入准备:有个水厂,有小车BufferedInputStream输入逻辑:1.new一个InputStream类型的对象nputStream fis原创 2021-06-09 12:01:40 · 829 阅读 · 0 评论 -
通过IO流实现文件复制
IO流实现文件复制使用FileInputStream与FileOutputStream两个类文件复制实际上就是将一个文件从输入流管道(FileInputStream)一个个字节读取到程序,再通过输出流管道(FileOutputStream)将一个个字节写入目标文件IO流复制逻辑:1.有个水厂(数据/源文件)2.在水厂和程序之间铺设输入流管道3.在程序和目标文件之间铺设输出流管道4…打开输入流管道的水龙头(fis.read()),该read()方法返回整数5.再打开输出流管道的水龙头(fos.原创 2021-06-08 23:33:27 · 1890 阅读 · 0 评论 -
字节输出流(FileOutputStream)
字节输出流1.有水厂(数据)2.铺设管道(从水厂到指定文件的管道)3.输出数据,关流(调用write()方法,可以使用不同的重载方法)注意:1.在使用字节输出流时,如果指定的目标文件不存在,进行写入操作fos.write()时会自动创建该文件2.FileOutputStream类有包含两个参数的构造方法,第一个参数代表文件或者抽象路径,第二个参数为 是否追加的参数(boolean append),如果为false,则会覆盖原来的文件内容,如果为true,则会在原来文件内容末添加数据3.在进行写原创 2021-06-08 23:32:43 · 738 阅读 · 0 评论 -
字节输入流(FileInputStream)
字节输入流FileInputStream继承InputStream,所有后缀为InputStream的类都属于字节输入流做字节输入流的步骤:1.铺设管道2.确保有水厂,水厂里面有数据3.打开水龙头,fis.read()对输入流的理解:FileInputStream相当于一个管道,他的构造方法里面的参数相当于水厂,水厂里面有水(数据)如果不确定一个文件是否存在或者一个文件里面是否有数据,就使用FileInputStream中参数为File类型的构造方法,通过判断File对象是否存在文件(fil原创 2021-06-08 17:45:25 · 2700 阅读 · 0 评论 -
IO流之递归遍历文件夹(常考面试题,要求手写)
递归遍历文件夹(常考面试题)用递归遍历文件夹的时候,一定要注意空的文件夹是不能遍历的,如果遍历空文件夹就会报空指针异常:Exception in thread “main” java.lang.NullPointerException,所以在遍历时候需要进行非空条件的判断递归遍历的常用File方法:file.isDirectory():判断文件是否为文件夹file.listFiles():列出文件夹的所有文件递归逻辑:1.根据传入的抽象路径参数,判断文件是否问文件夹2.如果是文件夹,则列出该原创 2021-06-08 17:43:55 · 180 阅读 · 0 评论 -
IO流之File类查询方法(引发有关length()的面试题)
IO流之查询方法(引发有关length()的面试题)1.判断该抽象路径的文件是否存在:file.exists()2.查询文件名:file.getName(),包括后缀名3.查询文件路径:file.getPath(),绝对路径4.查询文件大小:file.length(),一个英文字母0字节,一个汉字3字节U(utf-8编码,如果是GB2312编码,则一个汉字2个字节)file.getName()file.getPath()file.length()根据File类的length()方法想到面试原创 2021-06-08 17:42:43 · 1034 阅读 · 0 评论 -
File类之添加与删除方法
File类之添加与删除方法File类实际上就是一个文件或文件夹的抽象,将文件或者文件夹的属性与方法操作抽取了出来属性:文件名,文件大小,文件位置方法:新建,删除,移动,查询File类里面有新建文件的方法,也有新建文件夹的方法在新建文件或者文件夹的时候,如果已经存在文件或文件夹,那么就不会创建,否则创建成功,创建文件或文件夹的时候有异常需要抛出或者捕获新建文件:file.createNewFile():新建文件夹:file.mkdir()新建多级文件夹:file.mkdirs()删除方法:原创 2021-06-08 17:36:29 · 495 阅读 · 0 评论 -
TreeMap的使用
TreeMap的使用TreeMap与TreeSet类似,也需要通过存储元素的对象类型实现Comparable接口进而重写compareTo方法来确定排序规则,存储结构也是红黑树,如果要在实例化TreeMap对象的时候确定排序规则,就实现Comparator接口(通过匿名内部类的方式来实现),Comparator实际上就是一个排序规则定制器/** * 存储结构:红黑树 */public class Test { public static void main(String[] args) {原创 2021-06-06 20:38:36 · 2153 阅读 · 0 评论 -
HashMap的使用
HashMap的使用HashMap和HashSet类似,不过HashMap存储的的键值对,他们的存储结构都是哈希值(数组+链表+红黑树),所以他们在确认元素是否重复时都必须重写equals与hashcode方法。JDK1.2版本开始出现,线程不安全,只用于单线程,运行效率快;允许使用null作为key或是valueStudent类(重写equals与hashcode方法)public class Student { private String name; private int a原创 2021-06-06 20:15:37 · 424 阅读 · 0 评论 -
Map集合的实现类
Map集合的实现类HashMap【重点】JDK1.2版本,线程不安全,运行效率快,允许用null作为key或valueHashtable:(不常用)JDK1.0版本,线程安全,运行效率满,不允许null作为key或valueProperties:Hashtable的子类,要求key和value都是String,通常用于配置文件的读取TreeMap:实现了SortedMap接口(是Map的子接口),可以对key自动排序...原创 2021-06-06 20:14:20 · 81 阅读 · 0 评论 -
Map接口使用
Map接口的使用Map:映射Map接口与Set,List接口的区别1.Map添加的元素对象是以键值对的形式存在的2.Map添加元素的方法是put(K key, V value),而不是使用add()方法Map接口的特点:(1)存储键值对(2)键不能重复,值可以重复(3)无序无下标如果添加了重复的键,那么值会被后面添加的值覆盖Map接口的重要方法1.Set<K> keySet():返回映射中的只包含键的Set集合2.Set<Map.Entry<K,V>>原创 2021-06-06 20:13:28 · 408 阅读 · 0 评论 -
TreeSet案例(使用Comparator)比较器
TreeSet案例要求:根据字符串长度进行排序使用Comparator接口进行定制排序规则因为Comparator接口不能被new,所以通过匿名内部类实现排序规则的定制注意:如果不使用匿名内部类,而是通过元素对象类型来实现定制排序规则的接口,则通过元素对象的类来实现Comparable接口,通过重写Comparable接口的compareTo()方法来定制排序规则代码实现/** * TreeSet案例 * 要求:使用TreeSet集合实现字符串按照长度进行排序 * Comparator接口原创 2021-06-06 20:12:17 · 247 阅读 · 0 评论 -
TreeSet的使用
TreeSet的使用TreeSet存储结构:红黑树TreeSet是SortedSet接口的实现类,TreeSet存储的对象类型必须实现comparable接口,从而确定排序规则,实现接口时可以使用泛型指定接口类型,comparable接口的compareTo()方法可以确定添加的对象元素是否重复,如果compareTo()方法返回0,则认为是重复元素,添加元素失败其中添加元素是无序的,但是会根据一定规则排序,比如根据添加的元素的首字母排序,数字大小排序如果TreeSet存储的对象类型没有实现Comp原创 2021-06-06 20:11:13 · 430 阅读 · 3 评论 -
HashSet的使用
HashSet的使用HashSet是Set接口的实现类特点:无序,无下标,不能重复的他是通过哈希表结构存储的,哈希表结构其实就是数组+链表+红黑树(JDK1.8之后)的结合HashSet存储元素的过程:他是如何判断所添加的元素是否重复呢,依据是什么?根据hashcode的值来计算保存的位置,如果此位置为空,则直接保存,如果不为空,执行第二步2.再执行equals方法,如果equals方法为true,则认为是重复,否则,形成链表因为HashSet要通过hashcode()与equals原创 2021-06-06 20:08:49 · 135 阅读 · 0 评论 -
Set接口的使用
Set接口的使用Set接口与Collection接口的使用差不多,都是有以下常用方法add(),remove(),clear(),contains(),isEmpty(),itrator()注意:因为Set集合是无下标,无序,不能重复的,所以遍历输出的结果可能与添加的顺序不同,添加重复元素会添加失败代码实现/** * 测试Set接口的使用 * 特点:无序,无下标,不能重复 */public class Test { public static void main(String[]原创 2021-06-06 20:08:03 · 103 阅读 · 0 评论 -
Set集合概述
Set集合概述Sets是Collection的子接口特点:无下标,无序,不可以重复方法:全部继承自Collection中的方法,本身没有定义方法Set接口的实现类HashSet【重点】 存储结构:数组+链表+红黑树 基于HashCode计算元素存放位置 当存入元素的哈希码相同时,会调用equals进行确认,如果结果为ture,则拒绝后者存入TreeSet 存储结构:红黑树 基于排列顺序实现元素不重复 实现了SortedSet接口,对集合元素自动排序 元素原创 2021-06-06 20:07:24 · 46 阅读 · 1 评论 -
ArrayList的使用
ArrayList的使用ArrayList是一个实现类,可以直接new一个对象特点:有序,有下标,可重复,所以可以遍历输出,使用列表迭代器可以实现逆向遍历在这边文章中重点就是重写equals方法 @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Student)) return false; Student原创 2021-06-05 17:28:16 · 120 阅读 · 0 评论 -
Java之泛型集合
泛型集合概念:参数化类型,类型安全的集合,强制集合元素的类型必须一致特点: 编译时即可检查,而非运行时抛出异常 访问时,不必类型转换(拆箱) 不同泛型之间引用不能相互赋值,泛型不存在多态总结:如果未使用泛型,泛型类型将会默认为Object类型,如果添加元素的时候既有字符串类型,又有整数类型,这个时候编译的时候不会报错,后面对这个集合进行遍历的时候如果是将Object类型的元素强制转换为字符串类型,但是因为整数类型不能转换为String类型,就会报错,即运行时抛出异常如以下代码未使用原创 2021-06-05 17:26:09 · 1107 阅读 · 0 评论 -
Java之泛型方法
泛型方法泛型方法的语法与泛型类,泛型接口不一样,泛型类与泛型接口的泛型类型放在类名或者接口名字的后面,但是泛型方法的泛型类型是放在方法返回值前面该类中其他方法不能使用前面的泛型方法的T,泛型方法T只对自己修饰的方法有用包含泛型方法的类/** * 泛型方法 * 语法:<T>+返回值类型 */public class MyGeneric { public <T> T show(T t){ System.out.println(t);原创 2021-06-05 17:25:31 · 134 阅读 · 0 评论 -
Java之泛型接口
泛型接口泛型接口和普通接口类型,定义的抽象方法没有方法体,也通常会把public abstract省略,定义常量也通常会省略public final static泛型接口/** * 泛型接口 * 语法:接口名<T> * 注意:不能泛型静态常量 * @param <T> */public interface MyIterface<T> { public final static String name = "yuan"; public ab原创 2021-06-05 17:24:44 · 4228 阅读 · 0 评论 -
Java之泛型类
泛型类泛型类/** * 泛型类 * 语法:类名 * T是类型占位符,表示一种引用类型,如果编写多个使用都好隔开,如:MyGeneric<T,T1,T2> * @param <T> */public class MyGeneric<T> { //使用泛型T //1.创建变量 T t; //2.泛型作为方法的参数 public void show(T t){ //T t1 = new T();原创 2021-06-05 17:23:53 · 76 阅读 · 0 评论 -
Java之泛型概述
泛型JDK泛型是JDK1.5中引入的一个新特性,其本质是参数化类型,把类型作为参数传递常见形式有泛型类、泛型接口、泛型方法语法: <T,…> T成为类型占位符,表示一种引用类型好处: (1)提高代码重用性(比如泛型方法,调用泛型方法的时候,类型我们不需要传递,方法的类型由我们传递的数据决定)类似于方法的重载/** * 泛型方法 * 语法:<T>+返回值类型 */public class MyGeneric { public <T> T原创 2021-06-05 17:23:02 · 93 阅读 · 1 评论 -
List实现类
List实现类如图所示为List的实现类:ArrayList(重点): 1.数组结构实现,必须开辟连续的空间,查询快,增删慢(因为数组是连续的空间,查询就更方便,但是增删慢,比如想要在数组开头插入元素,那么所有元 素都需要往后移动,数据量大的 时候耗时多) 2.JDK1.2版本,运行效率快,线程不安全对源码分析之后得出(分析add()方法):没有向集合中添加元素时,容量为0,添加一个元素之后,容量变为10,往后再添加元素容量变为之前的1.5倍Vector:(向量)原创 2021-06-05 17:21:55 · 63 阅读 · 0 评论 -
List接口的使用(2)
List接口的使用(2)List集合也是只能存储引用类型,不能存储基本数据类型,由于有了自动拆箱和装箱功能,基本数据类型和其对应对象(包装类)之间的转换变得很方便如果想把基本数据类型存入集合中,直接存就可以了,系统会自动将其装箱成包装类,然后加入到集合当中。List的常用方法:add():添加元素remove(): remove有以下重载方法 1.remove(Object o) 2.remove(int index) 如果要将数据直接移原创 2021-06-05 17:20:46 · 64 阅读 · 0 评论 -
List接口的使用(1)
List接口的使用(1)List接口的特点:有下标,有序,可以重复因为有下标,所以可以使用for循环进行遍历其中List接口有个列表迭代器ListIterator,这个迭代器可以向前向后遍历,添加,删除,修改元素List常用方法add(Object o):添加元素add(int index,Object o):添加元素到指定索引位置int size():返回元素个数remove():移除列表中的元素indexof():获取元素位置contains(Object obj):判断是否包含某个原创 2021-06-04 21:57:54 · 70 阅读 · 0 评论 -
Collection的使用(2):用集合存储对象
Collection的使用(2):用集合存储对象Collection也可以用来存储对象代码实现public class Test { public static void main(String[] args) { Collection collection = new ArrayList(); Student s1 = new Student("学生一", 20); Student s2 = new Student("学生二", 25);原创 2021-06-04 21:56:00 · 251 阅读 · 0 评论 -
Collection的使用(1)(用集合存储字符串)
Collection的使用(用集合存储字符串)Collection是一个接口,通过实现类来创建对象1.常用方法有add()、remove()、clear()、contains()、isEmpty()add(Object o):给集合添加该元素remove(Object o):给集合移除该元素clear():清空集合所有元素contains(Object o):判断集合中是否有该元素isEmpty():判断该集合是否为空2.迭代器(重点)Iterator是一个接口,该接口有以下方法:has原创 2021-06-04 21:55:02 · 332 阅读 · 0 评论 -
什么是集合
什么是集合一、集合概念:对象的容器,实现了对对象的常用操作,类似数组功能二、集合与数组的比较1.他们都是容器2.数组长度固定,集合长度不固定3.数组可以存储基本类型和引用类型,集合只能用来存储引用类型,如果需要集合来存储基本类型,则需要进行装箱操作,把基本类型转换为引用类型Collection体系集合[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4pX8Gi0N-1622814823000)(H:\Soft\Typora\JavaSE\Java进阶\集合框架\原创 2021-06-04 21:54:22 · 174 阅读 · 0 评论 -
System类
System类的常用方法操作System系统类,主要用于获取系统的属性数据和其他操作,构造方法是私有的以下是System类的常用静态方法static void arraycopy(...); 复制数组static long currentTimeMillis(); 获取当前系统时间,返回毫秒值static void gc(); 建议JVM启动垃圾回收器回收垃圾static void exit(int status); 退出jv原创 2021-06-02 23:35:44 · 50 阅读 · 0 评论 -
Java常用类有关日期的使用(Date、Calendar、SimpleDateFormat)
Date、Calendar、SimpleDateFormat的使用DateDate被Calendar取代了,Date的许多方法已经过时,只有一些老的程序还会使用Date其中Date的常用方法是toString()与toLocaleString()(已经过时,不过还可以继续使用)Date date = new Date();String string = date.toString();//Wed Jun 02 18:54:33 CST 2021String string1 = date.toLo原创 2021-06-02 19:34:29 · 129 阅读 · 0 评论 -
包装类(装箱与拆箱)
包装类(装箱与拆箱)包装类有八种,分别对应基本数据类型(Byte,Short,Boolean,Integer,Long,Float,Double,Character),这八种都继承了Number,下面以Integer为例基本数据类型所对应的引用数据类型如Integer(包装类),Integer类在对象中包装了一个基本类型int的值,Integer类型的对象包含一个int类型的字段,基本数据类型数据起初是在栈中的,包装类其实就是把基本数据类型包装成引用类型,进而将其放到堆中(实质就是将基本类型转成一个原创 2021-06-02 12:47:57 · 210 阅读 · 0 评论 -
StringBuffer与StringBuilder的特点与常用方法
StringBuffer与StringBuilder的特点与常用方法StringBuffer: 可变长字符串,JDK1.0提供,运行效率慢(相比StringBuilder),线程安全StringBuilder:可变长字符串,JDK5.0提供,运行效率快,线程不安全他们两个的功能几乎一样,唯一区别就是线程安全问题,StringBuffer实际上就是给String加了个Buffer缓冲区常用方法/** * append():追加 * insert(int offset,String str):从第原创 2021-05-31 17:33:55 · 132 阅读 · 0 评论 -
String的方法使用案例
String案例代码实现public class Test { public static void main(String[] args) { String str = "this is a text"; //1.将str中的单词单独提取出来 String[] arr = str.split(" "); for(String s:arr){ System.out.println(s); }原创 2021-05-30 21:20:19 · 72 阅读 · 0 评论 -
Java的String详解(涉及面试题与String底层原理)
Java的String详解1.字符串是常量,创建之后不可改变2.字符串字面值存储在字符串池中,可以共享3.String s = new String(“hello”);//产生两个对象,堆,池中各存储一个产生两个对象并不会浪费空间,因为实际上在真正运行的时候堆中的对象不存在“hello”,而是指向字符串池中的“hello”,使用的是字符串池中的对象通过下面的图来理解:触发面试题:public class Test { public static void main(String[]原创 2021-05-30 20:55:40 · 301 阅读 · 1 评论 -
Java包装类Integer缓冲区
Integer缓冲区1.Java预先创建了256个常用的整数包装类型对象,范围是(-128-127)2.在实际应用中,对已创建的对象进行复用,从而可以节省堆空间代码实现:public class Test { public static void main(String[] args) { Integer integer1 = new Integer(22); Integer integer2 = new Integer(22); System原创 2021-05-30 19:41:11 · 150 阅读 · 0 评论 -
包装类之类型转换
包装类之类型转换1.基本类型转换为字符串1.使用“+”号连接2.使用包装类的toString()方法,其中有一个重载方法toString(int i, int radix),第二个参数表示要转化的进制数2.字符串转换为基本数据类型1.字符串不能包含与要转换的基本类型不一致的东西,例如:如果要转化为整数,那么字符串中不能包含除数字以外的东西,否则会报NumberFormatException异常2.使用包装类的parseXXXX()方法3.boolean类型的话“true"–>true,非原创 2021-05-30 14:49:19 · 332 阅读 · 0 评论 -
Object类常用方法(getClass(),hashCode(),toString(),equals()...)
Object类常用方法1.getClass()package com.object.demo01;public class Student {}测试类package com.object.demo01;public class Test { public static void main(String[] args) { Student s1 = new Student(); Student s2 = new Student();原创 2021-05-29 17:37:02 · 118 阅读 · 0 评论 -
Java内部类
什么是内部类分类:内部类,成员内部类,静态内部类,局部内部类,匿名内部类概念:在一个类的内部再定义一个完整的类1.内部类:public class Outer { private String name; class Inner{ public void run(){ System.out.println(name);//内部类可以直接访问外部类的私有属性 } }}特点:1.编译之后可以生成独立的字节码文原创 2021-05-29 11:31:37 · 63 阅读 · 4 评论