
java语言学习
文章平均质量分 51
暖仔会飞
这个作者很懒,什么都没留下…
展开
-
java多线程编程:关于 synchronized 的一点理解;synchronized 的应用场景;形象举例如何正确加 synchronized
文章目录应该关注的问题锁是怎么产生的synchronize 关键字锁的是谁锁非静态方法(实例方法)锁静态方法应该关注的问题锁是怎么产生的synchronized 关键字锁的是谁需要等待的是谁怎么上锁才是对的锁是怎么产生的这里你只需要记住一句话:每个对象产生的时候自己就带了一把锁我知道你以前可能想的是:我们需要创建一把锁,然后把。。。锁住,其实不是的,每个对象在产生的时候,自己就有一把锁,只是你看不见,只有再用 synchronized 的时候才能有用比如现在你有一个 Toilet原创 2022-03-23 00:16:01 · 346 阅读 · 0 评论 -
Java学习之:观察者模式(Observer)
文章目录核心设计类图案例代码核心设计一个 subject 里面聚合了一个观察者的列表,你可以把这个 subject 看做是目标对象,也就是观察者的观察对象观察者也把 subject 作为一个属性subject 中的某个行为会触发观察者的某些行为observer 设计成抽象类是为了扩展,可以产生很多不同的观察者,都观察这个 subject类图案例代码subject 是一个厨师obeserver 分两种:端茶 observer 和 上菜 observer每次厨师做好一个菜,端茶的就去原创 2021-10-05 15:16:22 · 414 阅读 · 0 评论 -
Java设计模式:装饰者模式(Decorator)
核心设计装饰者类:引用基础类继承基础类(实现基础类的接口)类图基础类是 Shape (基础接口)装饰类通过同时实现基础类接口和引用基础类达到可以继续扩展的目的原本通过 Shape 类可以画 Circle 和 Rectangle装饰者类通过引用 Shape 达到了原有的目的,通过 实现 Shape 接口保持自己也具有和 Shape 同样的身份(属性),从而我们在程序中调用 ShapeDecorator 及其子类对象的时候,就可以通过 Shape 类型来接受他们;而不用涉及新的类原创 2021-10-04 17:42:33 · 685 阅读 · 0 评论 -
Java设计模式:外观模式(Facade)
设计核心外部系统调用另外一个系统复杂的功能的时候,不必关注其内部实现和调度,只需要通过一个封装好的调度器进行统筹调度即可类图ShapeMaker 可以看做是一个外观类(调度器)他里面集合了所有的子系统中的对象,这样就可以只通过操作这个外观类而获得想要的功能,但是却没有必要关注 Shape 这个系统里面是怎么进行具体操作的优缺点优点:减少系统相互依赖。提高灵活性。提高了安全性。缺点: 不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。使用场景:为复杂的模块或子系统提供原创 2021-10-04 16:14:39 · 255 阅读 · 0 评论 -
java设计模式:适配器模式(类适配器和对象适配器)
文章目录类适配器代码对象适配器代码类适配器SDCard 是一个接口,代表了 SD 卡本身具有的功能SDCardImpl 是一个具体的实现类,代表了 SDCard 一种具体的实现形式TFCard 是一个接口,代表了 TF 卡本身具有的功能TFCardImpl 是一个具体的实现类,代表了 TFCard 一种具体的实现形式computer 只有一个读取卡中信息的接口,他必须接受一个 SDCard 类型的参数;也就是说 computer 只能接受 SDCard 中规定的数据规范但现在想让 compu原创 2021-09-27 20:12:56 · 576 阅读 · 0 评论 -
Java学习之:如何将 java 程序打包成 .jar 文件
文章目录开始打包打开文件结构选中 Artifacts,点 “+”from modules with dependencies选择想打包的 module选择 Server Module 中的 main 函数所在的文件确认即可对 Client Module 重复以上操作在左侧的栏中,可以看到我们已经初步完成了 jar 包的构建完成上述步骤,src 中会出现 META-INF 这个文件夹将刚才预备好的 jar Artifacts build 成 真正的 jar 文件选择 All Artifacts 进行 Bui原创 2021-09-19 17:11:32 · 19530 阅读 · 0 评论 -
Java学习之:Java天坑:BufferedWriter, BufferedReader 等,以及 Input\outputstream关闭,socket 就关闭的问题。。。
解决办法就是要把你发送的字符串后面加 \r\n 就解决了。加上这句话你的 socket 不需要关闭就可以完成 input、output 流的传输了。BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(chat.getSocket().getOutputStream())); bw.write(。。。+"\r\n"); bw.flush();...原创 2021-09-16 00:07:14 · 456 阅读 · 0 评论 -
Java学习之:反射机制(5)扩展:(越过泛型检查)通过反射机制在 ArrayList中添加不同类型的元素
代码这里 arrayList 定义为存放 Integer 类型的列表因为 add 本身是 object 类型的,因此我们在反射的时候就能实现往列表中添加 object 类型的数据。package 反射;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.原创 2021-09-14 14:43:29 · 799 阅读 · 1 评论 -
Java学习之:反射机制(4)反射获取成员方法并使用
通过反射获取成员方法c.getMethod()c.getDeclaredMethod(name, 形参.class)通过反射创建对象c.getConstructor()c.newInstance()通过对象调用成员方法method.invoke(obj, 实参)代码示例package 反射;import java.sql.Struct;public class Student { private String name; private int age;.原创 2021-09-14 14:33:59 · 331 阅读 · 0 评论 -
Java学习之:反射机制(3)通过反射获得对象的成员变量,并给对象的成员变量赋值
代码演示package 反射;import java.sql.Struct;public class Student { private String name; private int age; private String address; public Student(){ } public Student(String name, int age, String address){ this.name = name;..原创 2021-09-14 14:14:42 · 774 阅读 · 0 评论 -
Java学习之:反射机制(2)扩展:暴力反射——通过私有构造方法进行对象创建
文章目录con.setAccessible(True)con.setAccessible(True)通过 .getDeclaredConstructor() 获得一个私有的构造器对私有构造器的 accessble 设置为 true进行对象创建package 反射;import java.sql.Struct;public class Student { private String name; private int age; private String ad原创 2021-09-14 13:48:00 · 357 阅读 · 0 评论 -
Java学习之:Java反射机制(2):通过反射获得构造方法用来创建对象
文章目录获取构造方法的几种方式获取多个构造函数的方式获取单个构造函数的方式通过反射获取的构造方法创建对象通过反射构建对象的完整步骤反射的简单联系题目要求代码获取构造方法的几种方式获取多个构造函数的方式getConstructors():获取所有的 public 的构造方法getDeclaredConstructors():获取所有的构造方法这两种方式获取的都是构造函数的列表,即很多个构造函数放在一起获取单个构造函数的方式getConstructor(…)getDeclaredCons原创 2021-09-14 13:43:04 · 340 阅读 · 0 评论 -
Java学习之:Java反射机制(1)三种获得类对象的方式
文章目录类名.class对象.getClass()类名.forName("完整路径")类名.class对象.getClass()类名.forName(“完整路径”)第一种方式最方便最后一中的灵活性最高,因为可以把字符串中的内容放在配置文件中,更改随意...原创 2021-09-14 13:15:59 · 141 阅读 · 0 评论 -
java学习之:网络编程(1)网络编程三要素;java 和 python 混合实现 UDP 通信程序
文章目录网络编程三要素基于 UDP 协议的通信程序java 写发送端python写接收端java 写 UDP 接收端网络编程三要素ip 地址:找到计算机的唯一标识端口:找到一个计算机中应用程序的唯一标识通信协议:计算机之间交互的规则基于 UDP 协议的通信程序java 写发送端package 网络编程.入门;import java.io.IOException;import java.net.*;import java.util.Scanner;import java.util.原创 2021-09-05 20:05:37 · 191 阅读 · 0 评论 -
java学习之:多线程编程(6)生产者消费者模式代码
文章目录生产者消费者共享数据区主程序代码运行结果生产者package 多线程.生产者消费者模式2;public class Producer implements Runnable { private MilkBox box; public Producer(MilkBox box){ this.box = box; } @Override public void run() { for (int i = 0; i <原创 2021-09-05 16:01:28 · 301 阅读 · 0 评论 -
java学习之:多线程编程(5)Lock 锁
文章目录实现线程同步的方法Lock 接口的实现类实现资源上锁实现线程同步的方法对代码块加 synchronized (obj) 关键字对方法加 synchronized (this) 关键字对类加 synchronized (Class.class) 关键字使用线程安全(同步安全)的类:HashtableVectorStringbuffer使用 Collections 中的 synchronizedList 等方法: Collections.synchronizedList(new原创 2021-09-05 13:36:47 · 142 阅读 · 0 评论 -
java学习之:多线程编程(4)线程安全的类;如何使用 Collections 中的方法实现线程安全
什么叫做线程安全的类这个类中的所有方法,都使用了 sychronized 关键字来修饰,保证使用这些方法的时候,多个线程之间都是安全的,同步的。线程安全的类StringBufferHashtableVector线程不安全的类StringBuilderHashMapArrayList如果不涉及到同步问题,建议使用线程不安全的类来代替线程安全的类,因为这样可以节省资源,运行效率会更高。实际应用实际应用中,通常使用 Collections 中的 :synchronized原创 2021-09-05 13:15:38 · 263 阅读 · 0 评论 -
Java学习之:多线程编程(3)线程同步
线程同步sychronized 关键字对代码块、方法、静态方法进行上锁sychronized(任意对象)同步代码块如果是 同步一个代码块,那么 这个 任意对象 可以随便设定一个,比如:同步方法如果是对一个方法进行锁定,那么这个 任意对象 默认是 this同步静态方法总结:普通代码块:任意对象即可普通方法:使用 this 进行同步静态方法:使用 类名.class 进行同步...原创 2021-09-04 23:27:26 · 123 阅读 · 0 评论 -
java学习之:多线程编程(2)线程的优先级;线程的阻塞和等待;线程守护;线程的中断
文章目录线程的优先级线程的阻塞和等待线程守护线程的生命周期线程的中断线程的优先级Java 采用的是抢占式的 cpu 调度方式(有些系统采用的是平均式的 cpu 调度系统)因此需要对线程设置优先级来抢占 cpu 的时间片java 线程的优先级只有三种常量,不能随意更改,只能在 1-10 范围内。t.setPriority(); 更改线程优先级t.getPriority() 获取线程优先级线程的优先级高,只能代表他获得 cpu 时间片的几率比较大,并不能保证他最先执行线程的阻塞和等待原创 2021-09-04 23:13:36 · 317 阅读 · 0 评论 -
java学习之:多线程编程(1)创建并实现线程
文章目录新建 Thread 类使用 Lamba 表达式创建线程注意常用来创建线程的类、方法新建 Thread 类要想新建线程,必须要有一个 run 方法。新建的 MyThread 类必须继承自 Thread 类,因为 Thread 类里面实现了 start 方法如果一个类只实现了 Runnable 接口,但没有继承 Thread 类,照样不能创建新的线程。使用 Lamba 表达式创建线程注意创建并运行新线程使用的是 .start() 方法,而不是 .run() 方法run()原创 2021-09-04 16:37:04 · 159 阅读 · 0 评论 -
Java学习之 java初始化二维数组、object.equals 和 Class.equals 的不同、java 字符串常用方法、equals 方法
文章目录○ 二维数组初始化○ Object.equals ? Class.equals字符串字符串比较○ 二维数组初始化正常的二维数组初始化与一维数组无异:由于 java 中的二维数组每一行的元素个数可以不同,因此,我们初始化特殊的二维数组的时候,如果不指定第二个维度的数据内容,那么需要对二维数组的每一行进行单独初始化图中的第二段代码需要结合以下代码共同完成初始化:这样虽然有一些麻烦,但是可以更加灵活地设计数组(每个行的个数不同)○ Object.equals ? Cl原创 2021-03-20 14:07:00 · 286 阅读 · 0 评论 -
Java学习之:内部类的相关知识
文章目录一、内部类的分类和定义1.1 成员内部类的定义1.2 成员内部类的使用方法1.3 内部类的同名变量的访问方法2.1 局部内部类的定义2.2 局部内部类的使用方法2.2.1 局部内部类的 final 问题2.2.2 匿名内部类(**重点)2.2.3 匿名内部类的注意事项二、内部类修饰符注意事项一、内部类的分类和定义1.1 成员内部类的定义成员内部类,就是内部类的定义和成员变量在同一个位置;成员内部类中也可以有内部类方法1.2 成员内部类的使用方法间接方式: 在外部类的方法当中,使用内原创 2020-12-07 14:14:38 · 181 阅读 · 0 评论 -
Java学习之:四种权限修饰符及其访问情况
原创 2020-12-06 17:15:39 · 173 阅读 · 0 评论 -
Java学习之:final 关键字的用法总结
final关键字常用的4种用法可以用来修饰一个类可以用来修饰一个方法可以用来修饰一个局部变量可以用来修饰一个成员变量对于类、方法来说:abstract 关键字和 final 关键字不能同时使用,因为 abstract 修饰的抽象类或者方法一定要通过覆盖重写才有意义,而 final 定义的东西都不能再被重写,所以矛盾final 修饰一个类格式: public final class 类名称 {方法体} 要把 final 放到 class 之前final 修饰的类称为太原创 2020-12-06 17:07:28 · 301 阅读 · 0 评论 -
Java学习之:面向对象三大特征之:多态知识点的总结
文章目录多态的使用多态的概念多态的格式与使用多态中成员变量的使用特点多态中成员方法的使用特点【多态中成员变量的调用和成员方法的使用的对比】多态存在的意义对象的上下转型对象的向上转型对象的向下转型多态的使用多态的概念继承和接口的实现是多态的前提;不同的形态起源于不同的类,例如下图:- 小明是学生类创建出的对象,学生类继承自 人类这个父类,所以小明既有学生类的形态,也有其父类 “人类” 的形态多态的格式与使用多态中成员变量的使用特点访问成员变量的方法有两种:直接访问: 看等号左边是谁,就原创 2020-12-06 15:29:02 · 205 阅读 · 0 评论 -
Java学习之:接口 Interface 的内容总结
文章目录接口接口的定义接口中抽象方法的定义接口中抽象方法的使用接口中的默认方法定义接口中默认方法的使用接口中的静态方法的定义接口中的静态方法的使用接口中的私有方法的定义和使用接口中的常量的定义和使用接口知识的总结接口实现过程中的注意事项接口和类之间的关系接口就是多个类的公共规范接口是一种引用数据类型,最重要的部分就是其中的抽象方法接口接口的定义public interface 接口名称 {}接口定义中可以包含哪些 组成部分:Java7:常量抽象方法Java8:常量抽原创 2020-12-06 11:37:30 · 297 阅读 · 0 评论 -
Java学习之:抽象方法和抽象类的构造及使用
文章目录抽象类和抽象方法的构造抽象类和抽象方法的使用使用抽象类和抽象方法的注意事项抽象类和抽象方法的构造在 class 前使用 abstract 修饰的类叫抽象类要构造抽象方法,其所在的类一定要是抽象类在方法面前添加 abstract 并且去掉大括号,最后用分号结尾的方法就是抽象方法抽象类和抽象方法的使用不能直接通过 new 关键字来创建抽象对象,错误示范如下:如果要使用抽象类则 必须用一个子类来继承抽象父类;而且子类必须覆盖重写(override) 父类当中所有的抽象方法,即原创 2020-12-05 17:21:49 · 364 阅读 · 0 评论 -
Java学习之:Java继承的三个特点
文章目录1. Java是单继承的2. Java 可以多级继承3. 一个父类可以有多个子类1. Java是单继承的即一个类的直接父类只能有一个因为假设可以多继承的话会产生矛盾的情况,如下:这种情况下,A类 和 C类 中都有 method 方法, 这时候通过 D 来继承 A 和 C,那么当使用 D类 中的 method 方法的时候,会产生矛盾,不知道到底应该用从 A类 中继承来的方法还是 C类 中继承来的方法2. Java 可以多级继承3. 一个父类可以有多个子类...原创 2020-12-05 16:12:26 · 382 阅读 · 1 评论 -
Java学习之:this关键字的总结
文章目录this 关键字的总结: this. 和 this() 的区别1.在本类的成员方法中,访问本类的成员变量 this.2. 在本类的成员方法中,访问另一个成员方法 this.3. 在本类的构造方法中,访问本类的另一个构造方法 this()this 关键字的总结: this. 和 this() 的区别1.在本类的成员方法中,访问本类的成员变量 this.虽然局部变量 num 和本类的成员变量重名,但是使用 this 之后依然可以非常容易地进行区分。2. 在本类的成员方法中,访问另一个成员方原创 2020-12-05 15:37:56 · 225 阅读 · 0 评论 -
Java学习之:super 关键字的用法总结
文章目录super 关键字的用法:super. 和 super() 的区别1. 在子类的成员方法中,访问父类的成员变量 super.2. 在子类的成员方法中,访问父类的成员方法 super.3. 在子类的构造方法中,访问父类的构造方法 super()super 关键字的用法:super. 和 super() 的区别1. 在子类的成员方法中,访问父类的成员变量 super.2. 在子类的成员方法中,访问父类的成员方法 super.3. 在子类的构造方法中,访问父类的构造方法 super()这原创 2020-12-05 15:06:01 · 336 阅读 · 0 评论 -
Java学习之:继承关系中,父类和子类构造方法的访问特点
文章目录回顾构造方法在继承关系中父子类构造方法的访问特点1. 子类构造方法中有一个默认隐含的 super() 来调用父类的构造方法2. 如果创建子类对象的时候想要调用父类的有参构造方法,要使用 super(参数列表)3. super() 的父类构造方法调用,必须放在子类构造方法的第一个语句,而且必须只能使用一次回顾构造方法构造方法,是在构造一个类时必须具备的, 如果不写构造方法,那么在编译的时候编译器会自动赠送一个。构造方法分为:无参构造方法有参构造方法在继承关系中父子类构造方原创 2020-12-05 14:58:14 · 458 阅读 · 0 评论 -
Java学习之:子类方法的重写
文章目录覆盖重写的注意事项1. 父子类之间的方法名称要相同,参数列表也要相同2. 子类方法的返回值范围一定要 <= 父类方法的返回值范围3. 子类方法的权限,必须 >= 父类方法的权限4. 写在后面覆盖重写的实例演示覆盖重写的注意事项1. 父子类之间的方法名称要相同,参数列表也要相同名称不同或参数列表不同都不是重写操作,性质会变成 “继承” 而非重写;为了有保障地完成重写操作,可以使用 @override 操作来帮忙验证所指定的 方法是否真的进行了重写。对于指定要重写的方法原创 2020-12-05 12:25:32 · 2269 阅读 · 0 评论 -
Java学习之:如何区分和同时调用局部变量、本类的成员变量和父类的成员变量
应用场景按照如下方式创建一个父类一个子类打印子类的成员变量、局部变量和父类的成员变量通过 this 关键字来调用本类的成员变量通过 super 关键字来调用父类的成员变量原创 2020-12-05 10:14:05 · 183 阅读 · 0 评论 -
Java学习之:static 关键字
文章目录通过 static 关键字修饰成员变量static 关键字修饰成员方法总结注意事项static 在内存中的情况静态代码块的执行特点通过 static 关键字修饰成员变量通过 static 修饰的成员变量,这个变量不再属于对象自己,而是属于整个 “类”,通过这个类创建的多个对象共享一份被 static 修饰的成员变量数据。static 关键字修饰成员方法成员方法通过 static 关键字修饰之后变成了 静态方法静态方法不属于对象,而是属于类的。不用 static 修饰的成员方法,原创 2020-12-04 23:17:46 · 158 阅读 · 0 评论 -
Java学习之:ArrayList 集合类学习
文章目录ArrayList 和数组的差距ArrayList 的注意事项ArrayList 常用方法练习题小试牛刀题目1:题目2:题目3:题目4:ArrayList 和数组的差距ArrayList 集合的长度可以随意变化,但数组的长度设定之后不能变化对于 数组 这种数据结构来说,打印出来的是地址值;但是对于 ArrayList 集合来说,直接打印的是内容,如果内容是空,那么打印的是空的中括号。ArrayList 的注意事项ArrayList 在创建的时候,要使用尖括号 <E>原创 2020-12-04 11:08:28 · 320 阅读 · 0 评论 -
Java学习之:对象数组的创建和使用
文章目录什么是对象数组对象数组实例什么是对象数组对于一个普通的数组来说:这里使用 int 创建了一个数组,存放 int 类型的数据顾名思义,如果我们 使用一个对象类型创建的数组全部用来存放这类的对象,那么这种数组就叫做对象数组。对象数组实例【定义一个 Person 标准类】public class Person { private int age; private String name; public Person(int age, String name) {原创 2020-12-03 22:19:46 · 1781 阅读 · 0 评论 -
Java学习之:匿名对象及其使用
文章目录匿名对象和普通对象的比较匿名对象和普通对象的比较对于普通创建对象的方式来说通常是按照下面这种形式对于匿名对象来说,创建格式如下:即直接通过 new 类名() 来创建一个匿名对象很显然,对于匿名对象来说,由于没有给他分配一个 变量存放它的地址,因此,匿名对象只能够使用一次就会被系统回收。所以,对于只想使用一次的对象,可以使用匿名对象来创建。...原创 2020-12-03 21:57:04 · 207 阅读 · 0 评论 -
Java学习之:使用 IDEA 构造一个标准类
文章目录1. 构造一个标准类范例2.通过 IDEA 的快捷键来构造标准类所有成员变量都要使用 private 关键字来修饰对于每一个成员变量都要有一对 getter 和 setter具备一个无参数的构造方法具备一个全参数的构造方法一个标准的 Java 类叫做 Java Bean1. 构造一个标准类范例public class Person { private int age; // 两个 private 私有化方法 private String name;原创 2020-12-03 20:27:26 · 380 阅读 · 0 评论 -
java 常用方法和命令
文章目录1. 去除字符串中的其他符号,只保留数字、字母2. 获取字符串中的每一个字符3. int[ ] 转成对应的 list 列表(这样就可以进行索引了)4. 列表 list 转成 int[ ] :直接循环遍历即可5. 删除数组 array 中所有的 null 项6. 数字的字符串类型转 int 类型7. 判断两个字符串相等的方式1. 去除字符串中的其他符号,只保留数字、字母 str = str.replaceAll("[^a-z^A-Z^0-9]", "");2. 获取字符串中的每一个字符St原创 2020-05-26 21:45:42 · 242 阅读 · 0 评论 -
Java编程练习之:两个数组的交集 II
文章目录1. 题目要求2. 相关知识2.1 Java 遍历哈希表(字典)中的所有 key2.2 Java 删除列表中的所有null项2.3 Java 实现字符串 string 类型到 int 类型的转换3. 解题思路4. 代码实现5. 结果演示1. 题目要求2. 相关知识2.1 Java 遍历哈希表(字典)中的所有 key使用 for each 来遍历所有的 key,其中:2.2 Java 删除列表中的所有null项2.3 Java 实现字符串 string 类型到 int 类型的转换原创 2020-05-19 17:07:25 · 281 阅读 · 0 评论