java
文章平均质量分 77
智商三岁半i
初来乍到的程序猿
展开
-
Day_27 【Java基础】线程池ThreadPoolExecutor、ExecutorService、Executors工具类详解【附源码】
Java 多线程:彻底搞懂线程池Android多线程:线程池ThreadPool全面解析一、线程池1. 什么是线程池?从JDK 5开始出现,线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。(这里的任务就是实现了Runnable或Callable接口的实例对象)2.线程池有什么优势?① 降低资源消耗(重复利用线程池中的线程)② 提高响应速度(减少了创建新线程的时间)③ 便于线程管理(线程池统一分配,调度线程)二、ExecutorServi原创 2021-12-02 21:03:45 · 828 阅读 · 1 评论 -
Day_26 【Java基础】Stream API 与 Optional类【附源码】
一、Stream API1.为什么要使用Stream API?实际开发中,需要操作的数据大都来自于mysql或Oracle等关系数据库,还有的数据库如Redis、MongDB,对于这些非关系数据库的操作就需要Java层面处理(Stream API)。2.Stream和Collection集合的区别?Collectio是一种静态的数据内存结构,面向内存,存储在内存中;而Stream是有关计算的,面向CPU,通过CPU计算处理。3.什么是Stream API?是数据渠道,用于操作数据源(集合、数组等原创 2021-12-01 21:23:00 · 1229 阅读 · 2 评论 -
Day_25 【Java基础】Java 8新特性之Lambda表达式、函数式接口、构造器引用、数组引用详解【附源码】
Java 8(又称为jdk 1.8)是oracle公司于2014年3月发布,可以看成是自Java 5以来最具革命性的版本。Java 8为Java语言、编译器、类库、开发工具与JVM带来了大量新特性。一.Lambda表达式先来看两个例子:原创 2021-12-01 11:03:15 · 186 阅读 · 0 评论 -
Day_24 【Java基础】Java反射机制详解【附源码】
一.反射机制加载完类(java.exe)之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构,操作类的属性和方法。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射。动态语言:在运行时可以根据某些条件改变自身结构。如:Object-C、C#、JavaScript、PHP、Python、Erlang。反射被认为是动态语言的关键。静态语言:与动态语言相对应的,运行时结原创 2021-11-30 13:55:16 · 221 阅读 · 0 评论 -
Day_23 【Java基础】对象的序列化与网络编程【附源码】
一.序列化序列化:用ObjectOutputStream类保存基本类型数据或对象的机制反序列化:用ObjectlnputStream类读取基本类型数据或对象的机制对象序列化机制:把内存中的Java对象转换成平台无关的二进制流,从而把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流进行网络传输。反序列化机制:当其它程序获取了这种二进制流,就可以恢复成原来的Java对象。某个类的对象实现序列化:① 实现Serializable接口 ② 提供一个全局常量:private static fin.原创 2021-11-27 23:38:07 · 569 阅读 · 2 评论 -
【Java基础】文件的加密操作、统计文章中各个字符出现的次数,并输出到文件中【附源码】
I/O流使用练习1.分别使用节点流:FilelnputStream、FileOutputStream和缓冲流:BufferedInputStream、BufferedOutputStream实现文本文件/图片/视频文件的复制。并比较二者在数据复制方面的效率。2.实现文件加密操作。提示:int b = 0;while((b = fis.read()) != -1){fos.write(b ^ 5);//异或运算}@Test//2.文件的加密操作,解密也是如此public void tes原创 2021-11-27 13:45:41 · 181 阅读 · 0 评论 -
Day_22【Java基础】File类和I/O流【附源码】
一.File类I/O流可以对文件的内容进行操作,但对文件本身的一些常规操作无法通过I/O流实现,如文件的创建、删除、重命名等操作,判断硬盘上某个文件是否存在等操作,为此JDK在java.io包下提供了一个FIle类,该类封装了一个路径,并提供了一系列方法:1.常用构造方法File file = new File("File.txt");//相对路径(相对于当前module)System.out.println(file);//File.txtFile file1 = new File("E:\\原创 2021-11-26 23:33:00 · 333 阅读 · 0 评论 -
Day_21【Java基础】泛型与通配符使用【附源码】
泛型所谓泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。这个类型参数将在使用时(例如,继承或实现这个接口,用这个类型声明变量、创建对象时)确定(即传入实际的类型参数,也称为类型实参)。泛型不能是基本数据类型,必须是其对应的包装类,因为向集合中添加的元素是Object的子类。...原创 2021-11-25 22:09:41 · 150 阅读 · 0 评论 -
Day_20 【Java基础】集合Map(HashMap、Hashtable、TreeMap)【附源码】
Map接口Map接口是一种双列集合,它的元素都包含一个键对象Key和值对象Value,键和值对象之间存在一种对应关系,称为映射,而且是一对一映射。Map结构的理解:① Map中的Key:无序的、不可重复,使用Set存储所有的Key—> Key所在的类要重写equals()和hashcode()(以HashMap为例)② Map中的Value:无序的、可重复,使用Collection存储所有的Value—>Value所在的类要重写equals()③ 一个键值对: key-value构原创 2021-11-24 23:31:57 · 284 阅读 · 0 评论 -
Day_18 【Java基础】枚举类(Enumeration)和注解(annotations)【附源码】
一.枚举类(Enumeration)枚举类:类的对象只有有限个,是确定的。如星期、性别、季节、月份、线程状态等。当需要定义一组常量时,强烈建议使用枚举类。如果一个类只有一个对象,则可以使用单例模式来实现枚举类。1.如何定义使用枚举类?方式1:JDK 5.0 之前,自定义枚举类//自定义枚举类public class EnumTest { public static void main(String[] args) { Season summer = Season.SUM原创 2021-11-22 15:40:13 · 624 阅读 · 0 评论 -
【Java基础】生产者、消费者---详解及分析实现【附源码】
生产者、消费者问题生产者(Productor)将产品交给店员(Clerk),而消费者(Customer)从店员处取走产品,店员一次只能持有固定数量的产品(比如:20),如果生产者试图生产更多的产品,店员会叫生产者停一下,如果店中有空位放产品了再通知生产者继续生产;如果店中没有产品了,店员会告诉消费者等一下,如果店中有产品了再通知消费者来取走产品。这里可能出现两个问题:生产者比消费者快时,消费者会漏掉一些数据没有取到。消费者比生产者快时,消费者会取相同的数据。三种角色三种角色:生产者、消费者、产品原创 2021-11-16 23:30:29 · 314 阅读 · 0 评论 -
Day_17【Java基础】String、StringBuffer和StringBuilder详解【附源码】
一.String类String 类位于Java的lang包下,是Java语言的核心类,也是一种引用数据类型。String类的部分源码如下:package java.lang;public final class String implements java.io.Serializable, Comparable<String>, CharSequence { //用于字符存储 private final char value[]; //缓存字符串的哈希值.原创 2021-11-18 11:52:23 · 482 阅读 · 0 评论 -
Day_16 【Java基础】多线程、线程通信、线程安全和线程池【附源码】
一.什么是程序、进程、线程?程序:就是用编程语言编写的一段静态的代码。进程:一个正在运行的应用程序线程:一个程序内部的一条执行路径线程、进程根本区别:① 进程是资源分配的基本单位,而线程是处理器任务调度和执行的基本单位;② 一个进程可以由多个进程组成,但是一个线程只能属于一个进程;③ 每个线程拥有自己独立的栈、程序计数器(pc),多个线程共享一个进程的结构和资源:堆、方法区**并行:**多个cpu同时执行多个任务**并发:**一个cpu(采用时间片)同时执行多个任务,如:秒杀二.进程的创原创 2021-11-16 22:01:31 · 325 阅读 · 0 评论 -
Day_15 【Java基础】异常的处理 try...catch、throws、throw及自定义异常【附源码】
一.什么是异常?java异常指在程序运行时可能出现的一些错误,如:索引下标越界、空指针异常、网络连接错误等。1.ava异常类的体系结构图:Java所有异常类都是继承自java.lang.Throwable类,包括Java异常处理的两个重要子类:Error和Exception。① Error:称为错误类,表示java运行时产生的系统内部的错误或资源耗尽的错误,是比较严重的错误,仅靠修改程序本身是不能恢复的,如系统奔溃,JVM错误等。② Exception:Exception类称为异常类,表示程序本原创 2021-11-14 16:08:11 · 847 阅读 · 0 评论 -
【Java设计模式】之 代理模式(Proxy)模式【附源码】
什么是代理?代理分为静态代理和动态代理,在未产生动态代理之前,代理只是为了给某一个类创建一个代理类来为这个类的对象动态添加一些职责和功能。而动态代理产生后,将这种在编译期实现的代理转到了运行时来实现,减少了代理对象和被代理对象之间的一个耦合程度。动态代理可以在运行时创建一个实现了一组给定接口的类,这种功能只有在编译时无法确定需要实现哪个接口时才有必要使用。1.什么是代理(Proxy)模式?为其他对象提供一种代理以控制对这个对象的使用。2.代理模式:实际就是接口的使用。① 抽象主题类(接口)抽象主原创 2021-11-14 10:33:19 · 189 阅读 · 0 评论 -
Day_15 【Java基础】抽象类、接口和内部类【附源码】
一.抽象类在定义一个类时,常常需要定于一些方法来描述该类的行为特征,但是有时候这些方法的实现方式是无法确定的。如定义了一个Employee类,他的work()方法描述的是工作,但是对于不同的岗位,他们的工作也是不一样的。为此,我们使用abstract关键字,我们只需要在父类中只是定义方法名,而不实现具体的方法体。abstract可以修饰类、修饰方法1.abstract修饰类:抽象类① 无法实例化,可以没有抽象方法② 一定有其构造器,便于子类实例化调用③ 抽象方法由其子类实现2.abstract原创 2021-11-13 13:12:00 · 255 阅读 · 0 评论 -
【Java设计模式】之 模板方法(Template Method)模式【附源码】
关于设计模式,我们已经介绍了单例模式,接下来认识一下模板方法模式模板方法模式1.什么是模板方法模式?模板方法模式就是定义一个操作中算法的框架,而将一些步骤延迟到子类中来,使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。2.模板方法模式非常简单,使用了Java的继承机制,其中AbstractClass叫做抽象模板,他的方法分为两类。① 基本方法基本方法也叫基本操作,是由子类实现的方法,并且在模板方法被调用。② 模板方法可以有一个或几个,一般是一个具体方法,也就是一个框架。原创 2021-11-12 12:23:00 · 181 阅读 · 0 评论 -
Day_13【Java基础】包装类、自动拆箱和自动装箱【附源码】
一.包装类1.为什么需要包装类?JAVA是面向对象的语言,很多类和方法中的参数都需使用对象(例如集合),但基本数据类型却不是面向对象的,这就造成了很多不便。如:List = new ArrayList<>();,就无法编译通过由此,我们引入了包装类,顾名思义,就是将基本类型“包装起来“,使其具备对象的性质,例如可以添加属性和方法。2.八种基本数据类型的对应包装类3.基本数据类型、包装类和String类型转换(1)JDK 5.0 之前,需要使用如下的过程和方法实现三种类型之间转换,原创 2021-11-10 22:34:33 · 291 阅读 · 0 评论 -
【java基础】利用Vector代替数组处理:从键盘读入学生成绩(以负数代表输入结束),找出最高分,并输出学生成绩等级。【附源码】
**题目:从键盘输入学生成绩,输出该名学生和第一名之间的差值(gap),并输出等级gap<=10 ‘A’gap<=20 ‘B’gap<=30 ‘C’gap>30 ‘D’**注意:本题是进阶版的成绩输出,使用了Java内部提供的封装好了的类vector。vector是Java内部提供的,认为是向量类型,可以容纳许多类型的数据,因此也被称为容器(可以理解为动态数组,是封装好了的类)vector.addElement(obj); //添加数据 vector.elemen原创 2021-11-10 18:41:00 · 936 阅读 · 0 评论 -
Day_09 【java基础】面向对象之可变参数、值传递、重载和递归【附源码】
一.面向对象面向对象的三条主线:类以及类的成员:属性、方法、构造器、代码块、内部类面向对象三大特征:封装、继承、多态其他关键字:this、super、interface、abstract、package、import、final等怎么理解类和对象?类:对某一类具体事物的抽象。对象:实实在在存在的一个实体,由类创建而来。类和对象的使用三步骤:①定义类(包括属性和方法)②创建类的实体③调用对象的结构(对象.属性,对象.方法)方法的内部可以调用属性和别的方法和方法本身(递归调用),不能原创 2021-11-05 17:59:12 · 165 阅读 · 0 评论 -
Day_08 【java基础】Java中的类和对象、面向对象【附源码】
一.面向过程和面向对象面向过程(POP):强调的是功能行为,以函数为最小单位,考虑怎么做。面向对象(OOP):将功能封装进对象,强调具备了功能的对象,以类/对象作为最小单位,考虑谁来做。二者都是一种思想,面向对象是相对于面向过程而言的。面向对象更加强强调运用人类在日常的逻辑中采用得思想方法和原则,如抽象、分类、继承、耦合、多态等。面向对象的三大特性:封装、继承、多态...原创 2021-11-03 19:36:09 · 96 阅读 · 0 评论 -
Day_05 【java基础】Java三种基本流程控制(顺序、选择、循环)【附源码】
Java三种基本流程控制java中存在三总基本结构,分别是顺序结构、选择结构、循环结构一.顺序结构顺序结构就是程序依次从上到下一行一行的执行代码,没有判断和中转。public class StringTest { public static void main(String args[]){ boolean x=true; boolean y=false; short s=42; if((s++==42)&&(y=true)) s++; if((x=false)原创 2021-11-01 10:32:49 · 358 阅读 · 0 评论 -
Day_04 【java基础】Java中的运算符(算数、赋值、比较、逻辑、位运算)【附源码】
Java中的运算符:1.算数运算符+(加)、-(减)、(乘)、/(除)、%(取模、求余)、++(自增)、–(自减)注意:前自增、自减运算符先自增或自减,后运算;后自增、自减运算符先运算,后自增或自减;整除、取模运算的符号取决于被除数、被模数的符号,也就是分子;自增自减不会改变数据类型,如short a=1 a++值为2,而a=a+1 此时不再是short类型,编译出错;2.赋值运算符=(赋值)、+=(加等于)、-=(减等于)、=(乘等于)、/=(除等于)、%=(模等于)注意:3.比较运原创 2021-10-29 17:10:25 · 123 阅读 · 0 评论 -
Day_03 【Java基础】第一个java程序HelloWorld【附源码】
一.java语言的特点简单易用、安全可靠、跨平台、面向对象、支持多线程原创 2021-10-28 18:16:31 · 384 阅读 · 0 评论 -
Day_02 【Java基础】JDK_1.8的下载安装和环境变量的配置、JDK帮助文档的下载【详细步骤】
一.jdk的下载和安装1.jdk的下载jdk的下载一般选择oracle官网进行下载,链接如下:jdk1.8下载我们使用的是选择windows下jdk 1.8的版本原创 2021-10-27 18:01:38 · 10040 阅读 · 8 评论 -
Day_01【Java基础】Java概述
1.注释对代码进行注释说明,增强可读性,分为:单行注释、多行注释、文档注释注释不参与编译,不会出现在.class字节码文件中原创 2021-10-27 12:37:39 · 79 阅读 · 0 评论 -
Day_19 【Java基础】集合Collection(List、Set)【附源码】
对于数据的存储,我们已经介绍了数组,但是数组存储存在着很多的不足,如:① 一旦初始化以后,其长度就不可修改② 对于添加、删除、插入数据等操作非常不便,效率不高③ 数组存储数据的特点:有序、可重复。对于无序、不可重复的需求,不能满足④ 获取数组中实际元素的个数的需求,数组没有现成的属性或方法可用Java集合分为Collection和Map两种体系java集合超详解一.Collection接口Collection接口用于存储单列数据,1)List接口:元素有序、可重复的集合2)Set接口:元原创 2021-11-23 23:55:34 · 460 阅读 · 0 评论 -
Day_17 【Java基础】常见的日期类、自然排序、定制排序、Math类和大数操作【附源码】
一.日期与时间类获取系统当前时间:long time = System.currentTimeMillis()返回当前的时间距1970年1月1日0时0分0秒的差值以毫秒为单位,称为时间戳。1.Java.util.Date类Java.util包下,提供了一个Date类用于表示日期和时间,这是通常说的日期类。在JDK1.8中,Date类只有两个构造方法可以使用:① Date():创建当前日期的Date对象。Date date = new Date();System.out.println(da原创 2021-11-20 19:35:07 · 701 阅读 · 0 评论 -
Day_07 【java基础】数组冒泡、选择、快速排序算法和Arrays工具类【附源码】
数组的排序算法算法=数据结构+程序代码1.排序:假设含有n个记录的序列为{R1,R2,…Rn},其相应的关键字序列为{K1,K2,…,Kn}。将这些记录重新排序为{Ri1,Ri2,…Rin},使得相应的关键字值满足条Ki1<=Ki2<=…<=Kin,这样的一种操作称为排序。通常来说,排序的目的是快速查找,例如二分查找。2.衡量排序算法的优劣:(1)时间复杂度:分析关键字的比较次数和记录的移动次数(2)空间复杂度:分析排序算法中需要多少辅助内存(3)稳定性:若两个记录A和B的原创 2021-11-02 21:54:20 · 182 阅读 · 0 评论 -
【Java基础】String常见算法题目(模拟trim()、字符串反转、统计次数、相同子串、字符串排序)【附源码】
来看看API(jdk 1.8)中String都有那些方法:1.模拟一个trim()方法,去除字符串两端的空格。//2.模拟trim()方法,去除字符串两端的空格public static String trimTest(String str){ int start = 0; int end = str.length()-1; while(start<=end && str.charAt(end)==' '){ end--; }原创 2021-11-19 17:54:59 · 388 阅读 · 0 评论 -
【Java基础】多线程实例----三个窗口同时售卖100张车票【详解源码实现】
本一节作为前一节多线程的补充说明,旨在解决多线程问题中的线程安全问题的解决。问题描述假设售票厅有3个窗口可以售卖某次列车的最后100张车票,这三个窗口可以看做三个线程,100张车票可以看做三个线程共享的资源,仔细分析,这个问题中存在线程安全问题。一.直接实现售票1.继承Thread类,重run()方法/** * 三个窗口买票:共售100张票 * 存在线程安全的问题 * @author wds * @date 2021-11-15-20:30 */public class ThreadT原创 2021-11-16 22:02:17 · 10753 阅读 · 5 评论 -
Day_14 【Java基础】static关键字、final关键字和内部类【附源码】
一.static关键字为什么要使用static关键字?在开发中,定义一个类时只是描述了该类的属性和方法,并未产生具体的数据,只有new创建该类的实例之后,才会为每个对象分配内存空间,存储各自的数据。此时,我们希望某些特定的数据在内存中只有一份,且能被所有该类的对象共享。如某个学校的所有学生共享一个校名。为此,引入static关键字。1.static关键字使用:static意为静态的,用来修饰属性,方法,代码块,内部类。① static修饰变量:静态变量(类变量)使用:类名.属性 或 对象..原创 2021-11-11 22:43:58 · 240 阅读 · 0 评论 -
【Java设计模式】之 单例模式(Singleton Pattern)模式 饿汉式单例模式 vs 懒汉式单例模式
什么是设计模式?设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模免去我们自己再思考和摸索,设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,"套路”。设计模式的分类:① 创建型模式(5种):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。② 结构型模式(7种):适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。③ 行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、原创 2021-11-11 13:23:04 · 300 阅读 · 0 评论 -
【java基础】杨辉三角形 - 杨辉直角三角形(二维数组) 输出杨辉三角前十行【附源码】
杨辉三角使用二维数组打印一个10行杨辉三角。【提示】1.第一行有1个元素,第n行有n个元素2.每一行的第一个元素和最后一个元素都是13.从第三行开始,对于非第一个元素和最后一个元素的元素。即:yanghui[i][i] = yanghui[i-1][i-1] + yanghui[i-1][i];示例如下:package com.jd.wds;/* * 定义一个二维数组,打印出十行的杨辉三角 */public class YangHuiTest { public static原创 2021-11-10 22:56:45 · 2220 阅读 · 0 评论 -
Day_06 【java基础】Java中的数组与常见算法【附源码】
Java中的数组1.数组概念存储相同类型元素的,固定大小的连续的数据结构。2.数组的分类一维数组、二维数组、三维数组、…3.数组的定义方式一:数组类型[] 数组名 = new 数组类型[数组长度];方式二:数组类型[] 数组名 = new 数组类型[]{数组元素1,数组元素2…}方式三:数组类型 数组名 = {数组元素1,数组元素2,…}4.数组的两种初始化方式静态初始化:数组的初始化和数组元素的赋值同时进行;例如:int[] arr = new int[] {1,2,3,4原创 2021-11-01 19:52:58 · 129 阅读 · 0 评论 -
Day_10 【java基础】Java三大特性之封装【附源码】
一.封装1.什么是封装?隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。通俗的说,把该隐藏的隐藏起来,该暴露的暴露出来,这就是封装性的设计思想。2.封装性的体现(1)将类的属性xxx私有化,同时,提供公共的(public)方法获取和设置属性值;(2)不对外暴露的私有的方法;(3)单例模式。3.权限修饰符Java权限修饰符放在类的成员定义面用,用来限定对象对该类成员的访问权限。类的修饰符只能是public和缺省(default),且default原创 2021-11-07 13:04:11 · 105 阅读 · 0 评论 -
Day_11 【Java基础】Java三大特性之继承、多态【附源码】
1.什么是继承?猫和狗都属于动物,他们都具有动物的特性,我们可以说猫和狗都继承自动物。Java中继承就是子类继承父类的特征和行为,可以使用父类的所有属性和方法的同时也可以有自己特有的属性和方法。2.如何使用继承?使用extends关键字原创 2021-11-09 13:16:04 · 537 阅读 · 0 评论 -
Day_12 【Java基础】Object类的使用【附源码】
一.Object类1.什么是Object?在Java中提供了一个Object类,他是所有类的父类,每个类都直接或间接继承自该类,因此该类也称为超类、基类或根类。2.Object中的方法Object是所有类的父类,它里面定义的方法可以被所有的类直接使用或重写。3.关于==的说明① 基本数据类型,比较两个值是否相等(与数据类型无关)② 引用数据类型,比较两个对象的地址值是否相等。==测试:二.Object中常见方法的说明1.equals()方法:是一个方法,而非运算符,因此只适用于原创 2021-11-09 20:46:01 · 218 阅读 · 0 评论