Java学习笔记
文章平均质量分 51
博主自己学习Java的路程
用来记录笔记滴
齐天大荒
欣赏一个人,始于颜值,敬于才华,合于性格,久于善良,终于人品。人生就是这样,和漂亮的人在一起,会越来越美;和阳光的人在一起,心里就不会晦暗;和快乐的人在一起,嘴角就常带微笑;和聪明的人在一起,做事就变机敏;和大方的人在一起,处事就不小气;和睿智的人在一起,遇事就不迷茫
展开
-
自己总结的idea快捷键
自己总结的一些常用的IDEA快捷键,有需要的拿走:ctrl+shift+alt:多行操作psvm:生成main()方法;fori:生成for循环;Ctrl+Alt+v:自动补齐返回值类型ctrl+o:覆写方法ctrl+i:实现接口中的方法ctrl+shift+u:大小写转换CTRL+SHIFT+Z:取消撤销Alt+Insert:生成构造方法、getter、setterctrl+y:删除当前行Ctrl+Shift+J:将选中的行合并成一行ctrl+g:定位到某一行Ctrl+Shitf原创 2022-01-30 22:15:01 · 475 阅读 · 0 评论 -
Java反射详解(内容爆炸的多和详细,一文让你彻底搞懂)
Java反射详解(内容爆炸的多和详细,一文让你彻底搞懂)原创 2021-12-03 21:58:52 · 2024 阅读 · 0 评论 -
Java通过反射获取泛型信息
Java通过反射获取泛型信息利用反射来获取泛型的类型(泛型信息)步骤:1.获取当前类2.获取目标字段3.获取包含泛型类型的类型getGenericType()4.强转至子类ParameterizedType因为Type没有任何对应的方法5.获得泛型真正的类型getActualTypeArguments()package reflect;import java.lang.reflect.Method;import java.lang.reflect.ParameterizedType;原创 2021-12-03 17:35:24 · 1230 阅读 · 0 评论 -
Java动态创建对象并执行方法
动态创建对象执行方法有了Class对象能做什么创建类的对象:调用Class对象的newInstance()方法类必须有一个无参数的构造器类的构造器的访问权限需要足够没有无参构造器就不能创建对象了吗?并非如此。只要在操作的时候明确的调用类中的构造器,并将参数传递进去后就可以进行实例化操作。步骤如下:通过Class类的getDeclaredConstructor(Class…parameterType)取得本类的指定形参类型的构造器向构造器的形参中传递一个对象数组进去,里面包含了构造原创 2021-12-02 21:27:12 · 2631 阅读 · 0 评论 -
Java获取类运行时的结构
获取类运行时的结构通过反射获得运行时类的完整结构Field,Method,Constructor,Superclass,Interface,Annotation实现的全部接口所继承的父类全部的构造器全部的方法全部的Field注解…package reflect;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;//获取类的信原创 2021-12-02 21:25:39 · 546 阅读 · 0 评论 -
Java类加载器详解
类加载器类加载器的作用类加载的作用:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后在堆中生成一个代表这个类的java.lang.Class对象,作为方法区中类数据的访问入口。类缓存∶标准的JavaSE类加载器可以按要求查找类,但一旦某个类被加载到类加载器中,它将维持加载(缓存)一段时间。不过JVM垃圾回收机制可以回收这些Class对象类加载器作用是用来把类(class)装载进内存的。JVM规范定义了如下类型的类的加载器。引导类加载器(bootstrap原创 2021-12-01 21:19:27 · 575 阅读 · 0 评论 -
Java类初始化详解
分析java类初始化什么时候会发生类的初始化类的主动引用(一定会发生类的初始化)当虚拟机启动,先初始化main方法所在的类new一个类的对象调用类的静态成员(除了final常量)和静态方法使用java.lang.reflect包的方法对类进行反射调用当初始化一个类,如果其父类没有被初始化,则先会初始化它的父类类的被动引用(不一定发生类的初始化)当访问一个静态域时,只有真正声明这个域的类才会被初始化。如:当通过子类引用父类的静态变量,不会导致子类初始化通过数组定义类引用,不会原创 2021-12-01 21:18:01 · 2564 阅读 · 0 评论 -
Java类加载内存分析
类加载内存分析类的加载过程加载加载,是指Java虚拟机查找字节流(查找.class文件),并且根据字节流创建java.lang.Class对象的过程。这个过程,将类的.class文件中的二进制数据读入内存,放在运行时区域的方法区内。然后在堆中创建java.lang.Class对象,用来封装类在方法区的数据结构。类加载阶段:(1)Java虚拟机将.class文件读入内存,并为之创建一个Class对象。(2)任何类被使用时系统都会为其创建一个且仅有一个Class对象。(3)这个Class对象原创 2021-12-01 21:16:20 · 293 阅读 · 0 评论 -
Java注解详解
Java注解详解理解Java注解实际上Java注解与普通修饰符(public、static、void等)的使用方式并没有多大区别,下面的例子是常见的注解public class AnnotationDemo { //@Test注解修饰方法A @Test public static void A(){ System.out.println("Test....."); } //一个方法上可以拥有多个不同的注解 @Deprecated原创 2021-11-22 22:50:10 · 219 阅读 · 0 评论 -
Java网络编程(详细TCP/UDP)
网络编程1.1 概述地球村:简单点说,就是:地球村是说地球虽然很大,但是由于信息传递越来越方便,大家交流就像在一个小村子里面一样便利,就称地球这个大家庭为“地球村”了。计算机网络:计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。网络编程的目的:无线电台、传播交流信息、数据交换、通信想要达到这个效果需要什么:如何准确定位网络上的一台主机 192.16原创 2021-11-09 20:00:31 · 608 阅读 · 0 评论 -
Java线程池
Java线程池背景经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大思路提前创建好多个线程,放入线程池中,使用时直接获取,使用完放入池中,可以避免频繁创建销毁、实现重复利用。类似生活中的公共交通工具好处提高响应速度(减少了创建新线程的时间)降低资源消耗(重复利用线程池中线程,不需要每次都创建)便于线程管理(…)corePoolSize:核心池的大小maximumPoolSize:最大线程数keepAliveTime:线程没有任务时最多保持多长时间后会终止原创 2021-11-01 19:23:21 · 93 阅读 · 0 评论 -
Java生产者消费者之信号灯法
Java生产者消费者之信号灯法package Thread;//测试生产者消费者问题:信号灯法,标志位解决public class TestPC2 { public static void main(String[] args) { TV tv = new TV(); Player player = new Player(tv); Watcher watcher = new Watcher(tv); player.start(原创 2021-10-31 18:12:14 · 104 阅读 · 0 评论 -
Java生产者消费者之管程法
Java生产者消费者之管程法package Thread;//测试生产者消费者模型——>利用缓冲区解决:管程法//生产者,消费者,产品,缓冲区public classTestPC { public static void main(String[] args) { SynContainer container = new SynContainer(); new Productor(container).start(); new Co原创 2021-10-29 00:05:32 · 158 阅读 · 0 评论 -
Java生产者消费者模型详解
Java生产者消费者模式线程通信应用场景:生产者和消费者问题假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费如果仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待,直到仓库中的产品被消费者取走为止如果仓库中放有产品,则消费者可以将产品取走消费,否则停止消费并等待,直到仓库中再次放入产品为止线程通信—分析这是一个线程同步问题,生产者和消费者共享同一个资源,并且生产者和消费者之间相互依赖,互为条件对于生产者,没有生产产品之前,要通知消费原创 2021-10-26 22:50:02 · 509 阅读 · 0 评论 -
Java的Lock锁
Java的Lock锁详解Lock(锁)从JDK5.0开始,Java提供了更强大的线程同步机制——通过显式定义同步锁对象来实现同步,同步锁使用Lock对象充当java.util.concurrent.locks.Lock接口是控制多个线程对共享资源进行访问的工具。锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应先获得Lock对象ReentrantLock类实现了Lock,它拥有与synchronized相同的并发性和内存语义,在实现线程安全的控原创 2021-10-24 22:43:43 · 687 阅读 · 0 评论 -
Java死锁
Java死锁详解死锁多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能运行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形。某一个同步块同时拥有“两个以上对象的锁”时,就可能发生“死锁”的问题例子package Thread;//死锁,多个对象互相持有对方所需要的资源,然后形成僵持public class DeadLock { public static void main(String[] args) { Makeup makeup1 =原创 2021-10-24 00:41:09 · 91 阅读 · 0 评论 -
Java同步方法及同步块
Java同步方法及同步块线程同步由于同一进程的多个线程共享同一块存储空间,在带来方便的同时,也带来了访问冲突问题,为了保证数据在方法中被访问时的正确性,在访问时加入锁机制synchronized,当一个线程获得对象的排它锁,独占资源,其他线程必须等待,使用后释放锁即可。存在以下问题:一个线程持有锁会导致其他所有需要此锁的线程挂起在多线程竞争下,加锁,释放锁会导致比较多的上下文切换和调度延时,引起性能问题如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能问题同步原创 2021-10-23 22:48:32 · 393 阅读 · 0 评论 -
Java三大线程不安全案例
Java三大线程不安全案例案例一 :多个线程同时买票出现同一张票和负票情况//不安全的买票public class ExampleUnsafe01 { public static void main(String[] args) { Buyticket station = new Buyticket(); new Thread(station,"小明").start(); new Thread(station,"小马").start();原创 2021-10-22 13:09:29 · 2209 阅读 · 0 评论 -
Java守护线程
Java守护线程在Java中有两类线程,分别是User Thread(用户线程)和Daemon Thread(守护线程) 。用户线程很好理解,我们日常开发中编写的业务逻辑代码,运行起来都是一个个用户线程。而守护线程相对来说则要特别理解一下。什么是守护线程在操作系统里面是没有所谓的守护线程的概念的,只有守护进程一说。但是Java语言机制是构建在JVM的基础之上的,这一机制意味着Java平台是把操作系统的底层给屏蔽了起来,所以它可以在它自己的虚拟的平台里面构造出对自己有利的机制。而Java语言或者说平台原创 2021-10-21 18:18:29 · 135 阅读 · 1 评论 -
Java线程优先级
Java线程优先级Java提供一个线程调度器来监控程序中启动后进入就绪状态的所以线程,线程调度器按照优先级决定应该调度哪个线程来执行线程的优先级用数字表示,范围1~10Thread.MIN_PRIORITY = 1Thread.MAX_PRIORITY = 10Thread.NORM_PRIORITY = 5使用以下方式改变或获取优先级getPriority() setPriority(int xxx)优先级的设定建议在start()调度前实例package Thre原创 2021-10-18 22:49:37 · 75 阅读 · 0 评论 -
Java观测线程状态
Java观测线程状态NEW(新生、创建状态)尚未启动的线程处于此状态。RUNNABLE(运行状态)在 Java 虚拟机器中执行的线程处于此状态。BLOCKED被阻塞等待监视器锁定的线程处于此状态。WAITING正在等待另一个线程执行特定操作的线程处于此状态。TIMED_WAITING正在等待另一个线程执行操作达到指定等待时间的线程处于此状态。TERMINATED(死亡、终止状态)退出的线程处于此状态。线程在给定时间点只能处于一个状态。这些状态是虚拟机状态原创 2021-10-18 21:43:24 · 143 阅读 · 0 评论 -
Java线程强制执行
Java线程强制执行Join合并线程,待此线程完成后,再执行其他线程,其他线程阻塞;可以想象成让run()中的代码插队到主线程中实例//测试join方法public class TestJion implements Runnable{ @Override public void run() { for (int i = 0; i < 1000; i++) { System.out.println("线程vip来了"+i);原创 2021-10-17 22:24:07 · 178 阅读 · 0 评论 -
Java线程礼让
Java线程礼让线程礼让(yield)礼让线程,让当前正在执行的线程暂停,但不阻塞将线程从运行状态转到就绪状态让cpu重新调度,礼让不一定成功,看cpu心情实例例如:A线程、B线程在就绪状态同时竞争,CPU调度,让A线程先进入运行状态,但A线程礼让了,重新回到就绪状态,跟B线程再竞争一次。package Thread;//测试礼让线程//礼让不一定成功,看CPU心情public class Demo07 { public static void main(String[] a原创 2021-10-16 17:03:12 · 202 阅读 · 0 评论 -
Java线程休眠
Java线程休眠Java线程调度是Java多线程的核心,只有良好的调度,才能充分发挥系统的性能,提高程序的执行效率。这里要明确的一点,不管程序员怎么编写调度,只能最大限度的影响线程执行的次序,而不能做到精准控制。线程休眠的目的是使线程让出CPU的最简单的做法之一,线程休眠时候,会将CPU资源交给其他线程,以便能轮换执行,当休眠一定时间后,线程会苏醒,进入准备状态等待执行。线程休眠的方法是Thread.sleep(long millis) 和Thread.sleep(long millis, int原创 2021-10-15 23:45:44 · 411 阅读 · 0 评论 -
Java线程停止
Java线程停止停止一个线程通常意味着在线程处理任务完成之前停掉正在做的操作,也就是放弃当前的操作。在 Java 中有以下 3 种方法可以终止正在运行的线程:使用退出标志,使线程正常退出,也就是当 run() 方法完成后线程中止。使用 stop() 方法强行终止线程,但是不推荐使用这个方法,该方法已被弃用。使用 interrupt 方法中断线程。1.使用标志位终止线程在 run() 方法执行完毕后,该线程就终止了。但是在某些特殊的情况下,run() 方法会被一直执行;比如在服务端程序中可能原创 2021-10-14 21:53:15 · 197 阅读 · 0 评论 -
Java的Lambda表达式
Java的lambda表达式详解Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。为什么要用Lambda表达式避免匿名内部类过多可以让代码看起来更简洁去掉了一堆没有意义的代码,只留下核心的逻辑理解函数式接口理解Functional Interface(函数式接口)是学习Lambda表达式的关键所在函数式接口的定义:任何...原创 2021-10-14 13:20:31 · 389 阅读 · 0 评论 -
Java静态代理模式
Java静态代理模式代理代理是英文 Proxy 翻译过来的。我们在生活中见到过的代理,大概最常见的就是朋友圈中卖面膜的同学了。她们从厂家拿货,然后在朋友圈中宣传,然后卖给熟人。按理说,顾客可以直接从厂家购买产品,但是现实生活中,很少有这样的销售模式。一般都是厂家委托给代理商进行销售,顾客跟代理商打交道,而不直接与产品实际生产者进行关联。所以,代理就有一种中间人的味道。代理模式代理模式是面向对象编程中比较常见的设计模式。这是常见代理模式常见的 UML 示意图。需要注意的有下面几点:原创 2021-10-12 20:02:01 · 242 阅读 · 0 评论 -
多线程的三种创建方法之实现Callable接口
Java多线程的三种创建方法之实现Callable接口实现Callable接口,需要返回值类型重写call方法,需要抛出异常创建目标对象创建执行服务:ExecutorService ser = Executors.newFixedThreadPool(1);提交执行:Future result1 = ser.submit(t1);获取结果:boolean r1 = result1.get()关闭服务:ser.shutdownNow();package Thread;import ja原创 2021-10-11 22:06:10 · 111 阅读 · 0 评论 -
Java多线程之龟兔赛跑
Java多线程问题之龟兔赛跑package Thread;public class Demo04 implements Runnable{ //胜利者 private String winner; @Override public void run() { for (int i = 1; i <= 100; i++) { //模拟兔子休息 if (Thread.currentThread().ge原创 2021-10-10 23:40:13 · 495 阅读 · 0 评论 -
Java并发问题初识
Java并发问题初识下面用一个实例来展示何为并发问题package Thread;//多线程同时操作一个对象//买火车票的例子//发现问题:多个线程操作一个资源的情况下,线程不安全,数据紊乱public class Demo03 implements Runnable{ //票数 int num = 10; @Override public void run() { while (true){ if (num <=原创 2021-10-10 00:07:25 · 102 阅读 · 0 评论 -
多线程的三种创建方法之实现Runnable接口
多线程的三种创建方法之实现Runnable接口推荐使用Runnable接口,因为java单继承的局限性,方便同一个对象被多个线程使用实现Runnable创建MyRunnable类实现Runnable接口实现run()方法,编写线程执行体创建线程对象,调用start()方法启动线程实例//创建Demo02类实现Runnable接口public class Demo02 implements Runnable{ @Override //重写run()方法 run()方法线程原创 2021-10-09 14:24:56 · 190 阅读 · 0 评论 -
多线程创建的三种方法之继承Thread类
多线程创建的三种方法之继承Thread类Thread(学习提示 查看JDK帮助文档)自定义线程类继承Thread类重写run()方法,编写线程执行体创建线程对象,调用start()方法启动线程实例//继承Thread类,重写run()方法,调用start()开启线程public class Demo01 extends Thread{ @Override //run()方法线程体 public void run() { for (int i = 0原创 2021-10-09 00:10:08 · 242 阅读 · 0 评论 -
进程、线程、多线程相关总结
进程,线程和多线程的相关总结一、概念1、进程狭义定义:进程就是一段程序的执行过程。广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。简单的来讲进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储原创 2021-10-07 21:43:08 · 113 阅读 · 0 评论 -
java画笔工具代码详解
package gui;import java.awt.*;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.util.ArrayList;import java.util.Iterator;//启动类public class Demo01 { public static void main(String[] args) { new Test(); }原创 2021-09-25 12:05:22 · 1313 阅读 · 0 评论 -
Java 创建一个简易计算机启示代码
Java 创建一个简易计算机启示代码package gui;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class CalculatorTest { public static void main(String[] args) { Calculator calculator = new Calculator();原创 2021-09-22 22:44:09 · 189 阅读 · 0 评论 -
Java中三种常用布局方式
Java中FlowLayout,GridLayout和BorderLayout详解一、流程布局(FlowLayout)顾名思义, FlowLayout是一种布局,它允许组件流到可见部分的末端。 FlowLayout基本上有助于开发响应速度更快的UI,并使组件保持自由流动的方式。 下图显示了具有6个组件的实际流布局。由于这是框架或面板的默认布局,因此也可以在不显式应用布局的情况下工作。import java.awt.Button;import java.awt.FlowLayout;import原创 2021-09-20 19:44:55 · 11307 阅读 · 0 评论 -
Java异常处理详解
Java异常处理详解一、什么是异常异常的英文单词是exception,字面翻译就是“意外、例外”的意思,也就是非正常情况。事实上,异常本质上是程序上的错误,包括程序逻辑错误和系统错误。比如使用空的引用、数组下标越界、内存溢出错误等,这些都是意外的情况,背离我们程序本身的意图。错误在我们编写程序的过程中会经常发生,包括编译期间和运行期间的错误,在编译期间出现的错误有编译器帮助我们一起修正,然而运行期间的错误便不是编译器力所能及了,并且运行期间的错误往往是难以预料的。假若程序在运行期间出现了错误,如果置之不原创 2021-09-18 18:13:34 · 1360 阅读 · 0 评论 -
Java内部类详解
Java内部类详解一、内部类基础在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。下面就先来了解一下这四种内部类的用法。1、成员内部类成员内部类是最普通的内部类,它的定义为位于另一个类的内部,形如下面的形式:class Circle { double radius = 0; public Circle(double radius) { t原创 2021-09-16 16:21:26 · 103 阅读 · 0 评论 -
Java接口详解
Java接口详解声明类的关键字是class,声明接口的关键字是interface接口普通类:只有具体实现抽象类:具体实现和规范(抽象方法)都有接口类:只有规范接口就是规范,定义的是一组规则,体现了现实世界中”如果你是…则必须能…“的思想。如果你是天使,则必须能飞;如果你是汽车,就必须能跑;如果你是好人,就必须干掉坏人;如果你是坏人,就必须欺负好人接口的本质是契约,就像我们人间的法律一样,制定好后大家都遵守OO的精髓,是对对象的抽象,最能提现这一点的就是接口。为什么我们原创 2021-09-15 11:29:04 · 106 阅读 · 0 评论 -
Java抽象类详解
Java抽象类详解在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。在 Java 中抽原创 2021-09-14 18:46:46 · 132 阅读 · 0 评论