07 2022 档案

摘要:默认方法:andThen Function 接口中有一个默认的andThen 方法,用来进行组合操作。JDK源代码如: default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) { Objects.requi 阅读全文
posted @ 2022-07-20 11:15 夫君 阅读(71) 评论(0) 推荐(0) 编辑
摘要:默认方法:or 与and 的“与”类似,默认方法or 实现逻辑关系中的“或”。JDK源码为: default Predicate<T> or(Predicate<? super T> other) { Objects.requireNonNull(other); return (t) ‐> test 阅读全文
posted @ 2022-07-20 10:46 夫君 阅读(126) 评论(0) 推荐(0) 编辑
摘要:默认方法:and 既然是条件判断,就会存在与、或、非三种常见的逻辑关系。其中将两个Preadicate条件使用“与”逻辑连接起来实现“并且”的效果时,可以使用default方法and 。其JDK源码为: default Predicate<T> and(Predicate<? super T> ot 阅读全文
posted @ 2022-07-20 10:02 夫君 阅读(64) 评论(0) 推荐(0) 编辑
摘要:练习:格式化打印信息题目下面的字符串数组当中存有多条信息,请按照格式“ 姓名:XX。性别:XX。”的格式将信息打印出来。要求将打印姓名的动作作为第一个Consumer 接口的Lambda实例,将打印性别的动作作为第二个Consumer 接口的Lambda实例,将两个Consumer 接口按照顺序“拼 阅读全文
posted @ 2022-07-19 11:38 夫君 阅读(25) 评论(0) 推荐(0) 编辑
摘要:默认方法:andThen 如果一个方法的参数和返回值全都是Consumer 类型,那么就可以实现效果:消费数据的时候,首先做一个操作,然后再做一个操作,实现组合。而这个方法就是Consumer 接口中的default方法andThen 。下面是JDK的源代码: default Consumer<T> 阅读全文
posted @ 2022-07-19 09:33 夫君 阅读(82) 评论(0) 推荐(0) 编辑
摘要:1.常用的函数式接口java.util.function.Supplier接口仅包含一个无参的方法: T get()。用来获取一个泛型参数指定类型的对象数据。 Supplier接口被称之为生产型接口,指定接口的泛型是什么类型,那么接口中的get方法就会生产什么类型的数据 package com.Fu 阅读全文
posted @ 2022-07-19 09:16 夫君 阅读(34) 评论(0) 推荐(0) 编辑
摘要:使用Lambda作为参数和返回值如果抛开实现原理不说,Java中的Lambda表达式可以被当作是匿名内部类的替代品。如果方法的参数是一个函数式接口类型,那么就可以使用Lambda表达式进行替代。使用Lambda表达式作为方法参数,其实就是使用函数式接口作为方法参数。 例如java.lang.Runn 阅读全文
posted @ 2022-07-18 11:26 夫君 阅读(106) 评论(0) 推荐(0) 编辑
摘要:日志案例1.发现以下代码存在的一些性能浪费的问题 调用showLog方法,传递的第二个参数是一个拼接后的字符串 先把字符串拼接好,然后再调用showLog方法 showLog方法中如果传递的日志等级不是1级 那么就不会是如此拼接后的字符串 所以感觉字符串就白拼接了,存在了浪费 package com 阅读全文
posted @ 2022-07-18 10:54 夫君 阅读(27) 评论(0) 推荐(0) 编辑
摘要:函数式接口概念 函数式接口在Java中是指:有且仅有一个抽象方法的接口。 函数式接口,即适用于函数式编程场景的接口。而Java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导。 备注 阅读全文
posted @ 2022-07-18 10:22 夫君 阅读(335) 评论(0) 推荐(0) 编辑
摘要:分析 package com.learn.demo04.BSTCP; import java.io.*; import java.net.ServerSocket; import java.net.Socket; /* 创建BS版本TCP服务器 */ public class TCPServerTh 阅读全文
posted @ 2022-07-18 09:51 夫君 阅读(47) 评论(0) 推荐(0) 编辑
摘要:1.文件命名2.循环接收3.多线程提高效率服务器端 package com.Net.FileUpload02; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java. 阅读全文
posted @ 2022-07-18 09:05 夫君 阅读(145) 评论(0) 推荐(0) 编辑
摘要:3.文件上传案例服务器端:读取客户端上传的文件,保存到服务器的硬盘,给客户端回写“上传成功” 3.1 明确: 数据源:客户端上传的文件 目的地:服务器的硬盘 d:\upload\a.jpg 3.2 实现步骤: 1.创建一个服务器ServerSocket对象,和系统要指定的端口号 2.使用Server 阅读全文
posted @ 2022-07-14 11:40 夫君 阅读(42) 评论(0) 推荐(0) 编辑
摘要:1.TCP通信的文件上传案例1.1 原理:客户端读取本地的文件,把文件上传到服务器,服务器再把上传的文件保存到服务器的硬盘上 1.客户端使用本地的字节输入流,读取要上传的文件 2.客户端使用网络字节输出流,把读取到的文件上传到服务器 3.服务器使用网络字节输入流,读取客户端上传的文件 4.服务器使用 阅读全文
posted @ 2022-07-14 11:03 夫君 阅读(32) 评论(0) 推荐(0) 编辑
摘要:TCP通信的客户端:向服务器发送连接请求,给服务器发送数据,读取服务器回写的数据z 表示客户端的类: java.net.Socket:此类实现客户端套接字。套接字是两台机器间通信的端点 套接字:包含了ip地址和端口号的网络单位 构造方法: Socket(String host,int port)创建 阅读全文
posted @ 2022-07-14 10:49 夫君 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2022-07-14 09:53 夫君 阅读(7) 评论(0) 推荐(0) 编辑
摘要:网络的通信,本质上是两个进程(应用程序)的通信。每台计算机都有很多的进程,那么在网络通信时,如何区分这些进程呢? 如果说IP地址可以唯一标识网络中的设备,那么端口号就可以唯一标识设备中的进程(应用程序)了 ·端口号︰用两个字节表示的整数,它的取值范围是O~65535。其中,0~1023之间的端口号用 阅读全文
posted @ 2022-07-14 09:17 夫君 阅读(149) 评论(0) 推荐(0) 编辑
摘要:网络通信协议分类 通信的协议还是比较复杂的,java.net 包中包含的类和接口,它们提供低层次的通信细节。我们可以直接使用这些类和接口,来专注于网络程序开发,而不用考虑通信的细节 java.net 包中提供了两种常见的网络协议的支持: UDP:用户数据报协议(User Datagram Proto 阅读全文
posted @ 2022-07-13 10:55 夫君 阅读(232) 评论(0) 推荐(0) 编辑
摘要:软件结构 C/S结构 全称为Client/Server结构。是指客户端和服务器结构,常见程序有QQ,迅雷等软件 B/S结构 全称为Browser/Server结构,是指浏览器和服务器结构,常见浏览器有谷歌、火狐等 两种架构各有优势,但是无论哪种架构,都离不开网络的支持网络编程,就是在一定的协议下,实 阅读全文
posted @ 2022-07-13 10:21 夫君 阅读(78) 评论(0) 推荐(0) 编辑
摘要:练习:序列化集合 当我们想在文件中保存多个对象的时候 可以把多个对象存储到一个集合中 对集合进行序列化和反序列化 分析: 1.定义一个存储Person对象的ArrayList集合 2.往ArrayList集合中存储Person对象 3.创建一个序列化流ObjectOutputStream对象 4.使 阅读全文
posted @ 2022-07-13 10:10 夫君 阅读(26) 评论(0) 推荐(0) 编辑
摘要:如果我们想某个成员变量不被显示出来的同时不让该变量被共享,那么我们引入了transient关键字 transient关键字:瞬态关键字 被该关键字修饰的成员变量不能被序列化 举例示范: public class Person implements Serializable { static Stri 阅读全文
posted @ 2022-07-13 09:36 夫君 阅读(20) 评论(0) 推荐(0) 编辑
摘要:java.io.ObjectOutputStream extends OutputStream ObjectOutputStream:对象的序列化流 作用:把对象以流的方式写入到文件中保存 构造方法: ObjectOutputStream(OutputStream out) 创建写入指定 Outpu 阅读全文
posted @ 2022-07-13 09:20 夫君 阅读(65) 评论(0) 推荐(0) 编辑
摘要:练习:转换文件编码 将GBK编码的文本文件,转换为UTF-8编码的文本文件 分析: 1.创建InputStreamReader对象,构造方法中传递字节输入流和指定编码表名称GBK 2.创建OutputStreamWriter对象,构造方法中传递字节输出流和指定的编码表名称UTF-8 3.使用Inpu 阅读全文
posted @ 2022-07-09 16:14 夫君 阅读(20) 评论(0) 推荐(0) 编辑
摘要:java.io.OutputStreamWriter extends Writer OutputStreamWriter: 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。(编码:把能看懂的变成看不懂) 继续自父类的共性成员方法: - void write(in 阅读全文
posted @ 2022-07-09 15:24 夫君 阅读(205) 评论(0) 推荐(0) 编辑
摘要:FileReader可以读取IDE默认编码格式(UTF-8)的文件 FileReader读取系统默认编码(中文GBK)会产生乱码��� public class Demo01FileReader { public static void main(String[] args) throws IOEx 阅读全文
posted @ 2022-07-09 14:53 夫君 阅读(206) 评论(0) 推荐(0) 编辑
摘要:练习: 对文本的内容进行排序 按照(1,2,3....)顺序排序 分析: 1.创建一个HashMap集合对象,可以:存储每行文本的序号(1,2,3,..);value:存储每行的文本 2.创建字符缓冲输入流对象,构造方法中绑定字符输入流 3.创建字符缓冲输出流对象,构造方法中绑定字符输出流 4.使用 阅读全文
posted @ 2022-07-09 14:23 夫君 阅读(61) 评论(0) 推荐(0) 编辑
摘要:java.io.BufferedWriter extends Writer BufferedWriter:字符缓冲输出流 继承自父类的共性成员方法: -void write(int c)写入单个字符 -void write(char[] cbuf)写入字符数组 -abstract void writ 阅读全文
posted @ 2022-07-09 13:37 夫君 阅读(159) 评论(0) 推荐(0) 编辑
摘要:继承父类的成员方法: int read() 从输入流中读取数据的下一个字节 int read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中 void close() 关闭此输入流并释放与该流相关的所有系统资源构造方法: BufferedInputStream(In 阅读全文
posted @ 2022-07-09 11:13 夫君 阅读(92) 评论(0) 推荐(0) 编辑
摘要:缓冲流的原理 BufferedOutputStream_字节缓冲输出流 java.io.BufferedOutputStream extends OutputStream BufferedOutputStream:字节缓冲输出流 继承自父类的共性方法: -public void close() :关 阅读全文
posted @ 2022-07-09 10:52 夫君 阅读(45) 评论(0) 推荐(0) 编辑
摘要:Properties集合中的方法store public class Demo01Properties { public static void main(String[] args) throws IOException { show02(); } private static void show 阅读全文
posted @ 2022-07-09 10:35 夫君 阅读(243) 评论(0) 推荐(0) 编辑
摘要:JDK7的新特性 在try的后边可以增加一个(),在括号中可以定义流对象 那么这个流对象的作用域就在try中有效 try中的代码执行完毕,会自动把流对象释放,不用写finally 格式: try(定义流对象;定义流对象....){ 可能会产出异常的代码 }catch(异常类变量 变量名){ 异常的处 阅读全文
posted @ 2022-07-09 10:22 夫君 阅读(22) 评论(0) 推荐(0) 编辑
摘要:续写和换行 续写,追加写:使用两个参数的构造方法 FileWriter(String fileName, boolean append) FileWriter(File file, boolean append) 参数: String fileName,File file:写入数据的目的地 bool 阅读全文
posted @ 2022-07-09 09:56 夫君 阅读(55) 评论(0) 推荐(0) 编辑
摘要:flush方法和close方法的区别: flush:刷新缓冲区,流对象可以继续使用 close:先刷新缓冲区,然后通知系统释放资源,流对象不可以再继续使用了 字符输出流写数据的其他方法 - void write(char[] cbuf)写入字符数组 - abstract void write(cha 阅读全文
posted @ 2022-07-09 09:33 夫君 阅读(168) 评论(0) 推荐(0) 编辑
摘要:java.io.Writer:字符输出流,是所有字符输出流的最顶层的父类,是一个抽象类 共性的成员方法: - void write(int c) 写入单个字符 - void write(char[] cbuf)写入字符数组 - abstract void write(char[] cbuf, int 阅读全文
posted @ 2022-07-09 09:22 夫君 阅读(206) 评论(0) 推荐(0) 编辑
摘要:java.io.Reader:字符输入流的最顶层父类,其中定义了一些共性的成员方法,是一个抽象类共性的成员方法 int read() 读取单个字符并返回 int read(char[] cbuf) 将字符读入数组,一次读取多个字符 abstract void close() 关闭该流并释放与之关联的 阅读全文
posted @ 2022-07-09 09:07 夫君 阅读(100) 评论(0) 推荐(0) 编辑
摘要:练习文件复制 文件复制练习:一读一写 明确: 数据源:c:\\1.jpg 数据的目的地:d:\\1.jsp 文件复制的步骤: 1.创建一个字节输入流对象,构造方法中绑定要读写的数据源 2.创建一个字节输出流对象,构造方法中绑定要写入的目的地 3.使用字节输入流对象中的方法read读取文件 4.使用字 阅读全文
posted @ 2022-07-08 20:47 夫君 阅读(33) 评论(0) 推荐(0) 编辑
摘要:字节流一次读取一个字节的原理 字节输入流一次读取多个字节的方法: int read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中 明确两件事情: 1.方法的参数byte[]的作用? 起到缓冲作用,存储每次读取到的多个字节 数组的长度一把定义为1024(1kb)或者 阅读全文
posted @ 2022-07-08 20:11 夫君 阅读(162) 评论(0) 推荐(0) 编辑
摘要:java.io.InputStream:字节输入流 此抽象类是表示字节输入流的所有类的超类 定义了所有子类共性的方法: int read()从输入流中读取数据的下一个字节 int read(byte[] b) 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中 void close() 关 阅读全文
posted @ 2022-07-08 19:38 夫君 阅读(44) 评论(0) 推荐(0) 编辑
摘要:一次写多个字节的方法: - public void write(byte[] b):将 b.length字节从指定的字节数组写入此输出流 - public void write(byte[] b, int off, int len) :从指定的字节数组写入 len字节,从偏移量 off开始输出到此输 阅读全文
posted @ 2022-07-08 16:31 夫君 阅读(43) 评论(0) 推荐(0) 编辑
摘要:写入数据的原理(内存-->硬盘) java程序-->JVM(java虚拟机)-->OS(操作系统)-->OS调用写数据的方法-->把数据写入到文件中 字节输出流的使用步骤(重点): 1.创建一个FileOutputStream对象,构造方法中传递写入数据的目的地 2.调用FileOutputStre 阅读全文
posted @ 2022-07-08 15:42 夫君 阅读(80) 评论(0) 推荐(0) 编辑
摘要:一切皆为字节 一切文件数据(文本、图片、视频等)在存储时,都是以二进制数字的形式保存,都一个一个的字节,那么传输时一样如此。所以,字节流可以传输任意文件数据。在操作流的时候,我们要时刻明确,无论使用什么样的流对象,底层传输的始终为二进制数据 字节输出流_OutputStream类&FileOutpu 阅读全文
posted @ 2022-07-08 15:26 夫君 阅读(31) 评论(0) 推荐(0) 编辑
摘要:FileNameFilter过滤器的使用和Lambda优化程序 public class Demo02Filter { public static void main(String[] args) { File file = new File("c:\\abc"); getAllFile(file) 阅读全文
posted @ 2022-07-08 15:17 夫君 阅读(57) 评论(0) 推荐(0) 编辑
摘要:文件搜索 需求 : 遍历D:\aaa文件夹,及 aaa 文件夹的子文件夹并且只要.java结尾的文件 分析: 1.目录搜索,无法判断多少级目录,所以使用递归,遍历所有目录 2.遍历目录时,获取的子文件,通过文件名称,判断是否符合条件 代码实现: public class Demo05Recuriso 阅读全文
posted @ 2022-07-08 15:00 夫君 阅读(47) 评论(0) 推荐(0) 编辑
摘要:使用递归计算阶乘n的阶乘:n! = n*(n-1)…3215的阶乘:5!=5*(5-1)32*1 public class Demo03Recursion { public static void main(String[] args) { int jiecheng = jc(5); System. 阅读全文
posted @ 2022-07-08 14:24 夫君 阅读(29) 评论(0) 推荐(0) 编辑
摘要:递归:方法自己调用自己 递归的分类: 递归分为两种,直接递归和间接递归 直接递归称为方法自身调用自己 间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法 注意事项: 递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出 在递归中虽然有限定条件,但是递归次数不能太多。否则也会 阅读全文
posted @ 2022-07-08 14:08 夫君 阅读(67) 评论(0) 推荐(0) 编辑
摘要:File类创建删除功能的方法 —public boolean createNewFile():当且仅当具有该名称的文件尚不存在时,创建一个新的空文件 —public boolean delete():删除由此File表示的文件或目录 —public boolean mkdir():创建由此FIle表 阅读全文
posted @ 2022-07-08 13:46 夫君 阅读(159) 评论(0) 推荐(0) 编辑
摘要:File类获取功能的方法—public String getAbsolutePath() :返回此file的绝对路径名字符串 —public String getPath() :将此File转换为路径名字符串 —public String getName() :返回由此File表示的文件或者目录的名 阅读全文
posted @ 2022-07-08 13:24 夫君 阅读(62) 评论(0) 推荐(0) 编辑
摘要:绝对路径和相对路径 绝对路径:是一个完整的路径,以盘符开始(c: d:)c:\a.txt 相对路径:相对指的是相对于当前项目的根目录(可以省略项目的根目录) 注意: 1、路径不区分大小写 2、路径中的文件名称分隔符windows使用反斜杠,反斜杠是转义字符,两个反斜杠代表一个普通的反斜杠 File类 阅读全文
posted @ 2022-07-08 11:50 夫君 阅读(121) 评论(0) 推荐(0) 编辑
摘要:File类概述:java.io.File类 文件和目录路径名的抽象表示形式 java把电脑中的文件和文件夹(目录)封账为了一个File类,我们可以使用File类对文件和文件夹进行操作 默认情况下,java.io 包中的类总是根据当前用户目录来解析相对路径名。此目录由系统属性 user.dir 指定, 阅读全文
posted @ 2022-07-08 11:37 夫君 阅读(30) 评论(0) 推荐(0) 编辑
摘要:给定一个计算器Calculator接口,内含抽象方法calc可以将两个int数字相加得到和值 使用L ambdo的标准格式调用invokeCalc方法,完成120和130的相加计算 public interface Calculator { // 定义一个计算两个int整数和的方法并返回结果 pub 阅读全文
posted @ 2022-07-08 10:38 夫君 阅读(89) 评论(0) 推荐(0) 编辑
摘要:使用Lambda(无参无返回) 说明:给定一个厨师(Cook)接口,内含唯一的抽象方法makeFood,且无参数、无返回值。如下: public interface Cook{ public abstract void makeFood(); } 在main主函数代码中,使用Lambda的标准格式调 阅读全文
posted @ 2022-07-08 10:25 夫君 阅读(64) 评论(0) 推荐(0) 编辑
摘要:编程思想转换做什么,而不是怎么做 我们真的希望创建一个匿名内部类对象吗?不,我们只是为了做这件事情而不得不创建一个对象。 我们真正希望做的事情是:将run方法体内的代码传递给Thread类知晓。 传递一段代码,这才是我们真正的目的。而创建对象只是受限于面向对象语法而不得不采取的一种手段方式。那,有没 阅读全文
posted @ 2022-07-08 09:58 夫君 阅读(20) 评论(0) 推荐(0) 编辑
摘要:函数式编程思想概述 在数学中,函数就是有输入量、输出量的一套计算方法 相对而言,面向对象过分强调必须通过对象的形式来做事情,而函数式的思想是尽量忽略复杂的面向对象的复杂语法--是强调做什么而不是以什么形式做。 面向对象:做一件事情找一个能解决这件事情的对象,调用对象的方法来完成事情(例如:Rando 阅读全文
posted @ 2022-07-08 09:45 夫君 阅读(33) 评论(0) 推荐(0) 编辑
摘要:线程池:一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作, 无需反复创建线程而消耗过多资源。工作原理:可以用一张图来简洁明了说明: 合理利用线程池能够带来三个好处∶1.降低资源消耗。减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务 ⒉提高响应速度。 阅读全文
posted @ 2022-07-08 09:32 夫君 阅读(68) 评论(0) 推荐(0) 编辑
摘要:资源类:包子类 设置包子的属性 皮 陷 包子的状态:有 true 没有 false public class BaoZi { //皮 String pi; //陷 String xian; //包子的状态,有 true ,没有 false,设置初始值为false没有包子 boolean flag = 阅读全文
posted @ 2022-07-08 09:13 夫君 阅读(20) 评论(0) 推荐(0) 编辑
摘要:什么是等待唤醒机制: 这是多个线程间的一种协作机制。谈到线程我们经常想到的是线程间的竞争(race),比如去争夺锁,但这并不是 故事的全部,线程间也会有协作机制。就好比在公司里你和你的同事们,你们可能存在在晋升时的竞争,但更多时 候你们更多是一起合作以完成某些任务。 就是在一个线程进行了规定操作后, 阅读全文
posted @ 2022-07-07 20:57 夫君 阅读(36) 评论(0) 推荐(0) 编辑
摘要:notifyAll方法: 进入到Timed_Waiting(计时等待)状态有两种方式: 1.sleep(long m)方法,在毫秒值结束之后,线程睡醒,进入到Runnable或BLocked状态 2.使用wait(long m)方法,wait方法如果在毫秒结束之后,还没有被notify,就会自动醒来 阅读全文
posted @ 2022-07-07 20:32 夫君 阅读(57) 评论(0) 推荐(0) 编辑
摘要:案例分析 等待唤醒案例代码实现 等待唤醒案例:线程之间的通信 创建一个顾客线程(消费者):告知老板要的包子种类和数量,调用wait方法,放弃cpu的执行 进入到WAITTING状态(无限等待) 创建一个老板线程(生产者):花了5秒做包子,做好包子之后,调用notify()方法,唤醒顾客吃包子 注意: 阅读全文
posted @ 2022-07-07 20:09 夫君 阅读(26) 评论(0) 推荐(0) 编辑
摘要:线程状态概述: 线程状态图: 线程状态理解:我们创建了多个线程(新建状态)并调用start方法启动线程,这些线程有些抢到cpu执行权有些没有抢到,抢到的进入运行状态,没抢到的进入阻塞状态,如果运行状态中的线程执行完毕(run()方法结束),或者调用stop()强制关闭线程,或者run()方法中产生异 阅读全文
posted @ 2022-07-07 19:48 夫君 阅读(29) 评论(0) 推荐(0) 编辑
摘要:静态的同步方法锁对象是谁?不能是thisthis是创建对象之后产生的,静态方法优先于对象静态方法的锁对象是本类的cLass属性-->class文件对象(反射) 卖票案例出现了线程安全问题 卖出了不存在的票和重复的票 解决线程安全问题的三种方案:使用lock锁 java.util.concurrent 阅读全文
posted @ 2022-07-07 19:41 夫君 阅读(35) 评论(0) 推荐(0) 编辑
摘要:同步技术的原理 解决线程安全问题第二种方案: 同步方法定义:用synchronized修饰的方法就叫做同步方法,保证一个线程执行该方法的时候,其它线程只能在方法外等着.格式:修饰符 synchronized 返回值类型 方法名(参数列表){可能会产生线程安全问题的代码(访问了共享数据的代码)}代码实 阅读全文
posted @ 2022-07-07 19:23 夫君 阅读(63) 评论(0) 推荐(0) 编辑
摘要:线程安全问题产生的原理 解决线程安全问题_同步代码块 同步代码块synchronized关键字可以用于方法中的某个区块中,表示只对这个区块这个区块的资源实现互斥访问 卖票案例出现了线程安全问题卖出了不存在的票和重复的票 解决线程安全问题的一种方案:使用同步代码块格式:synchronized(同步锁 阅读全文
posted @ 2022-07-07 17:06 夫君 阅读(25) 评论(0) 推荐(0) 编辑
摘要:线程安全问题概述 线程安全问题的代码实现 /* 实现卖票案例 */ public class RunnableImpl implements Runnable{ // 定义一个多线程贡献的票源 private int ticket = 100; // 设置线程任务:卖票 @Override publ 阅读全文
posted @ 2022-07-07 16:36 夫君 阅读(12) 评论(0) 推荐(0) 编辑
摘要:如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。 总结:实现Runnable接口比继承Thread类所具有的优势: 1.适合多个相同的程序代码的线程去共享同一个资源 2.可以避兔java中的单继承的局限性 3.增加程序的健壮性,实现解耦操作 阅读全文
posted @ 2022-07-07 16:19 夫君 阅读(87) 评论(0) 推荐(0) 编辑
摘要:sleep方法是在Thread类中的一个静态方法,当一个线程调用了sleep方法,被调用的那个线程就会暂时的让出指定时间的CPU执行权,在这段时间也不会参与CPU的调度,当时间到了之后,就会重新回到就绪状态,等待CPU的再次调度,注意是就绪状态,而不是重新拿回CPU的执行权。并且,在休眠期间,只是会 阅读全文
posted @ 2022-07-07 16:06 夫君 阅读(186) 评论(0) 推荐(0) 编辑
摘要:Thread类的常用方法 获取线程的名称: 1.使用Thread类中的方法getName() String getName() 返回该线程的名称 2.可以先获取到当前正在执行的线程,使用线程中的方法getName()获取线程的名称 static Thread currentThread() 返回对当 阅读全文
posted @ 2022-07-07 15:45 夫君 阅读(183) 评论(0) 推荐(0) 编辑
摘要:1.随机性打印结果 os是操作系统的意思 cpu有了两条执行的路径,cpu就有了选择 一会执行main方法 一会执行run方法 也可以说两个线程,一个main线程 一个run线程 一起请多cpu的执行权(执行时间)谁抢到了就执行对应的代码 2.多线程内存图解 还是之前的方法 注意看这个run调用 和 阅读全文
posted @ 2022-07-07 15:24 夫君 阅读(22) 评论(0) 推荐(0) 编辑
摘要:创建多线程程序的第一种方式:创建Thread类的子类java.lang.Thread类:是描述线程的类,我们想要实现多线程程序,就必须继承Thread类 实现步骤: 1.创建一个Thread类的子类 2.在Thread类的子类中重写Thread类中的run方法,设置线程任务(开启线程要做什么) 3. 阅读全文
posted @ 2022-07-07 14:52 夫君 阅读(47) 评论(0) 推荐(0) 编辑
摘要:线程调度 1.一个进程可以创建多个线程,其中至少有一个主线程(main线程) 2.由操作系统来负责安排调度:决定哪一个线程被运行(操作系统决定了一切,我们只是来了解操作系统的行为,并利用达成我的任务目标) 3.遵循同一原则:让所有线程有机会运行 主线程 主线程:是执行主(main)方法的线程. 单线 阅读全文
posted @ 2022-07-07 14:32 夫君 阅读(40) 评论(0) 推荐(0) 编辑
摘要:进程︰是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位﹔系统运行一个程序即是一个进程从创建、运行到消亡的过程 线程∶线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个 阅读全文
posted @ 2022-07-07 14:09 夫君 阅读(61) 评论(0) 推荐(0) 编辑
摘要:要求:我们模拟注册操作,如果用户名已存在,则抛出异常并提示:亲,该用户名已经被注册。 分析: 1.使用数组保存已经注册过的用户名(数据库) 2.使用Scanner获取用户输入的注册的用户名(前端,页面) 3.定义一个方法,对用户输入的中注册的用户名进行判断 遍历存储已经注册过用户名的数组,获取每一个 阅读全文
posted @ 2022-07-07 13:54 夫君 阅读(17) 评论(0) 推荐(0) 编辑
摘要:子父类的异常: - 如果父类抛出了多个异常,子类重写父类方法时,抛出和父类相同的异常或者是父类异常的子类或者不抛出异常。 - 父类方法没有抛出异常,子类重写父类该方法时也不可抛出异常。此时子类产生该异常,只能捕获处理,不能声明抛出 注意: 父类异常时什么样,子类异常就什么样 public class 阅读全文
posted @ 2022-07-07 11:30 夫君 阅读(53) 评论(0) 推荐(0) 编辑
摘要:异常注意事项_多异常的捕获处理 多个异常使用捕获又该如何处理呢? 1. 多个异常分别处理 2. 多个异常一次捕获,多次处理 3. 多个异常一次捕获一次处理 public class Demo01Exception { public static void main(String[] args) { 阅读全文
posted @ 2022-07-07 10:32 夫君 阅读(17) 评论(0) 推荐(0) 编辑
摘要:/* Throwable类中定义了3个异常处理的方法 String getMessage() 返回此 throwable 的简短描述。 String toString() 返回此 throwable 的详细消息字符串。 void printStackTrace() JVM打印异常对象,默认此方法,打 阅读全文
posted @ 2022-07-07 10:05 夫君 阅读(27) 评论(0) 推荐(0) 编辑
摘要:throws关键字:异常处理的第一种方式,交给别人处理 作用: 当方法内部抛出异常对象的时候,那么我们就必须处理这个异常对象 可以使用throws关键字处理异常对象, 会把异常对象声明抛出给方法的调用者处理(自己不处理,给别人处理),最终交给JVM处理,JVM然后中断处理 使用格式:在方法声明时使用 阅读全文
posted @ 2022-07-07 09:55 夫君 阅读(32) 评论(0) 推荐(0) 编辑
摘要:作用: 可以使用throw关键字在指定的方法中抛出指定的异常 使用格式: throw new xxxException(“异常产生的原因”) 注意: 1、throw关键字必须写在方法的内部 2、throw关键字后边new的对象必须是Exception或者Exception的子类对象 3、throw关 阅读全文
posted @ 2022-07-07 09:28 夫君 阅读(72) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2022-07-07 09:08 夫君 阅读(17) 评论(0) 推荐(0) 编辑
摘要:异常概念 异常:指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。 在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。 异常体系 异常的机制,其实是帮助我们找到程序中的问题,异常的根类是java 阅读全文
posted @ 2022-07-06 21:25 夫君 阅读(69) 评论(0) 推荐(0) 编辑
摘要:案例介绍 按照斗地主的规则,完成洗牌发牌的动作、 具体规则:1.组装54张扑克牌将 2.54张牌顺序打乱3.三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌 4.查看三人各自手中的牌(按照牌的大小排序)、底牌 案例分析 代码实现 public class PokerTest { pub 阅读全文
posted @ 2022-07-06 20:59 夫君 阅读(41) 评论(0) 推荐(0) 编辑
摘要:JDK9对集合添加的优化(of方法) JDK9的新特性: 1.List接口,Set接口,Map接口:里边增加了一个静态的方法of,可以给集合一次性添加多个元素 2.static List of (E… elements) 3.使用前提: 1.当集合中存储的元素的个数已经确定了,不在改变时使用 注意: 阅读全文
posted @ 2022-07-06 20:28 夫君 阅读(37) 评论(0) 推荐(0) 编辑
摘要:Hashtable集合 java.util.Hashtable<K,V>集合 implements Map<K,V>接口 Hashtable:底层也是一个哈希表,是一个线程安全的集合,是单线程集合,速度慢 HashMap:底层是一个哈希表,是一个线程不安全的集合,是多线程的集合,速度快 HashMa 阅读全文
posted @ 2022-07-06 19:57 夫君 阅读(26) 评论(0) 推荐(0) 编辑
摘要:HashMap存储自定义类型键值 1、当给HashMap中存放自定义对象时,如果自定义对象是键存在,保证键唯一,必须复写对象的hashCode和equals方法。 2、如果要保证map中存放的key和取出的顺序一致,可使用LinkedHashMap集合来存放 public class Person 阅读全文
posted @ 2022-07-06 19:41 夫君 阅读(97) 评论(0) 推荐(0) 编辑
摘要:我们已经知道,Map中存放的是两种对象,一种称为key(键),一种称为value(值),它们在在IMap 中是一一对应关系, 这一对对象又称做Map 中的一个Entry(项)。Entry将键值对的对应关系封装成了对象。即键值对对象,这样我们在遍历wap集合时,就可以从每一个键值对(Entry )对象 阅读全文
posted @ 2022-07-06 17:46 夫君 阅读(93) 评论(0) 推荐(0) 编辑
摘要:Map接口中定义了很多方法,常用的如下: public V put(K key,V value) 将指定的值与此映射中的指定键相关联(可选操作) V remove(Object key); 如果此映射中存在该键的映射关系,则将其删除 V get(Object key); 返回指定键在此标识哈希映射中 阅读全文
posted @ 2022-07-06 17:20 夫君 阅读(75) 评论(0) 推荐(0) 编辑
摘要:概述java.util.Map接口 Map<K,V> 有两个泛型 类型参数:K - 此映射所维护的键的类型V - 映射值的类型 特点:1.Map集合是双列集合,一个元素包含两个值,一个是key,一个是value 2.Map集合中的元素,key和value的数据类型可以相同,也可以不同 3.Map集合 阅读全文
posted @ 2022-07-06 16:54 夫君 阅读(46) 评论(0) 推荐(0) 编辑
摘要:Comparator比较器 我们还是先研究这个方法 public static <T> void sort(List<T> list):将集合中元素按照默认规则排序。 不过这次存储的是字符串类型。 /* - java.utils.Collections是集合工具类,用来对集合进行操作。部分方法如下: 阅读全文
posted @ 2022-07-06 16:26 夫君 阅读(60) 评论(0) 推荐(0) 编辑
摘要:可变参数 可变参数:是JDK1.5之后出现的新特性 使用前提:当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数 使用格式:定义方法时使用 ~修饰符 返回值类型 方法名(数据类型…变量名){} 可变参数的原理: ~可变参数底层就是一个数组,根据传递参数个数不同,会创建不同长度 阅读全文
posted @ 2022-07-06 15:49 夫君 阅读(28) 评论(0) 推荐(0) 编辑
摘要:HashSet集合存储自定义类型元素 HashSet存储自定义类型元素 set集合报错元素唯一: ~存储的元素(String,Integer,…Student,Person…)必须重写hashCode方法和equals方法 要求:同名同年龄的人,视为同一个人,只能存储一次 public static 阅读全文
posted @ 2022-07-06 15:25 夫君 阅读(23) 评论(0) 推荐(0) 编辑
摘要:HashSet集合存储数据的结构 HashSet集合存储元素不重复的原理 //创建HashSet集合对象 Hashset<String> set = new HashSet<>(); string s1 = new String(original: "abc") ; string s2 = new 阅读全文
posted @ 2022-07-06 14:51 夫君 阅读(57) 评论(0) 推荐(0) 编辑
摘要:HashSet集合介绍 ~java.util.Set接口 extends Collection 接口~Set接口的特点: 1.不允许存储重复的元素 2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历~Java.util.HashSet集合 implements Set接口~HashSet 阅读全文
posted @ 2022-07-06 14:34 夫君 阅读(34) 评论(0) 推荐(0) 编辑
摘要:LinkedList集合数据存储的结构是链表结构。方便元素添加、删除的集合。实际开发中对一个集合元素的添加与删除经常涉及到首尾操作,而LinkedList提供了大量首尾操作的方法 LinkedList是List的子类,List中的方法LinkedList都是可以使用 /* * addFirst(E) 阅读全文
posted @ 2022-07-06 14:10 夫君 阅读(48) 评论(0) 推荐(0) 编辑
摘要:List集合 我们掌握了Collection接口的使用后,再来看看Collection接口中的子类,他们都具备那些特性呢? 接下来,我们一起学习Collection中的常用几个子类(java.util.List集合、java.util.Set集合) List接口介绍java.util.List接口继 阅读全文
posted @ 2022-07-06 13:56 夫君 阅读(144) 评论(0) 推荐(0) 编辑
摘要:数组 ~数组:Array,是有序的元素序列,数组是在内存中开辟一段连续的空间,并在此空间存放元素。就像是一排出租屋,有100个房间,从001到100每个房间都有固定编号,通过编号就可以快速找到租房子的人简单的说,采用该结构的集合,对元素的存取有如下的特点︰ ~查找元素快∶通过索引,可以快速访问指定位 阅读全文
posted @ 2022-07-06 11:06 夫君 阅读(134) 评论(0) 推荐(0) 编辑
摘要:常见的数据结构数据存储的常用结构有∶栈、队列、数组、链表和红黑树。我们分别来了解一下: 栈 ~栈: stack,又称堆栈,它是运算受限的线性表,其限制是仅允许在标的一端进行插入和删除操作,不允许在其他任何位置进行添加、查找、删除等操作简单的说:采用该结构的集合,对元素的存取有如下的特点 ·~先进后出 阅读全文
posted @ 2022-07-06 10:30 夫君 阅读(36) 评论(0) 推荐(0) 编辑
摘要:斗地主案例需求分析及代码实现 public static void main(String[] args) { //1.准备牌 //定义一个存储54张牌的ArrayList集合,泛型使用String ArrayList<String> poker = new ArrayList<>(); //定义两 阅读全文
posted @ 2022-07-06 10:13 夫君 阅读(30) 评论(0) 推荐(0) 编辑
摘要:泛型接口基本概念 之前所有的操作都是在类中直接使用泛型操作的,那么,对于JAVA来说,也可以在接口中定义及使用泛型。 声明泛型接口: interface 接口名称<接口标示>{} interface Info<T> { public T getInfo(); } 如果现在一个子类实现此接口是没有进行 阅读全文
posted @ 2022-07-06 09:03 夫君 阅读(244) 评论(0) 推荐(0) 编辑
摘要:package demo02; /* 定义含有泛型的接口 */ public interface GenericInterface<I> { public abstract void method(I i); } package demo02; public class GenericInterfa 阅读全文
posted @ 2022-07-05 21:24 夫君 阅读(18) 评论(0) 推荐(0) 编辑
摘要:我们在集合中会大量使用到泛型,这里来完整地学习泛型知识。泛型,用来灵活地将数据类型应用到不同的类、方法、接口当中。将数据类型作为参数进行传递。 定义和使用含有泛型的类 定义格式∶ 修饰符 class 类名<代表泛型的变量>{ } 例如,API中的ArrayList集合∶ class ArrayLis 阅读全文
posted @ 2022-07-05 21:13 夫君 阅读(27) 评论(0) 推荐(0) 编辑
摘要:定义:可以存储任意类型的对象元素。 案例: ArrayList<String> list = new ArrayList<String>(); 作用:在程序中无法确定一个集合中的元素到底是什么类型,那么在取出元素时,如果进行强制类型转换就很容易出错 案例: 分析: 在不加泛型之前,给集合添加数据是O 阅读全文
posted @ 2022-07-05 20:59 夫君 阅读(33) 评论(0) 推荐(0) 编辑
摘要:Iterator遍历集合——工作原理 在调用Iterator的next方法之前,迭代器的索引位于第一个元素之前,不指向任何元素,当第一次调用迭代器的next方法后,迭代器的索引会向后移动一位, 指向第一个元素并将该元素返回,当再次调用next方法时,迭代器的索引会指向第二个元素并将该元素返回,依此类 阅读全文
posted @ 2022-07-05 20:30 夫君 阅读(104) 评论(0) 推荐(0) 编辑
摘要:定义:Iterator接口是Java集合框架中的一员。 作用:Collection接口与Map接口主要用于存储元素。 常用方法: boolen hasNext(); //判断游标右边是否还有元素 object next(); //返回游标右边的元素并把游标移动到下一个位置 void remove() 阅读全文
posted @ 2022-07-05 20:12 夫君 阅读(85) 评论(0) 推荐(0) 编辑
摘要:Collection集合常用功能 方法: boolean add(E e); 向集合中添加元素 boolean remove(E e); 删除集合中的某个元素 void clear(); 清空集合所有的元素 boolean contains(E e); 判断集合中是否包含某个元素 boolean i 阅读全文
posted @ 2022-07-05 19:53 夫君 阅读(37) 评论(0) 推荐(0) 编辑
摘要:集合概述 在前面基础班我们已经学习过并使用过集合ArrayList<E> ,那么集合到底是什么呢?· ~集合︰集合是java中提供的一种容器,可以用来存储多个数据集合和数组既然都是容器,它们有啥区别呢? ~数组的长度是固定的。集合的长度是可变的 ~数组中存储的是同一类型的元素,可以存储基本数据类型值 阅读全文
posted @ 2022-07-05 19:21 夫君 阅读(26) 评论(0) 推荐(0) 编辑
摘要:1.基本类型->字符串(String)1.1.基本类型的值+"" 最简单的方法(工作中常用)1.2.包装类的静态方法toString(参数),不是Object类的toString() 重载(参数列表不同,这里是重载不是重写哦)static String toString(int i) 返回一个表示指 阅读全文
posted @ 2022-07-05 17:53 夫君 阅读(57) 评论(0) 推荐(0) 编辑
摘要:作用:JDK中提供了一系列的包装类,通过这些包装类可以将基本数据类型的值包装为引用数据类型的对象 基本类型——包装类对照表 装箱与拆箱 基本类型与对应的包装类对象之间,来回转换的过程称为"装箱"与拆箱": ~装箱:从基本类型转换为对应的包装类对象。· ~拆箱:从包装类对象转换为对应的基本类型。用In 阅读全文
posted @ 2022-07-05 17:16 夫君 阅读(107) 评论(0) 推荐(0) 编辑
摘要:System类1、currentTimeMillis()方法作用:获取当前系统时间的毫秒值【注意:从现在到1970年1月1日 00:00:00】 2、arraycopy(...)方法作用:复制数组 参数:Object src, int srcPos, Object dest, int destPos 阅读全文
posted @ 2022-07-05 16:58 夫君 阅读(17) 评论(0) 推荐(0) 编辑
摘要:Java中StringBuilder的构造方法 StringBuilder构造方法: public StringBuilder(): 创建一个空白可变的字符串对象,不含有任何内容 public StringBuilder(): 根据字符串内容,来创建可变字符串对象 //链式编程 sb.append( 阅读全文
posted @ 2022-07-05 16:23 夫君 阅读(288) 评论(0) 推荐(0) 编辑
摘要:System类的常用方法1、currentTimeMillis方法2、arraycopy方法 java.lang.System 类中提供大量的静态方法,可以获取与系统相关的信息或系统级操作,在System类的API文档中, 常用的方法有:- public static long currentTim 阅读全文
posted @ 2022-07-05 15:57 夫君 阅读(27) 评论(0) 推荐(0) 编辑
摘要:时间日期相关类总结 Date类 A.构造方法 Date();根据当前系统时间创建时间对象 B.成员方法 Date(long time)根据传入的毫秒值时间创建出日期对象 DateFormat类&SimpleDateFormat类 A.构造方法 SimpleDateFormat(String s):根 阅读全文
posted @ 2022-07-05 15:36 夫君 阅读(28) 评论(0) 推荐(0) 编辑
摘要:java.util.Calendar类:日历类 Calendar类是一个抽象类,里边提供了很多操作日历字段的方法(YEAR、MONTH、DAY_OF_MONTH、HOUR ) Calendar类无法直接创建对象使用,里边有一个静态方法叫getInstance(),该方法返回了Calendar类的子类 阅读全文
posted @ 2022-07-05 15:10 夫君 阅读(109) 评论(0) 推荐(0) 编辑
摘要:程序分析:(1)使用Scanner类获取出生日期(2)使用DataFormat类中的方法parse,把字符串的出生日期解析为Data格式的出生日期(3)把Data格式的出生日期转化为毫秒值(4)获取当前的日期,转化成毫秒值(5)使用当前日期的毫秒值-出生日期的毫秒值(6)把毫秒差值转换成天数 pub 阅读全文
posted @ 2022-07-05 14:44 夫君 阅读(95) 评论(0) 推荐(0) 编辑
摘要:使用 SimpleDateFormat格式化日期 SimpleDateFormat 是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat 允许你选择任何用户自定义日期时间格式来运行。例如: public static void main(String[] args) { 阅读全文
posted @ 2022-07-05 14:08 夫君 阅读(100) 评论(0) 推荐(0) 编辑
摘要:一, Date类类 Date 表示特定的瞬间,精确到毫秒。 毫秒:千分之一秒作用:可以对时间和日期进行计算可一把日期转换为毫秒进行计算,计算完毕,再转换为日期。 把日期转换为毫秒:当前的日期:2020-11-10;时间原点(0毫秒):1970-1-1 00:00:00 计算当前日期到原点一共多少毫秒 阅读全文
posted @ 2022-07-05 13:34 夫君 阅读(239) 评论(0) 推荐(0) 编辑
摘要:一,Object类概述:Object是类层次结构的根,每个类都可以将Object作为超类,所有类都直接或者间接的继承自该类构造方法:pulic Object()在面向对象中,子类要访问父类的无参构造方法,是因为它们的的顶级父类只有无参构造方法二,toSting()方法1,toString()方法在O 阅读全文
posted @ 2022-07-05 11:47 夫君 阅读(55) 评论(0) 推荐(0) 编辑
摘要:红包文化源远流长。从古时的红色纸包,到手机App中的手气红包,红包作为一种独特的中华文化传承至今。之前 的课程中,我们也编写过程序,模拟发普通红包。那么今天,我们将整合基础班课程中所有的技术和知识,编写一 个带界面版的 发红包 案例 案例需求 分析并使用已给出的类,编写程序,设置红包类型。 红包类型 阅读全文
posted @ 2022-07-05 10:25 夫君 阅读(858) 评论(0) 推荐(0) 编辑
摘要:当接口作为方法的参数时,需要传递什么呢?当接口作为方法的返回值类型时,需要返回什么呢?对,其实都是它的 子类对象。 ArrayList 类我们并不陌生,查看API我们发现,实际上,它是 java.util.List 接口的实现类。所 以,当我们看见 List 接口作为参数或者返回值类型时,当然可以将 阅读全文
posted @ 2022-07-05 09:31 夫君 阅读(266) 评论(0) 推荐(0) 编辑
摘要:引用类型用法总结 实际的开发中,引用类型的使用非常重要,也是非常普遍的。我们可以在理解基本类型的使用方式基础上,进一步 去掌握引用类型的使用方式。基本类型可以作为成员变量、作为方法的参数、作为方法的返回值,那么当然引用类型也是可以的 class作为成员变量 在定义一个类Role(游戏角色)时,代码如 阅读全文
posted @ 2022-07-05 09:13 夫君 阅读(78) 评论(0) 推荐(0) 编辑
摘要:~匿名内部类 :是内部类的简化写法。它的本质是一个 带具体实现的 父类或者父接口的 匿名的 子类对象。 开发中,最常用到的内部类就是匿名内部类了。以接口举例,当你使用一个接口时,似乎得做如下几步操作 1. 定义子类 2. 重写接口中的方法 3. 创建子类对象 4. 调用重写后的方法 我们的目的,最终 阅读全文
posted @ 2022-07-04 21:10 夫君 阅读(41) 评论(0) 推荐(0) 编辑
摘要:概述 什么是内部类 将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类 成员内部类 ~成员内部类 :定义在类中方法外的类 定义格式: class 外部类 { class 内部类{ } } 在描述事物时,若一个事物内部还包含其他事物,就可以使用内部类这种结构。比如,汽车类 Ca 阅读全文
posted @ 2022-07-04 20:31 夫君 阅读(117) 评论(0) 推荐(0) 编辑
摘要:权限修饰符 概述 在Java中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限 ~public:公共的。 ~protected:受保护的 ~default:默认的 ~private:私有的 不同权限的访问能力 可见,public具有最大权限。private则是最小权 阅读全文
posted @ 2022-07-04 19:23 夫君 阅读(290) 评论(0) 推荐(0) 编辑
摘要:修饰变量 1. 局部变量——基本类型 基本类型的局部变量,被fifinal修饰后,只能赋值一次,不能再更改。代码如下: public class FinalDemo1 { public static void main(String[] args) { // 声明变量,使用final修饰 final 阅读全文
posted @ 2022-07-04 17:14 夫君 阅读(455) 评论(0) 推荐(0) 编辑
摘要:fifinal关键字 概述 学习了继承后,我们知道,子类可以在父类的基础上改写父类内容,比如,方法重写。那么我们能不能随意的继承 API中提供的类,改写其内容呢?显然这是不合适的。为了避免这种随意改写的情况,Java提供了 final 关键字,用于修饰不可改变内容 ~fifinal: 不可改变。可以 阅读全文
posted @ 2022-07-04 16:44 夫君 阅读(106) 评论(0) 推荐(0) 编辑
摘要:笔记本电脑 笔记本电脑(laptop)通常具备使用USB设备的功能。在生产时,笔记本都预留了可以插入USB设备的USB接口,但具体是什么USB设备,笔记本厂商并不关心,只要符合USB规格的设备都可以 定义USB接口,具备最基本的开启功能和关闭功能。鼠标和键盘要想能在电脑上使用,那么鼠标和键盘也必须遵 阅读全文
posted @ 2022-07-04 15:44 夫君 阅读(126) 评论(0) 推荐(0) 编辑
摘要:引用类型转换 多态的转型分为向上转型与向下转型两种: 向上转型 ~向上转型:多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的 当父类引用指向一个子类对象时,便是向上转型。 使用格式: 父类类型 变量名 = new 子类类型(); 如:Animal a = new Cat(); 向下转型 阅读全文
posted @ 2022-07-04 15:11 夫君 阅读(126) 评论(0) 推荐(0) 编辑
摘要:实际开发的过程中,父类类型作为方法形式参数,传递子类对象给方法,进行方法的调用,更能体现出多态的扩展 性与便利。代码如下: 定义父类: public abstract class Animal { public abstract void eat(); } 定义子类: class Cat exten 阅读全文
posted @ 2022-07-04 14:13 夫君 阅读(76) 评论(0) 推荐(0) 编辑
摘要:概述 引入 多态是继封装、继承之后,面向对象的第三大特性。 生活中,比如跑的动作,小猫、小狗和大象,跑起来是不一样的。再比如飞的动作,昆虫、鸟类和飞机,飞起来也 是不一样的。可见,同一行为,通过不同的事物,可以体现出来的不同的形态。多态,描述的就是这样的状态 定义 ~多态: 是指同一行为,具有多个不 阅读全文
posted @ 2022-07-04 13:54 夫君 阅读(81) 评论(0) 推荐(0) 编辑
摘要:接口的多继承. 一个接口能继承另一个或者多个接口,这和类之间的继承比较相似。接口的继承使用 extends 关键字,子接口继 承父接口的方法。如果父接口中的默认方法有重名的,那么子接口需要重写一次。代码如下: 定义父接口: interface A { public default void meth 阅读全文
posted @ 2022-07-04 13:23 夫君 阅读(341) 评论(0) 推荐(0) 编辑
摘要:私有方法的使用 私有方法:只有默认方法可以调用。 私有静态方法:默认方法和静态方法可以调用。 如果一个接口中有多个默认方法,并且方法中有重复的内容,那么可以抽取出来,封装到私有方法中,供默认方法 去调用。从设计的角度讲,私有的方法是对默认方法和静态方法的辅助。同学们在已学技术的基础上,可以自行测 试 阅读全文
posted @ 2022-07-04 10:26 夫君 阅读(23) 评论(0) 推荐(0) 编辑
摘要:静态与.class 文件相关,只能使用接口名调用,不可以通过实现类的类名或者实现类的对象调用,代码如下: 定义接口: public interface LiveAble { public static void run(){ System.out.println("跑起来~~~"); } } 定义实 阅读全文
posted @ 2022-07-04 10:01 夫君 阅读(63) 评论(0) 推荐(0) 编辑
摘要:默认方法的使用 可以继承,可以重写,二选一,但是只能通过实现类的对象来调用。 1. 继承默认方法,代码如下: 定义接口: public interface LiveAble { public default void fly(){ System.out.println("天上飞"); } } 定义实 阅读全文
posted @ 2022-07-04 09:55 夫君 阅读(67) 评论(0) 推荐(0) 编辑
摘要:含有抽象方法 抽象方法:使用 abstract 关键字修饰,可以省略,没有方法体。该方法供子类实现使用。 代码如下: public interface InterFaceName { public abstract void method(); } 抽象方法的使用 必须全部实现,代码如下: 定义接口 阅读全文
posted @ 2022-07-04 09:41 夫君 阅读(43) 评论(0) 推荐(0) 编辑
摘要:概述 接口,是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么 接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法(JDK 8),私有方法(JDK 9) 接口的定义,它与定义类方式相似,但是使用 interface 关键 阅读全文
posted @ 2022-07-04 09:27 夫君 阅读(71) 评论(0) 推荐(0) 编辑
摘要:继承的综合案例 综合案例:群主发普通红包 群主发普通红包。某群有多名成员,群主给成员发普通红包。普通红包的规则: 1. 群主的一笔金额,从群主余额中扣除,平均分成n等份,让成员领取。 2. 成员领取红包后,保存到成员余额中。 请根据描述,完成案例中所有类的定义以及指定类之间的继承关系,并完成发红包的 阅读全文
posted @ 2022-07-04 09:18 夫君 阅读(112) 评论(0) 推荐(0) 编辑
摘要:抽象类 如果一个类包含抽象方法,那么该类必须是抽象类。 定义格式: abstract class 类名字 { } 代码举例: public abstract class Animal { public abstract void run(); } 抽象的使用 继承抽象类的子类必须重写父类所有的抽象方 阅读全文
posted @ 2022-07-03 20:33 夫君 阅读(174) 评论(0) 推荐(0) 编辑
摘要:抽象类 概述 由来 父类中的方法,被它的子类们重写,子类各自的实现都不尽相同。那么父类的方法声明和方法主体,只有声明还有 意义,而方法主体则没有存在的意义了。我们把没有方法主体的方法称为抽象方法。Java语法规定,包含抽象方法 的类就是抽象类。 定义 ~抽象方法 : 没有方法体的方法 ~抽象类:包含 阅读全文
posted @ 2022-07-03 20:17 夫君 阅读(74) 评论(0) 推荐(0) 编辑
摘要:1. Java只支持单继承,不支持多继承 //一个类只能有一个父类,不可以有多个父类。 class C extends A{} //ok class C extends A,B... //error 2. Java支持多层继承(继承体系) class A{} class B extends A{} 阅读全文
posted @ 2022-07-03 20:03 夫君 阅读(23) 评论(0) 推荐(0) 编辑
摘要:父类空间优先于子类对象产生 在每次创建子类对象时,先初始化父类空间,再创建其子类对象本身。目的在于子类对象中包含了其对应的父类空 间,便可以包含其父类的成员,如果父类成员非private修饰,则子类可以随意使用父类成员。代码体现在子类的构 造方法调用时,一定先调用父类的构造方法。理解图解如下: su 阅读全文
posted @ 2022-07-03 19:52 夫君 阅读(30) 评论(0) 推荐(0) 编辑
摘要:当类之间产生了关系,其中各类中的构造方法,又产生了哪些影响呢? 首先我们要回忆两个事情,构造方法的定义格式和作用。 1. 构造方法的名字是与类名一致的。所以子类是无法继承父类构造方法的。 2. 构造方法的作用是初始化成员变量的。所以子类的初始化过程中,必须先执行父类的初始化动作。子类的构 造方法中默 阅读全文
posted @ 2022-07-03 19:25 夫君 阅读(18) 评论(0) 推荐(0) 编辑
摘要:成员方法不重名 如果子类父类中出现不重名的成员方法,这时的调用是没有影响的。对象调用方法时,会先在子类中查找有没有对 应的方法,若子类中存在就会执行子类中的方法,若子类中不存在就会执行父类中相应的方法。代码如下: class Fu{ public void show(){ System.out.pr 阅读全文
posted @ 2022-07-01 10:19 夫君 阅读(22) 评论(0) 推荐(0) 编辑
摘要:成员变量不重名 如果子类父类中出现不重名的成员变量,这时的访问是没有影响的。代码如下: class Fu { // Fu中的成员变量。 int num = 5; } class Zi extends Fu { // Zi中的成员变量 int num2 = 6; // Zi中的成员方法 public 阅读全文
posted @ 2022-07-01 10:08 夫君 阅读(29) 评论(0) 推荐(0) 编辑
摘要:概述 由来 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要 继承那一个类即可。如图所示: 其中,多个类可以称为子类,单独那一个类称为父类、超类( superclass)或者基类。 继承描述的是事物之间的所属关系,这种关系是: is-a 的关系。例 阅读全文
posted @ 2022-07-01 09:28 夫君 阅读(89) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示