java学习
文章平均质量分 69
Cpdr
confidence,persistence,determination,responsibility
展开
-
【java学习—十五】经典例题:生产者/消费者问题(7)
生产者 (Productor) 将产品交给店员 (Clerk) ,而消费者 (Customer)从店员处取走产品,店员一次只能持有固定数量的产品 ( 比如 4 ),如果生产者试图生产更多的产品,店员会叫生产者停一下,如果店中有空位放产品了再通知生产者继续生产;如果店中没有产品了,店员会告诉消费者等一下,如果店中有产品了再通知消费者来取走产品。生产者比消费者快时,消费者会漏掉一些数据没有取到。消费者比生产者快时,消费者会取相同的数据。原创 2023-11-17 14:47:21 · 76 阅读 · 0 评论 -
【java学习—十五】线程的通信(6)
使当前线程进入等待(某对象)状态 ,直到另一线程对该对象发出 notify ( 或 notifyAll) 为止。:令当前线程挂起并放弃 CPU 、同步资源,使别的线程可访问并修改共享资源,而当前线程排队等候再次对资源的访问。在当前线程被 notify 后,要重新获得监控权,然后从断点处继续代码的执行。调用此方法后,当前线程将释放对象监控权 ,然后进入等待。运行结果:(先执行支付宝的线程,再执行微信的线程):当前线程必须具有对该对象的监控权(加锁):当前线程必须具有对该对象的监控权(加锁)原创 2023-11-16 19:43:41 · 65 阅读 · 1 评论 -
【java学习—十五】线程的同步与死锁(5)
同一个账户,支付宝转账,微信转账。当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一个线程参与进来执行。不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成了线程的死锁。对多条操作共享数据的语句,只能让一个线程都执行完,在执行过程中,其他线程不可以参与执行。如果在其他的方法中也有synchronized(this)的代码块,使用的都是同一个同步锁。在普通方法上加同步锁synchronized,锁的是整个对象,不是某一个方法。原创 2023-11-16 17:25:37 · 63 阅读 · 0 评论 -
【java学习—十五】线程的生命周期(4)
在某种特殊情况下,被人为挂起或执行输入输出操作时,让出 CPU 并临时中止自己的执行,进入阻塞状态;Java 语言使用 Thread 类及其子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如下的。: 当一个 Thread 类或其子类的对象被声明并创建时,新生的线程对象处于新建状态;后,将进入线程队列等待 CPU 时间片,此时它已具备了运行的条件;:当就绪的线程被调度并获得处理器资源时 , 便进入运行状态,:线程完成了它的全部工作或线程被提前强制性地中止。线程的生命周期:线程从生到死的整个经历。原创 2023-11-16 15:36:54 · 54 阅读 · 0 评论 -
【java学习—十五】Thread类的有关方法(3)
当某个程序执行流中调用其他线程的 join() 方法时,调用线程将被阻塞,直到 join() 方法加入的 join 线程执行完为止。令当前活动线程在指定时间段内放弃对 CPU 控制 , 使其他线程有机会被执行 , 时间到后重排队。暂停当前正在执行的线程,把执行机会让给优先级相同或更高的线程。抛出 InterruptedException 异常。虽然设置了t1的优先级高于t0,但是优先级只是。问题,概率高的不一定就先执行(只是先执行的可能更大)若队列中没有同优先级的线程,忽略此方法。:强制线程生命期结束。原创 2023-11-16 10:29:01 · 44 阅读 · 0 评论 -
【java学习—十五】创建多线程的两种方式(2)
如果在一个方法里有1000行代码,前300行、中间300行、后400行这三段代码没有因果关系,这种情况我们就可以使用线程处理,把前中后三段代码分别放在不同线程中去运行,这样三段代码就是并行运行的。(5)调用 Thread 类的 start 方法:开启线程,调用Runnable 子类接口的 run 方法。:指定创建线程的目标对象,它实现了 Runnable接口中的 run 方法。(4)调用线程对象 start 方法:启动线程,调用 run 方法。(2)子类中重写 Runnable 接口中的 run 方法。原创 2023-11-15 20:57:53 · 48 阅读 · 0 评论 -
【java学习—十五】线程(1)
有一个进程是浏览器(看网页),比如用百度搜索,需要等待百度那边的服务器通过网络给你展示搜索的内容,这个等待的过程需要时间,如果网速越慢,等待的时间就越长。假设:在进程上跑的代码是主程序,当其中的第三行代码是开启线程的,那么,开启线程之后线程运行的代码就和主程序并行(它们之间就不相干了)在浏览器等待百度服务器响应的这段时间,先让这个进程占用的CPU干点别的事情,等响应回来了再继续使用。进程 (process) 是程序的一次执行过程,或是正在运行的一个程序。因为多线程是进程的支流,当分支之后,就各走各的。原创 2023-11-15 19:26:12 · 49 阅读 · 0 评论 -
【java学习—十四】java动态代理(6)
问题:假设一个java项目有100个java类,每个java有10个方法,这总共有1000个方法,现在有这样一个需求,需要在每个java方法加上2句话:在方法执行前输出这个方法开始执行;在方法执行后输出这个方法已经完成。这么多方法不可能在每个方法中一一实现解决办法:动态代理。原创 2023-11-15 15:59:14 · 50 阅读 · 0 评论 -
【java学习—十四】反射机制调用指定方法、指定属性(5)
④若原方法声明为 private, 则需要在调用此 invoke() 方法前,显式调用方法对象的。在反射机制中,可以直接通过 Field 类操作类中的属性,通过 Field 类提供的。: 返回此 Class 对象表示的类或接口的指定的(包括私有的) Field。,在使用 set() 和 get() 方法时,首先要使用 Field 类中的。通过反射,调用类中的方法,通过 Method 类完成。进行调用,并向方法中传递要设置的 obj 对象的参数信息。:返回此 Class 对象表示的类或接口的指定的。原创 2023-11-15 11:02:15 · 216 阅读 · 0 评论 -
【java学习—十四】反射机制获取类的属性和包(4)
返回此 Class 对象所表示的类或接口的。:返回此 Class 对象所表示的类或接口的。: 以整数形式返回此 Field 的修饰符。:得到 Field 的属性类型。子类Student:公有属性有。:返回 Field 的名称。和继承父类Person中的。(2)获取类的所有属性。(3)返回包所在的名称。原创 2023-11-15 09:36:57 · 60 阅读 · 0 评论 -
【java学习—十四】反射获取类的父类、接口、构造方法、方法(3)
其中父类为Person类,子类为Student类,两种接口分别为Move和Study两种,用来描述上学方式和学习范围。③取得参数的类型: public Class原创 2023-11-14 20:03:26 · 733 阅读 · 0 评论 -
【java学习—十四】Class类(2)
已知一个类的全类名,且该类在类路径下,可通过Class 类的静态方法 forName() 获取,可能抛出 ClassNotFoundException。反射可以得到的信息:某个类的属性、方法和构造器、某个类到底实现了哪些接口。对于每个类而言, JRE 都为其保留一个不变的 Class 类型的对象。:若已知具体的类,通过类的 class 属性获取。该方法最为安全可靠,程序性能最高。:已知某个类的实例,调用该实例的 getClass() 方法获取 Class 对象。其他方式 ( 不做要求 )原创 2023-11-14 16:02:37 · 187 阅读 · 0 评论 -
【java学习—十四】反射机制概述(1)
Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于。取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。③在运行时判断任意一个类所具有的成员变量和方法。④在运行时调用任意一个对象的成员变量和方法。①在运行时判断任意一个对象所属的类。②在运行时构造任意一个类的对象。(2)java反射原理。原创 2023-11-14 15:14:58 · 51 阅读 · 0 评论 -
【java学习—十三】随机存取流(6)
RandomAccessFile 对象包含一个记录指针,用以标示当前读写处的位置。只是在帮助数据进行传输 , 并对传输的数据进行处理,比如过滤处理、转换处理等。随机存取流 RandomAccessFile。②可以向已存在的文件后追加内容。随机读取tt10.txt里面的内容。的地可以是文件、显示器或者其他设备。” 的方式,程序可以直接跳到文件的。①支持只访问文件的部分内容。随机写tt10.txt里面的内容。字节流 - 缓冲流(重点)字符流 - 缓冲流(重点)处理数据时,一定要先明确。可以是文件,可以是键盘。原创 2023-11-14 14:47:35 · 55 阅读 · 0 评论 -
【java学习—十三】处理流之六:对象流(5)
假设有一个Person对象正是因为(对象的持久化)和,需要做这两件事,就产生了对象的输入与输出。原创 2023-11-14 11:01:50 · 79 阅读 · 0 评论 -
【java学习—十三】处理流之四和五:打印流和数据流(4)
该知识点了解即可。原创 2023-11-14 09:45:08 · 58 阅读 · 0 评论 -
【java学习—十三】处理流之三:标准输入输出流(3)
的类型是 PrintStream ,其是 OutputStream 的子类 FilterOutputStream的子类。上面这段代码运行之后,可以在控制台输入任意字符,输入完毕后点击回车键,控制台会输出刚才输入的内容。把控制台输入的内容写到指定的txt文件中,当接收到字符串over,就结束程序的运行。分别代表了系统标准的输入和输出设备,默认输入设备是键盘,输出设备是显示器。“over”后,保存输入的字符,程序结束运行。的类型是 InputStream。通过 System 类的。方法对默认设备进行改变。原创 2023-11-05 20:34:28 · 120 阅读 · 0 评论 -
【java学习—十三】处理流之二:转换流(2)
将tt5.txt文件中的内容输出到控制台。其中tt5.txt里面的内容是“会当凌绝顶”。用于将要写入到字节流中的字符按指定字符集编码成字节。用于将字节流中读取到的字节按指定字符集解码成字符。当字节流中的数据都是字符时,转成字符流操作更高效。将“你好你好”字符串输出到tt6.txt文件中。原创 2023-11-05 20:00:12 · 376 阅读 · 0 评论 -
【java学习—十三】处理流之一:缓冲流(1)
将D:/java_doc/eclipse-workspace/demo/src/day13/tt1.txt 的内容复制到 D:/java_doc/eclipse-workspace/demo/src/day13/tt2.txt 中。将D:/java_doc/eclipse-workspace/demo/src/day13/tt.txt 的内容输入到控制台,其中tt.txt的内容为:“这个是tt.txt文件里的内容”运行结果:(程序会创建tt1.txt文件,打开tt1.txt文件会看到里面的内容)原创 2023-11-05 18:50:17 · 116 阅读 · 0 评论 -
【java学习—十二】文件字符流(3)
将D:/test/abc/tt5.txt拷贝到D:/test/abc/cc/tt5.txt。(cc目录下的tt5.txt文件会在程序执行中自己创建)会在D:/test/abc/目录下创建一个tt5.txt文件,并且该文件的内容是字符串“hello world”。注意区别:前一篇文章讲的字节流,其中创建的是byte数组;将D:/test/abc/tt1.txt输入到java控制台。(3)调用流对象的读取方法将流中的数据读入到数组中。(1)建立一个流对象,将已存在的一个文件加载进流。原创 2023-11-05 11:10:33 · 109 阅读 · 0 评论 -
【java学习—十二】文件字节流(2)
举例:在D:/test/abc/中创建一个tt2.txt文件,并向其输出“zhongguokuangyedaxue”字符串。的文件(图片、压缩包等等),因为字节流直接使用二进制。编写一个程序,把一个文件复制到指定文件夹下:将。tt1.txt文件内容为:aaaa。原创 2023-11-04 10:43:49 · 106 阅读 · 0 评论 -
【java学习—十二】io流(1)
先把图片转化为一个数据集合(例如二进制),把这些数据一点一点传到文件夹,这个传递过程就很类似于水的流动,我们就可以称这个整体的数据集合是一个数据流。File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身(类似于,你可以把一个txt文件放在各种地方,但是不能在txt文件中进行写操作)。:例如一个txt文件,其中有100行数据,可以直接读取第50行数据,也可以在第89行插入数据(具体哪一行,由开发人员决定),这个才是随机的概念。,用以获取不同种类的数据,并通过标准的。原创 2023-11-03 21:14:48 · 126 阅读 · 0 评论 -
【java学习—十一】注解:Annotation(3)
定义新的 Annotation 类型使用@interface关键字Annotation 的成员变量在 Annotation 定义中以无参数方法的形式来声明,其方法名和返回值定义了该成员的名字和类型 .可以在定义 Annotation 的成员变量时为其指定初始值 , 指定成员变量的初始值可使用 default 关键字没有成员定义的 Annotation 称为标记;包含成员变量的 Annotation 称为元数据 Annotation。原创 2023-11-01 10:40:34 · 69 阅读 · 0 评论 -
【java学习—十一】枚举类(2)
在某些情况下,一个类的对象是有限而且固定的。例如季节类,只有4个对象;①手动实现枚举类:• private 修饰构造器• 属性使用 private final 修饰• 把该类的所有实例都使用 public static final 来修饰//Season.SPRING,这段执行就是获取一个Season的对象//每次执行Season.SPRING获得的是相同的对象,枚举类中的每个枚举都是单例模式的//返回true。原创 2023-11-01 09:49:49 · 65 阅读 · 0 评论 -
【java学习—十一】泛型(1)
其主要原理是在类声明时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。在泛型方法中可以定义泛型参数,此时,参数的类型就是传入数据的类型。在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦除,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。接口时,指定接口的泛型的具体数据类型,这个类实现接口所有方法的位置都要替换实际的具体数据类型。①未传入泛型实参时,与泛型类的定义相同,在声明类的时候,需将泛型的声明也一起加到类中。泛型,JDK1.5新加入的,解决数据类型的。原创 2023-10-31 09:11:12 · 454 阅读 · 0 评论 -
【java学习—十】操作集合的工具类Collections(8)
中提供了大量方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象设置不可变、对集合对象实现同步控制等方法。:根据指定的 Comparator 产生的顺序对 List集合元素进行排序。:根据 Comparator 指定的顺序,返回给定集合中的最大元素。:根据 Comparator 指定的顺序,返回给定集合中的最小元素。:将指定 list 集合中的 i 处元素和 j 处元素进行交换。:根据元素的自然顺序,返回给定集合中的最大元素。:根据元素的自然顺序,返回给定集合中的最小元素。原创 2023-10-30 15:40:54 · 370 阅读 · 0 评论 -
【java学习—十】Map集合(7)
引用类型的数据,Map 中的 Key 不允许重复,即同一个 Map 对象的任何两个 Key 通过 equals 方法比较中返回 false。Hashtable 、 HashMap 判断两个 Key 相等的标准是:两个 Key 通过 equals 方法返回 true , hashCode 值也相等。的数据,因此 Map 集合里保存着两组值,一组值用于保存 Map 里的 Key ,另外一组用于保存 Map 里的 Value;• Hashtable 是一个古老的 Map 实现类,不建议使用。原创 2023-10-30 10:51:57 · 50 阅读 · 0 评论 -
【java学习—十】List集合(6)
List 代表一个元素有序、且可重复的集合,集合中的每个元素都有其对应的顺序索引。• ArrayList 是线程不安全的,而 Vector 是线程安全的。• Vector 是一个古老的集合,通常建议使用 ArrayList。• 即使为保证 List 集合线程安全,也不推荐使用 Vector。List 允许使用重复元素,可以通过索引来访问指定位置的集合元素。List 集合里添加了一些根据索引来操作集合元素的方法。List 默认按元素的添加顺序设置元素的索引。原创 2023-10-30 09:53:00 · 55 阅读 · 0 评论 -
【java学习—十】TreeSet集合(5)
• 必须放入同样类的对象 ,( 默认会进行排序 ) 否则可能会发生类型转换异常 ,可以使用泛型来进行限制。TreeSet 是 SortedSet 接口的实现类, TreeSet 可以确保集合元素处于排序状态。如果需要实现定制排序,则需要在创建 TreeSet 集合对象时,提供一个。• 如果 this = obj, 返回 0 ,则认为这两个对象相等。默认情况下, TreeSet 采用自然排序。默认情况下, TreeSet 采用自然排序。: TreeSet 会调用集合元素的。举例2:实现其他功能。原创 2023-10-30 09:18:06 · 52 阅读 · 0 评论 -
【java学习—十】HashSet集合(4)
Java 集合类存放于 java.util 包中,是一个用来存放对象的容器。① 集合只能存放对象。比如你存一个 int 型数据 1 放入集合中,其实它是自动转换成 Integer类后存入的, Java 中每一种基本类型都有对应的引用类型。② 集合存放的是多个对象的引用,对象本身还是放在堆内存中。③ 集合可以存放不同类型,不限数量的数据类型。Java 集合可分为 Set 、 List 和 Map 三种大体系Set :无序、不可重复的集合List :有序,可重复的集合。原创 2023-10-29 21:20:22 · 137 阅读 · 0 评论 -
【java学习—十】抛出异常(3)
用户自定义异常类 MyException ,用于描述数据取值范围错误信息。用户自己的异常类必须继承现有的异常类。B b = null;int age;System.out.println("年龄是:" + this.age);}else {throw new Exception("年龄不在0 ~ 150之间");System.out.println("年龄是:" + this.age);}else {原创 2023-10-29 20:17:47 · 339 阅读 · 0 评论 -
【java学习—十】捕获异常(2)
int i = 0;//由于异常,使中断try捕获异常的第一步是用 try{…} 语句块选定捕获异常的范围,将可能出现异常的代放在 try 语句块中。在 catch 语句块中是对异常对象进行处理的代码。每个 try 语句块可以伴随一个多个catch 语句,用于处理可能产生的不同类型的异常对象。如果明确知道产生的是何种异常,可以用该异常类作为 catch 的参数;也可以用父类作为 catch 的参数。原创 2023-10-28 16:54:56 · 129 阅读 · 0 评论 -
【java学习—十】异常(1)
任何一种程序设计语言设计的程序在运行时都有可能出现错误,例如除数为 0 ,数组下标越界,要读写的文件不存在等等。捕获错误最理想的是在编译期间,但有的错误只有在运行时才会发生。对于这些错误,一般有两种解决方法:①遇到错误就终止程序的运行。②由程序员在编写程序时,就考虑到错误的检测、错误消息的提示,以及错误的处理。常见异常:(1)错误的类型转换(2)数组下标越界(3)空指针访问(1)从一个不存在的文件中读取数据(2)越过文件结尾继续读取 EOFException。原创 2023-10-28 15:45:37 · 83 阅读 · 0 评论 -
【java学习—九】面向对象内容总结(8)
文章目录原创 2023-10-28 10:43:47 · 50 阅读 · 0 评论 -
【java学习—九】内部类(7)
前者称为内部类,后者称为外部类。(2)Inner class 一般用在定义它的。原创 2023-10-28 10:38:02 · 64 阅读 · 0 评论 -
【java学习—九】工厂方法FactoryMethod(6)
是设计模式中应用最为广泛的模式,在面向对象的编程中,对象的创建工作非常简单,对象的创建时机却很重要。FactoryMethod 解决的就是这个问题,它通过面向对象的手法,将所要创建的具体对象的创建工作延迟到了子类,从而提供了一种扩展的策略,较好的解决了这种紧耦合的关系。通过工厂把new对象给隔离,通过产品的接口可以接收不同实际产品的实现类。实现的类名的改变不影响其他合作开发人员的编程。上图中①是BMW的产品接口,②是产品工厂的接口。注:图中原作者出现笔误,BMW错拼成了BWM。(1)开发人员A的工作。原创 2023-10-27 20:49:20 · 75 阅读 · 0 评论 -
【java学习—九】接口 interface(5)
当需要对一系列动作抽象,就使用接口,需要使用这些动作的类就去’实现’相应的接口即可。但有时我们又需要给父类增加一些方法,那么就不能直接在父类上下手,只能新建一个接口,在接口上扩展方法,其他需要这些方法的子类自行去实现接口。有了接口,就可以得到多重继承的效果。从这个假设上可以看出,父类需要是稳定的抽象类,如果父类经常在变化,那么基于这个父类的子类、子类的子类,…上图所示就没有提供接口中所有方法的具体实现内容,所以会报错,修改方法:将其改成抽象类。,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。原创 2023-10-27 17:05:41 · 98 阅读 · 0 评论 -
【java学习—九】模板方法(TemplateMethod)设计模式(4)
抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式。抽象类就像一个大纲,里面的抽象方法就是每个章节的标题;子类去根据这些标题把每个章节的内容写出来。原创 2023-10-26 17:33:25 · 260 阅读 · 0 评论 -
【java学习—九】抽象类和抽象方法(3)
abstract关键字:(1)用abstract 关键字来修饰一个类时,这个类叫做抽象类;(2)用abstract关键字来修饰一个方法时,该方法叫做抽象方法。抽象方法:只有方法的声明,没有方法的实现。注意:①含有抽象方法的类必须被声明为抽象类。②抽象类不能被实例化。抽象类是用来作为父类被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体。若没有重写全部的抽象方法,仍为抽象类。③不能用abstract修饰属性、私有方法、构造器、静态方法、 final 的方法。原创 2023-10-26 17:05:12 · 127 阅读 · 0 评论 -
【java学习—九】关键字final(2)
注意:final 标记的成员变量必须在声明的同时或在每个构造方法中或代码块中。时,可使用关键字 final 来修饰 , 表示“最终”。标记的变量 ( 成员变量或局部变量 ) 即称为。提高安全性,提高程序的可读性。标记的方法不能被子类重写。在 Java 中声明。原创 2023-10-26 15:43:35 · 50 阅读 · 0 评论