![](https://img-blog.csdnimg.cn/54981ecb7f984ebb915f49072de39f2e.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java语言基础学习
文章平均质量分 86
1~18节为Java语言基础学习
19~为进阶内容,学习进阶内容需要关注博主,请理解,博客配套代码均在博客最后的gitee仓库链接中,如果博客存在描述不清楚的地方可随时私信我,我会尽快为你解答
程序员小牧之
汲取,分享与成长,我们唯一能做的就是坚持。
展开
-
37.Java进阶之实现动态编译
我们可以编写自己的用于特殊目的的类加载器,这使得我们可以在向虚拟机传递字节码之前执行定制的检查。例如我们可以编写一个类加载器,它可以拒绝加载没有标记为 piadfor的类。如果要编写自己的类加载器,只需要继承ClassLoader类,然后覆盖这个类的findClass方法:ClassLoader的loadClass方法用于将类的加载操作委托给其父类加载器进行,只有当该类尚未加载并且父类加载器也无法加载该类时,才调用findClass方法。try {原创 2023-03-09 19:00:00 · 1932 阅读 · 0 评论 -
36.Object中equals和toStirng 源码分析
我们都知道Object是所有类的父类,那么它里面的一些方法你是否真的理解了呢?下面我们就以源码为基础来学习这些看似简单的方法吧!!原创 2022-11-22 09:40:55 · 385 阅读 · 0 评论 -
35.Java异常处理机制学习(基本概念及用法)
程序员的理想世界中,用户输入的数据的格式永远都是正确的,选择文件都是存在的,代码永远不会出现bug。但在现实世界中,却往往充满了不良的数据和有问题的代码,而这些问题产生的结果我们称之为异常,英文名为Excepiton。原创 2020-11-23 16:25:50 · 407 阅读 · 1 评论 -
34. Java字符串之码点和代码单元
其实在Java中String类中维护的是一个char类型的数组,就是说字符串底层上来说还是char序列,也就是字符序列。原创 2020-10-18 18:43:47 · 1482 阅读 · 0 评论 -
33. Java进阶之Scanner类学习(基本概念,常见用法)
其实这个类并不是一个输入类,只是我们初学的人把它的一种用法作为输入方法而已,从字面意思上来理解,它应该是个扫描类。Java 8 API这样解释Scanner类:一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串。原创 2020-06-04 09:15:13 · 1297 阅读 · 0 评论 -
32.1 Java进阶之注解概念,工作原理
如果使用过Spring做开发,相信对注解并不陌生,相信大家都用过@Resource,@Autowired注解,通过将@Resource这个注解修饰一个类,Spring会自动这个类进行对象创建,通过@Autowired修饰一个变量,Spring会将这个变量赋值为相应的类的对象引用。这样我们就能将类的对象的管理交给Spring来进行管理,方便自己的开发工作。所以,我们可以把注解看作一种标记工具,通过这种工具,我们能开发出一些框架级别的东西来帮助我们提高编程效率。我们可以拿它和泛型进行类比。原创 2022-11-14 20:19:13 · 368 阅读 · 0 评论 -
31.3 Java进阶之lambda方法引用
但有咩有什么方法可以直接把println方法传递到Timer构造器呢?有时我们可能已经有现成的方法可以完成你想要传递到其他代码的某个动作。其中object是类的实例,instanceMethod为实例方法。有时候,我们希望能够在lambda表达式中访问外围方法或类中的变量。例如:假设我们只希望只要出现一个定时器事件就打印这个事件的对象。例如:Person::new 是Person构造器的引用。构造器引用与方法引用很类似,只不过方法名为new。第三种情况中,第一个参数会成为方法的目标。原创 2022-11-11 22:30:00 · 666 阅读 · 0 评论 -
31.2 Java进阶之lambda函数式接口
对于只有一个抽象方法的接口,需要这种接口的对象时,就可以提供一个lambda表达式替代对象,这样的接口我们称之为函数式接口(functional interface)。(有的接口可能重新声明Object类的方法,这些声明可能会让方法不再是抽象的,且在javaSE8中,接口可以声明非抽象方法)原创 2020-05-25 12:03:46 · 879 阅读 · 0 评论 -
31.1 Java进阶之lambda表达式基本概念,语法
lambda表达式是一个可传递的代码块,可以在以后执行一次或多次,也就是说,它能让我们无需新建类就能定义方法并执行,得到我们想要的参数。i < 10;i ++) {}其中() -> {i < 10;i ++) {} }这部分就是一个lambda表达式的代码块,他能直接作为参数传入方法中,而不用去建一个类,然后创建类的实例去传入方法中。lambda表达式能让编程更加简洁。原创 2020-05-24 21:03:14 · 186 阅读 · 0 评论 -
30.3 Java进阶之使用反射编写数组CopyOf方法,调用任意方法
总结自《Java核心技术卷Ⅰ》原创 2020-05-12 14:02:33 · 363 阅读 · 0 评论 -
30.2 Java进阶之反射查看属性的值,查看任意对象的内部信息
如果field是一个Field类型的对象,obj是某个包含field的类的对象,则field.get(obj)将返回一个对象,其就是obj名为field.getName()的属性的当前值。除此之外我们还可以调用field.set(obj,value);通过上面的学习,我们可以使用反射机制来写出通用的toString程序来打印出任意对象的所有的属性值信息。利用反射机制可以查看在编译时还不清楚的对象域,就是具体运行时才能获取到的属性的值。可以再程序运行时获取对象属性值,其中的关键是Field类中的get方法。原创 2020-05-12 09:03:03 · 607 阅读 · 0 评论 -
30.1 Java进阶之反射概念,反射作用,Class类,程序运行时分析类的能力
在java核心技术中的定义是:使用反射机制编写的程序是能够分析类能力的程序。Java反射的内容主要在java.lang.reflect包中。原创 2020-05-11 14:53:11 · 254 阅读 · 0 评论 -
29.3 Java进阶之通过网络传输对象
本篇文章主要展示了如何使用Java通过网络传输对象。原创 2020-04-30 19:14:06 · 522 阅读 · 1 评论 -
29.2 Java进阶之网络InetAddress类,多线程网络编程
除此之外,还可以使用静态方法getByName通过主机名或IP地址创建一个InetAddress的实例。服务器程序可以使用InetAddress类来获得对方端的IP地址和主机名字等信息。while循环的每次迭代监听成功后创建一个新连接和新线程。我们可以使用线程处理服务器上多个客户端的同时访问。原创 2020-04-29 18:51:30 · 513 阅读 · 0 评论 -
29.1 Java进阶之网络IP,DNS,TCP,UDP,客户端服务器通信过程,套接字
IP是一种互联网协议地址,用它我们可以唯一的标识互联网上的计算机。它由四段用点隔开的0~225的十进制数组成,例如:130.254.204.31。原创 2020-04-29 13:09:41 · 605 阅读 · 0 评论 -
28.3 Java进阶之线程信号量,避免死锁
信号量指的是对共同资源进行访问控制的对象。在访问资源之前,线程必须从信号量获取许可,访问完之后,将许可归还给信号量。流程如图:这样有助于资源的正确的有效利用,也能保证资源数据的安全性。同步集合就是线程安全的集合,我们可以将同步集合使用在多线程编程上,无需对其进行同步编程(无需考虑锁的问题)前面学习Java合集框架的类并不一定是线程安全的,就是说如果它们同时被多个线程访问和更新可能会破坏其数据。那么怎么保证集合中数据的安全性呢?这时候我们可以通过Collections来保护合集中的数据。原创 2020-04-29 10:18:16 · 335 阅读 · 1 评论 -
28.2 Java进阶之线程间协作,生产者消费者Demo,阻塞队列
然后我们可以使用这个条件对象的await(),signal(),signalAll()方法来实现线程之间的通信,让线程获得锁的利用率最大化。当线程进入临界区后却发现只有满足某个条件之后才能往下执行,这时我们可以使用一个条件对象来管理那些已经获得了一个锁却不能做有用的工作的线程。我们可以用条件对象让线程在执行到一半时进入等待阻塞状态,其他线程可以通过条件对象来等待阻塞的线程。让这个线程进入阻塞状态并释放锁,让锁资源能及时的被其他线程使用,当if条件满足后,其他线程会使用。原创 2020-04-28 15:05:41 · 220 阅读 · 0 评论 -
28.1 Java进阶之线程的概念,创建线程和任务,Thread类,线程池,线程同步,锁同步
我们写一段程序,然后运行这段程序,当我们运行这段程序,实际上就启动了一个线程,也就是说线程是运行代码程序的单位。而这个代码程序,就是一个任务。线程本质上讲就是执行任务的对象,如果把线程比作一台打印机,那么任务就是一份需要打印的文档。线程提供了运行一个任务的机制,对于Java, 可以在一个程序中并发地启动多个线程,这些线程可以同时运行。本节主要学习如何使用Java语言编写多线程程序。在Java中定义一个任务就是定义实现Runnable接口的一个类(Runnable中只有一个run方法)原创 2020-04-27 17:56:37 · 432 阅读 · 0 评论 -
27.7 Java集合Deque学习(双端队列)
有时,根据经验也会判断失误,事实上,Jdk里并没有一个名为AbstractDeque的抽象类哈哈哈。猜测归猜测,我们还是要实事求是的去验证。不过,我们好像有了意外发现,除了ArrayDeque外,LinkedList也实现了Deque接口哦。原创 2022-10-29 10:55:52 · 1049 阅读 · 0 评论 -
27.6 Java集合之Queue学习(Queue接口,PriorityQueue)
果然,JDK对于Queue接口提供了一些基础实现,这个类的实现的方法不多。原创 2022-10-28 09:55:56 · 806 阅读 · 0 评论 -
27.5 Java集合之Set学习(基本概念,存储原理,性能测试)
当进行add(E e)的时候,就会向map中put(e,Object常量),如果返回的是null,则表示添加成功,如果返回的不是null,则表示Map中已经存在键值对,添加失败。当进行add(E e)的时候,就会向map中put(e,Object常量),如果返回的是null,则表示添加成功,如果返回的不是null,则表示Map中已经存在键值对,添加失败。简单来说,TreeSet也是借助TreeMap来进行存储的,TreeMap是Map的有序实现,它会根据键的顺序将元素组织为一个搜索树。原创 2022-10-27 19:00:00 · 1076 阅读 · 0 评论 -
27.4 Java集合之Map学习
从上面我们可以看到,如果我们想得到包含键值对的集合对Map进行遍历,我们可以对Map.Entry来进行操作。下面我们就来学习一下Map中对于Entry的定义在Jdk中,和Collection体系一样,也提供了抽象类AbstractMap,其中包含了一些可复用的代码,方便在编写具体实现类时不做重复的工作。我们可以参考它的实现来学习如何去实现一个Map我们可以看一下其中的一些实现方法。原创 2022-10-21 19:43:08 · 802 阅读 · 0 评论 -
27.3 Java集合学习之List(基本概念,API,存储原理)
LinkedList 采用链表存储,如果是在头尾插入或者删除元素不受元素位置的影响(add(E e)、addFirst(E e) addLast(E e)、removeFirst()、 removeLast()),时间复杂度为 O(1),效率非常好。也就是说List接口是在Collection接口的基础上衍生出来的具体的链表数据结构的接口,在Java集合中,链表数据结构类都必须要实现List接口。它的关键操作方法都是同步的,这使得线程安全,但是性能不好。但是,在多线程的情况下它的性能下降的还是很厉害的。原创 2022-10-20 21:00:34 · 672 阅读 · 0 评论 -
27.2 java集合基础学习(集合基本概念和基础接口学习)
队列接口应指出可以在队列的尾部添加元素,在队列的头部删除元素,并且可以查询队列中元素的个数。//尾部添加元素 E remove();//头部删除元素 int size();//查询元素个数 }上面是我们自己写的,其实Java库的开发者已经把上面的工作全做了,而且很系统的开发了很多数据结构供我们使用,实际上我们只需要学习如何使用就可以了。它用来定义键值对数据结构的接口。原创 2020-06-03 09:35:37 · 238 阅读 · 1 评论 -
27.1 Java集合接口学习(Collection接口,Iterable接口,List接口)
首先我们要知道,Java合集框架中定义的所有接口和类都在java.util包中。其次我们需要知道Java提供了那些数据结构供我们使用?Set 用于存储一组不重复的元素。原创 2020-04-23 10:37:23 · 474 阅读 · 1 评论 -
26.Java进阶之泛型,通配泛型,消除泛型和泛型的限制
在我看来,我们可以将泛型编程机制看作一个工具,通过这个工具我们可以在代码编译时检测出某些运行错误,并写出更为通用(抽象),可复用的代码。从JDK1.5开始,Java允许定义泛型类,泛型接口,泛型方法。这样我们就可以在Java中使用泛型机制写出更为通用的程序。泛型相当于一些类型数据的抽象,泛型程序设计意味着编写的泛型代码可以对多种不同类型的对象重用。(体现代码的复用原则)首先我们要注意泛型类型必须是引用类型(不能是int double …的基本类型)例子。原创 2020-04-15 10:29:20 · 483 阅读 · 0 评论 -
25.java操作mysql一般步骤(JDBC)
点击红框框下载jar包,然后再如图所示,点击+号进行jar包添加。首先,java的mysql驱动jar包导入项目中。原创 2022-10-11 21:25:40 · 339 阅读 · 0 评论 -
24.序列化对象克隆及文件锁学习
有时想得到对象的一个“复制品”,使得复制品的变化不会引起原对象实体变化,反之亦然。我们称这样的复制品为原对象的一个克隆对象(简称克隆)。原创 2020-02-06 14:01:48 · 290 阅读 · 2 评论 -
23.文件读写:字符流
BufferedReader和BufferedWriter类创建的对象称为缓冲输入流,缓冲输出流,BufferedWriter流能够通过调用write(String str);如果append为true,则将字节写入文件末尾处,相当于追加信息,反之则写在开头。文件字符IO流和文件字节IO流对应,它读入和写出的数据是以字符为单位的。BufferReader流能够通过调用readLine();它的好处在于我们可以用它来有效率的读写文件。,它是普通字符输入流的一种增强。缓冲流增强了读写文件的能力。原创 2020-02-01 19:54:35 · 714 阅读 · 2 评论 -
22.文件读写:字节流
字节流最大的特点是,每次调用read或write读入或写出的数据是以字节为单位的,而有的字符需要两个字节去存储,所以字节流读取数据会发生读到的数据不准确的情况。原创 2020-02-05 13:51:04 · 4625 阅读 · 0 评论 -
21.文件读写:使用IO流的步骤
该方法从源中试图读取len个字节到字节数组b中,并返回实际读取的字节数目。参数off指定从字节数组的某个位置开始存放读取的数据。此方法使用给定的文件名name创建FileOutputStream流。该方法从源中读取单个字节的数据,返回0~225之间的一个整数,如果未读出字节就返回-1,每调用一次,读取游标向后移动一位。该方法从源中试图读取b.length个字节到字节数组b中,返回实际的读取字节数目。该方法给定字节数组中起始于偏移量off处取len个字节写到目的地。此方法为关闭流的方法。原创 2020-01-13 14:12:23 · 2253 阅读 · 0 评论 -
20.2 Java写文件之OutputStream学习
在JavaAPI中,我们将可以向目的地写入一个字节序列的对象称为输出流。字节序列的来源地可以是文件,也可以是网络,还可以是内存块等等。输出流根据每次写出的字节数量的不同分为字节输出流和字符输出流。字节输出流每次都是写出一个字节的,而字符输出流每次写出都是根据基于两字节的字符为单位写出的。原创 2022-10-08 08:46:15 · 3709 阅读 · 0 评论 -
20.1 Java读文件之InputStream学习
在JavaAPI中,我们可以从字节序列来源地读入一个字节序列的对象称为输入流。字节序列的来源地可以是文件,也可以是网络,还可以是内存块等等。输入流根据每次读取的字节数量的不同分为字节输入流和字符输入流。字节输入流每次都是读取一个字节的,而字符输入流每次读入都是根据基于两字节的字符为单位读取的。方法定义返回值描述方法描述返回的是读入的字节asc码(-1~225)当读取完毕时,返回-1将源中的字节信息填充到b中当填充完毕时,返回实际填充数将b中指定位置填充源中的字节。原创 2022-10-08 08:38:43 · 7032 阅读 · 0 评论 -
19.Java进阶之文件操作入门
File file = new File("麻子.txt");System . out . println("麻子.txt最后修改时间: " + file . lastModified());File file1 = new File("四郎.txt");System . out . println("四郎.txt 件最后修改时间: " + file1 . lastModified());}原创 2020-01-12 09:29:01 · 1135 阅读 · 0 评论 -
18.1.动手实践:简历分析器
人工读取简历虽然准确,但是也耗费了大量的人力,如果我们能做一个简历分析器,在简历筛选前期自动过滤一些不符合条件的,将会节省大量人力阅读。所以,需要一个简历分析程序,能快速的对一份简历进行关键信息提取,比如,姓名,年龄,毕业院校,专业信息等。通过前面的学习,我们学习了基本的编程基础,现在通过自己动手做一个简历分析器来进行巩固和进阶。上面是满足了基本需要,想要做的更好的同学可以在此基础上进行扩展,优化,达到更好的效果。假设现在有一个文件,内容如下。原创 2022-09-21 21:20:56 · 285 阅读 · 0 评论 -
18.Java实用类Scanner,StringBuffer,Date,Calendar
使用此构造方法创建一个对象的实体,初始容量可以容纳16个字符,当该对象的实体存放的字符序列的长度大于16时,实体的内容量自动增加(当容量满了后,自动扩容),以便于存放所增加的字符。众所周知,计算机系统将其自身的时间的“公元”设置在1970年1月1日0时(格林威治时间),此方法中的参数取正数表示公元后的时间,取负数表示公元前的时间。此方法将正则表达式作为分隔标记(就是把与正则表达式匹配的字符作为分隔符),若不指定分隔标记,那么默认空格,制表符,回行符作为解析String对象中字符序列中的单词。原创 2020-01-11 16:18:38 · 585 阅读 · 0 评论 -
17.Java常用实用类之String类中常用的方法以及一般应用场景,final关键字
由于程序设计中经常涉及处理和字符序列有关的算法,所以Java专门提供了用来处理字符序列的String类来让我们的编程变得的更简单。此类在java.lang包中,而此包在Java程序中被默认引用(无需import),因此程序可以直接使用String类。但Java将String类定义为final类,即此类不能改写。原创 2020-01-09 12:43:55 · 975 阅读 · 0 评论 -
16.程序设计的三大错误,异常类和断言
Java中提供了一种机制,让我们能在程序开发阶段尽可能全面的测试程序的稳定性,同时能让我们在开发完成测试完成后不修改代码的基础上**“注释掉测试语句”**,从而不让测试语句影响程序运行效率。这种机制,就是断言机制。断言机制相比于异常处理,它提供了更为高效的异常处理机制(使我们有选择性的忽略某些检查代码提高运行效率)原创 2020-01-03 11:09:17 · 2604 阅读 · 0 评论 -
15.Java内部类,匿名类学习
JAVA programming》里这样定义的:内部类(又叫嵌入类),是一种在其他类的内部定义的类。} /*** InnerClass是ShowInnerClass的内部类data ++;} } }InnerClass类在ShowInnerClass类的内部定义,所以InnerClass是ShowInnerClass的内部类。原创 2019-11-06 20:50:19 · 234 阅读 · 0 评论 -
14.Java接口编程学习
在Java程序中,我们将使用关键字interface声明的特殊类称之为接口。接口的定义和类的定义很相似,分为接口声明和接口体。/*** 定义一个名为Printable的接口* 其中拥有常量MAX,* 抽象方法add(),sum(float x,float y)/*** 执行加操作/*** 对x和y进行求和* @return}1)接口用来描述类应该做什么,而不是指定它们具体应该如何做,也就是说,Java接口从技术层面来说不应该包含实现,而是定义一些抽象的方法或者常量。原创 2019-11-02 21:31:57 · 820 阅读 · 0 评论