JavaSE
文章平均质量分 80
JavaSE学习路线
Jayco江柯
你的幸运来源于平行宇宙
展开
-
反编译解析数组为什么可以使用foreach
一、说明foreach 循环遍历的原理是通过迭代器 Iterator,不断获取 next 元素,所以使用 foreach,编译的时候编译器会自动将对 for 这个关键字的使用转化为对目标的迭代器的使用我们常常认为,要想使用 foreach 循环遍历,就必须正确地实现 Iterable 接口,但是,你有没有想过,数组没有实现 Iterable 接口,为什么可以使用 foreach 语句循环遍历呢?这里我使用几个例子,以及进行Java反编译来说明数组这个特殊情况二、集合使用foreach首先,我们原创 2021-03-15 16:25:04 · 452 阅读 · 2 评论 -
JavaSE 反射——获取父类和父接口
Java自我学习路线获取父类和父接口获取父类和父接口获取父类xxx.getSuperclass();获取父接口xxx.getInterfaces();public class Test { public static void main(String[] args) throws Exception { Class class1 = Class.forName("java.util.ArrayList"); // JDK8测试 // 获取父类 Class s原创 2020-10-09 19:30:29 · 868 阅读 · 0 评论 -
JavaSE 反射——调用构造方法实例化对象
Java自我学习路线调用构造方法实例化对象调用构造方法实例化对象public class User { public int id; private String name; String address; protected int sno; public User() {} public User(int id, String name, String address, int sno) { super(); this.id = id; this.nam原创 2020-10-09 19:14:56 · 192 阅读 · 0 评论 -
JavaSE 反射——反编译Constructor
Java自我学习路线反编译Constructor反编译Constructorpublic class User { public int id; private String name; String address; protected int sno; public User() {} public User(int id, String name, String address, int sno) { super(); this.id = id; th原创 2020-10-09 18:57:11 · 111 阅读 · 0 评论 -
JavaSE 反射——使用反射调用方法
Java自我学习路线一、使用反射调用方法二、invoke()1. 实现原理一、使用反射调用方法四关键对象方法名实参列表返回值public class User { public int id; private String name; String address; protected int sno; public User() {} public User(int id, String name, String address, int sno) {原创 2020-10-09 16:21:09 · 218 阅读 · 0 评论 -
JavaSE 反射——获取及反编译Method
Java自我学习路线获取Method1. 常用方法2. 测试用例获取Method继承的方法Method无法反射,会被编译器强制执行,因此反射一个类的方法时不考虑父类的方法,只考虑当前类的方法1. 常用方法参考:Method 类常用方法Class.getMethod(String name,Class…parameterTypes);根据方法名称和相关参数,来定位需要查找的Method对象并返回,parameterTypes:Method的参数类型的列表(参数顺序需按声明Method时的参数原创 2020-10-09 14:46:12 · 164 阅读 · 0 评论 -
JavaSE 反射——可变长参数
Java自我学习路线可变长参数可变长参数JDK5提供了可变长参数语法类型...可变长参数要求的参数个数是:0~N个可变长参数只能有1个,且必须在参数列表中的最后一个位置上如果同时能匹配固定参数和可变长参数的方法,会优先匹配固定参数方法可变长参数可以当做一个数组来看待public class Test { public static void main(String[] args) { l(); l(1); l(3,34); z(0); z(2, "lv原创 2020-10-09 13:05:38 · 179 阅读 · 0 评论 -
JavaSE 反射——访问对象属性
Java自我学习路线访问对象属性测试用例访问对象属性给属性赋值,使用set方法获取属性值,使用get方法私有属性无法直接访问,需要打破封装(反射的缺点),setAccessible(true)测试用例public class User { public int id; private String name; String address; protected int sno; public User() {} public User(int id, Str原创 2020-10-09 11:32:40 · 101 阅读 · 0 评论 -
JavaSE 反射——获取及反编译Field
Java自我学习路线FieldField原创 2020-09-20 22:49:33 · 166 阅读 · 0 评论 -
JavaSE 反射——类加载机制
Java自我学习路线一、类加载机制二、类加载过程1. 加载2. 验证3. 准备4. 解析5. 初始化5.1 类加载器初始化过程5.2 类加载进内存后不一定会初始化,触发类加载器主动初始化方式5.3 类初始化步骤5.3.1 无父类5.3.2 有父类三、类加载器1. 引导类加载器2. 扩展类加载器3. 应用程序类加载器4. 自定义加载器四、双亲委派机制1. 设计双亲委派机制的原因2. 解析ClassLoader的loadClass方法中的双亲委派机制一、类加载机制当我们用Java命令运行程序时,首先需要通原创 2020-09-10 19:40:43 · 201 阅读 · 0 评论 -
JavaSE 反射——获取路径
Java自我学习路线一、获取路径的方式一、获取路径的方式路径的选择是必要的,同时我们也需要保证路径的可移植性,所以我们应该使用一种通用的路径方式来完成需求使用通用方式的前提:文件必须在类路径下,类路径即src(src是类的根路径)语法格式String path = Thread.currentThread().getContextClassLoader().getResource("以src为根的路径名").getPath();Thread.currentThread() :当前线程对象原创 2020-09-10 14:36:05 · 796 阅读 · 0 评论 -
JavaSE 反射——实例化对象
Java自我学习路线一、实例化对象1. 直接通过反射实例化对象newInstance()2. 通过读属性文件实例化对象一、实例化对象使用反射机制创建对象比使用 new 创建对象更加灵活,因为可以在不改变Java源代码的基础之上,做到不同对象的实例化(获取的Class或属性配置文件可以是任何类型,可以任意修改),符合OCP开闭原则:对扩展开放,对修改关闭1. 直接通过反射实例化对象newInstance()创建一个类,通过类的 newInstance() 方法来实例化对象,JDK9之后 new原创 2020-09-10 11:29:08 · 220 阅读 · 0 评论 -
JavaSE 反射——反射概述及获取字节码的方式
Java自我学习路线一、反射概述二、获取java.lang.Class实例的方式1. Class.forName()2. getClass()3. .class属性一、反射概述通过Java中的反射机制可以操作(读和修改)字节码文件(.class文件),反射机制的相关类存在于java.lang.reflect.*包下几个重要的反射机制的相关类java.lang.Class:代表整个字节码(代表一个类型、整个类)java.lang.reflect.Method:代表字节码中的方法字节码(代表类中的方原创 2020-09-10 01:09:48 · 253 阅读 · 0 评论 -
JavaSE 多线程——wait、notify与生产者与消费者模式
Java自我学习路线一、简单概述二、wait()1. wait()和Thread.sleep()的比较三、notify()四、生产者和消费者模式一、简单概述在Java中,任何一个Java对象都有wait和notify方法,wait和notify方法不是线程对象的方法,不通过线程对象调用wait与notify是本地方法,并且被 final 修饰,无法被重写,建立在synchronized线程同步的基础上二、wait()调用某个对象的wait() 方法能让当前线程处于等待状态,并将当前线程置入锁原创 2020-09-09 22:01:48 · 289 阅读 · 0 评论 -
JavaSE 多线程——定时器
Java自我学习路线一、定时器概述二、定时器的实现方式三、Timer1. 构造方法1.1 无参构造方法1.2 有参构造方法四、TimerTask五、schdule六、scheduleAtFixedRate一、定时器概述间隔特定的时间,执行特定的程序二、定时器的实现方式使用sleep() 方法,设置睡眠时间,在某个时间点唤醒执行相关执行(相当于原始定时器,不怎么用)Java中的类库:java.util.Timer,用于Java线程里指定时间或周期运行任务,Timer是线程安全的,但不提供实时性原创 2020-09-09 15:12:22 · 209 阅读 · 0 评论 -
JavaSE 多线程——守护线程
Java自我学习路线守护线程测试用例守护线程Java中形成分为两大类:用户线程与守护线程主线程main方法是一个用户线程守护线程可以理解为后台线程,比较有代表性的是垃圾回收线程守护线程的特点守护线程一般是一个死循环,所有的用户线程只要结束,守护线程自动结束使用 setDaemon() 设置守护线程的开闭,true是打开守护线程,false是关闭守护线程测试用例public class ThreadTest { public static void main(String[] args原创 2020-09-09 08:39:54 · 178 阅读 · 0 评论 -
JavaSE 多线程——线程安全
Java自我学习路线一、产生线程安全问题的条件二、解决线程安全问题三、线程同步1. 同步编程模型2. 异步编程模型3. synchronized3.1 语法格式3.1.1 同步代码块3.1.2 在实例方法上使用synchronized3.1.3 在静态方法上使用synchronized四、Java中变量的线程安全性一、产生线程安全问题的条件多线程并发有共享数据共享数据有修改的行为二、解决线程安全问题使用线程同步机制,即线程排队执行,不能并发线程同步会降低部分效率,但数据安全才是第一位的,原创 2020-09-08 21:59:42 · 314 阅读 · 0 评论 -
JavaSE 多线程——线程调度
Java自我学习路线线程调度一、抢占式调度模型二、均分式调度模型三、线程调度相关方法1. setPriority()2. getPriority()2.1 线程优先级2.2 测试用例3. yield()4. join()线程调度一、抢占式调度模型优先级较高的线程抢到CPU时间片的概率就高,优先级相同就随机选择一个线程使其占用CPUJava采用的是抢占式调度模型二、均分式调度模型平均分配CPU时间片,每个线程占有的CPU时间片长度一样三、线程调度相关方法1. setPriority()原创 2020-09-08 19:14:50 · 179 阅读 · 0 评论 -
JavaSE 多线程——线程阻塞之sleep
Java自我学习路线线程阻塞之sleep面试题终止线程的睡眠终止线程的执行1. stop()2. 使用布尔标记线程阻塞之sleep静态方法 static void sleep(long millis),参数是毫秒作用:让当前线程进入休眠,进入“阻塞状态”,放弃占有CPU时间片,让给其它线程使用;间隔特定的时间,去执行一段特定的代码public class ThreadTest { public static void main(String[] args) { // 让当前线程(主线程原创 2020-09-08 14:04:19 · 538 阅读 · 0 评论 -
JavaSE 多线程——设置、获取线程的名称与获取线程当前对象
Java自我学习路线设置、获取线程的名称与获取线程当前对象一、setName()二、getName()三、currentThread()测试用例设置、获取线程的名称与获取线程当前对象一、setName()修改线程对象的名称 线程对象.setName("线程名称");二、getName()获取线程对象的名称String name = 线程对象.getName();当线程没有设置名称时,默认名称为:Thread-0Thread-1Thread-2Thread-3…三、原创 2020-09-08 10:54:06 · 193 阅读 · 0 评论 -
JavaSE 多线程——概述、多线程的创建、启动、生命周期
Java自我学习路线多线程概述一、进程1. 进程的特征1.1 动态性1.2 并发性1.3 独立性1.4 异步性二、管程1. 管程的特征1.1 模块化1.2 抽象数据类型1.3 信息掩蔽2. 管程和进程的区别三、线程1. 线程的特征1.1 调度的基本单位1.2 并发性1.3 拥有资源1.4 独立性1.5 系统开销1.6 支持多处理机系统四、Java中线程的描述1. 实现线程的两种方式1.1 继承Thread类,重写run()方法1.2 实现Runnable接口,实现run()方法2. 线程的生命周期多线程概原创 2020-09-06 17:21:55 · 340 阅读 · 0 评论 -
JavaSE IO与Properties联合使用
Java自我学习路线IO与Properties联合使用测试用例.properties文件的创建类的创建IO与Properties联合使用设计理念:经常改变的数据,可以单独写到一个文件中,使用程序动态读取,将来只需要修改这个文件的内容,源代码不需要改动,不需要重新编译,服务器也不需要重启,就可以拿到动态的信息类似于以上机制的这种文件被称为配置文件配置文件中的内容格式是key value格式的时候,则把这种配置文件叫做属性配置文件Java规范中要求属性配置文件建议以.properties结尾,但这原创 2020-09-06 14:18:07 · 151 阅读 · 0 评论 -
JavaSE ObjectOutputStream与ObjectIntputStream(序列化对象流与反序列化对象流)
Java自我学习路线一、序列化与反序列化二、ObjectOutputStream(序列化对象流)1. 序列化步骤三、ObjectInputStream(反序列化对象流)1. 反序列化步骤四、Serializable接口序列化版本号五、测试用例1. 序列化单个对象2. 序列化多个对象(序列化集合)一、序列化与反序列化序列化:把对象转换为字节序列存储于磁盘或者进行网络传输的过程称为对象的序列化(对象->流数据)。Java提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序原创 2020-09-06 13:27:01 · 253 阅读 · 0 评论 -
JavaSE File之拷贝目录
Java自我学习路线一、File之拷贝目录一、File之拷贝目录import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class Copy { public static void main(String[] args) { // 拷原创 2020-09-06 00:30:10 · 206 阅读 · 0 评论 -
JavaSE File(文件类)
Java自我学习路线一、File(文件类)概述二、File类中的方法1. 创建2. 删除3. 判断4. 获取5. 文件夹相关三、常用方法测试用例一、File(文件类)概述File类和四大IO流没有关系,所以File类不能完成文件的读和写File对象代表文件和目录路径名的抽象表示形式,如C:\Program Files\Java\jdk1.8.0_131\bin,主要用于文件和目录的创建、文件的查找和文件的删除等,一个File对象有可能对应的是目录,也可能对应的是文件,所以File只是一个路径名的抽象原创 2020-09-05 19:39:07 · 813 阅读 · 0 评论 -
JavaSE PrintWriter(标准字符输出流)
Java自我学习路线PrintWriter(标准字符输入流)一、特点二、PrintWriter执行原理三、测试用例PrintWriter(标准字符输入流)一、特点PrintWriter实现了PritnStream的所有print方法可以按行写出字符串,并且可以自动行刷新PrintWriter通过连接BufferedWriter(字符输出缓冲流,内部有缓冲区可以进行块写操作提供效率)实现缓冲功能二、PrintWriter执行原理对于PrintWriter,所有println方法都在内部调用原创 2020-09-05 16:30:49 · 352 阅读 · 0 评论 -
JavaSE PrintStream(标准字节输出流)
Java自我学习路线PrintStream(标准字节输出流)一、特点二、PrintStream执行原理三、测试用例PrintStream(标准字节输出流)一、特点使用OutputStream输出数据,需要将数据变为字节数组输出,使用起来不方便,为了解决使用OutputStream输出数据的不足,Java提供了一套专门输出数据的类PrintStream(标准字节输出流)和PrintWriter(标准字节输入流),这种设计模式,在Java中叫装饰模式,相当于将一个功能不足的操作类,通过某些类的包装,形成原创 2020-09-05 10:54:59 · 242 阅读 · 0 评论 -
JavaSE DataInputStream与DataOutputStream(数据字节输入/输出流)
Java自我学习路线数据流一、DataOutputStream(数据字节输出流)二、DataInputStream(数据字节输入流)数据流一、DataOutputStream(数据字节输出流)DataOutputStream数据字节输出流可以将数据连同数据的类型一并写入文件,但这个文件不是普通文本文档,即无法使用记事本打开(打开乱码)import java.io.DataOutputStream;import java.io.FileOutputStream;public class Da原创 2020-09-05 00:23:36 · 336 阅读 · 0 评论 -
JavaSE BufferedWriter(字符输出缓冲流)
Java自我学习路线缓冲流BufferedWriter(字符输出缓冲流)构造方法1. BufferedWriter(Writer out)2. BufferedWriter(Writer out, int sz)测试用例缓冲流缓冲流主要是为了提高效率而存在的,减少物理读取次数,缓冲流主要有:BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter由于涉及磁盘的IO操作相比内存的操作要慢很多,所以不带缓冲的流效率很低,原创 2020-09-04 18:22:03 · 231 阅读 · 0 评论 -
JavaSE BufferedReader(字符输入缓冲流)
Java自我学习路线缓冲流BufferedReader(字符输入缓冲流)构造方法1. BufferedReader(Reader in)2. public BufferedReader(Reader in, int sz)测试用例缓冲流缓冲流主要是为了提高效率而存在的,减少物理读取次数,缓冲流主要有:BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter由于涉及磁盘的IO操作相比内存的操作要慢很多,所以不带缓冲的流原创 2020-09-04 18:08:39 · 241 阅读 · 0 评论 -
JavaSE 使用FileReader与FileWriter完成文件复制
Java自我学习路线使用FileReader与FileWriter完成文件复制使用FileReader与FileWriter完成文件复制使用FileReader与FileWriter完成文件复制,只能复制“普通文本”文件import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class Copy {原创 2020-09-01 23:07:05 · 209 阅读 · 0 评论 -
JavaSE FileWriter(文件字符输出流)
Java自我学习路线FileWriterFileWriter文件字符输出流,写只能输出普通文本import java.io.FileWriter;import java.io.IOException;public class FileWriterTest { public static void main(String[] args) { FileWriter out = null; try { // 创建文件字符输出流对象 // out = new FileWrit原创 2020-08-31 21:52:47 · 172 阅读 · 0 评论 -
JavaSE FileReader(文件字符输入流)
Java自我学习路线FileReader一、测试用例FileReader文件字符输入流,只能读取普通文本读取文本内容时,比较方便,快捷字符输入流的使用步骤:创建FileReader对象,构造方法中绑定要读取的数据源使用FileReader对象中的方法read读取文件释放资源读取字符:read方法,每次可以读取一个字符的数据,提升为int类型,读取到文件末尾,返回-1,循环读取使用字符数组读取:read(char[] cbuf),每次读取b的长度个字符到数组中,返回读取到的有效字符原创 2020-08-31 20:54:44 · 149 阅读 · 0 评论 -
JavaSE 使用FileInputStream与FileOutputStream完成文件复制
Java自我学习路线FileInputStream与FileOutputStream完成文件复制FileInputStream与FileOutputStream完成文件复制复制的过程是一边读,一边写使用FileInputStream与FileOutputStream字节流复制文件的时候,文件类型随意import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStrea原创 2020-08-31 19:56:39 · 258 阅读 · 0 评论 -
JavaSE FileOutputStream(文件字节输出流)
Java自我学习路线FileOutputStreamFileOutputStream文件字节输出流,负责写从内存到硬盘在D:\Test文件下创建fosTest文件,向fosTest文件写,如果文件不存在则会自动新建java.io.FileOutputStreamFileOutputStreamimport java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;原创 2020-08-31 18:52:50 · 446 阅读 · 0 评论 -
JavaSE FileInputStream(文件字节输入流)
Java自我学习路线FileInputStream一、java.io.FileInputStream1. 测试用例初步(开发不用)2. 测试用例改进3. 测试用例最终(掌握)二、FileInputStream类的其它常用方法1. int available()2. long skip(long n)FileInputStream一、java.io.FileInputStream文件字节输入流,任何类型的文件都可以采用这个流来读以字节的方式,完成输入的操作,完成读的操作(硬盘—> 内存)1原创 2020-08-31 17:52:18 · 218 阅读 · 0 评论 -
JavaSE IO流概述
Java自我学习路线一、什么是IO二、IO流的分类三、四大Java IO流四、java.io包下16个掌握的流一、什么是IOI : InputO : Output通过IO可以完成硬盘文件的读和写二、IO流的分类一种方式是按照流的方向进行分类:以内存作为参照物往内存中去,叫做输入(Input),或者叫做读(Read),是输入流(InputStream)从内存中出来,叫做输出(Output),或者叫做写(Write),是输出流(OutputStream)一种方式是按照读取数据方式不同进原创 2020-08-31 14:00:00 · 323 阅读 · 0 评论 -
JavaSE Map接口(HashMap、LinkedHashMap、HashTable、Properties、TreeMap)
Java自我学习路线一、Map1. Map概述一、Map1. Map概述Map集合与Collection集合没有关系Map是具有映射关系的集合,以key-value键值对的方式存储元素,其中key起决定性作用,所有Map集合的key都是无序不可重复的(和Set集合存储元素特点相同),且key与value是一一对应的,所以不能存在相同的key值,但value可以相同key和value都是存储Java对象的内存地址...原创 2020-08-20 09:03:50 · 371 阅读 · 0 评论 -
JavaSE Set接口(HashSet、LinkedHashSet、TreeSet)
Java自我学习路线一、HashSet概述二、HashSet的构造方法1. 无参构造方法2. 有参构造方法三、HashSet常用方法1. add方法2. remove方法四、LinkedHashSet概述一、HashSet概述继承关系:HashSet->AbstractSet->AbstractCollection->Collection->Iterable(接口)HashSet是Java集合Set的一个实现类,Set是一个接口,其实现类除HashSet之外,还有TreeS原创 2020-08-10 14:43:32 · 1465 阅读 · 0 评论 -
JavaSE Iterator
Java自我学习路线一、Iterator概述二、Iterator的使用1. Iterator底层源码2. iterator() 底层源码3. 迭代/遍历4. NoSuchElementException异常5. ConcurrentModificationException异常三、ListIterator一、Iterator概述Iterator 接口主要用于遍历Collection集合中的元素,Iterator对象也被称为迭代器(一种设计模式)Iterator 仅用于遍历集合,本身并没有盛装对象的能原创 2020-08-06 20:13:02 · 171 阅读 · 0 评论