随笔分类 -  java基础

摘要:1、抽象类 类的层次结构中,越往下继承的子类其属性和方法越来越具体。相反,越上层的祖先类其实现越抽象,甚至无法给出具体实现。例如,一个圆或矩形有面积,但祖先几何图形类的getArea()方法没法给出具体实现,这时可以定义为抽象方法。 Java中可以定义不含方法体的方法,方法的方法体由该类的子类根据自 阅读全文
posted @ 2023-03-31 16:38 Linqylin 阅读(63) 评论(0) 推荐(0) 编辑
摘要:1、特点:无侵入式的给代码增加额外的功能 2、程序为什么需要代理?代理长什么样子? 对象如果嫌身上干的事太多,可以通过代理来转移部分职责。 对象有什么方法想被代理,代理就一定有对应的方法。代理里面就是对象要被代理的方法。 中介如何知道要派有唱歌、跳舞方法的代理呢? 通过接口知道 Java通过接口保证 阅读全文
posted @ 2023-03-28 21:00 Linqylin 阅读(22) 评论(0) 推荐(0) 编辑
摘要:1、概述 反射允许对成员变量,成员方法和构造方法的信息进行编程访问。 注意:获取是从class字节码文件获取的,所以在获取前首先要获取class对象。 2、获取class对象的三种方式(类型为Class) (1)源代码阶段:方式1 全类名:包名+类名 最为常用 (2)加载阶段:方式2 一般更多的是当 阅读全文
posted @ 2023-03-28 20:16 Linqylin 阅读(15) 评论(0) 推荐(0) 编辑
摘要:1、线程池出现原因 以前写多线程时,用到线程的时候就创建(浪费时间);用完之后线程就消失(浪费资源)。 2、线程池主要核心原理 3、线程池代码实现 (1)创建线程池 (2)提交任务 (3)所有的任务全部执行完毕,关闭线程池 e.g //1.获取线程池对象 ExecutorService pool1 阅读全文
posted @ 2023-03-27 20:57 Linqylin 阅读(15) 评论(0) 推荐(0) 编辑
摘要:1、每个线程都有自己的栈。 所以,当在run()方法里创建一个变量时,不同的线程都有这个变量,且相互独立。 阅读全文
posted @ 2023-03-27 20:12 Linqylin 阅读(14) 评论(0) 推荐(0) 编辑
摘要:多线程的6种状态 注意:Java中没有定义运行状态,所以线程只有6种状态。因为线程抢到CPU的执行权后,就交给操作系统了,在这个运行过程中虚拟机就不用管了,所以Java没有定义运行状态。 阅读全文
posted @ 2023-03-27 19:47 Linqylin 阅读(14) 评论(0) 推荐(0) 编辑
摘要:生产者和消费者(等待唤醒机制) 生产者消费者模式是一个十分经典的多线程协作的模式 举例: 实现方式一: 线程的方法代码编写技巧,如run(): 步骤: (1)循环; (2)同步代码块; (3)判断共享数据是否到了末尾(到了末尾) (4)判断共享数据是否到了末尾(没到末尾,执行核心逻辑) wait() 阅读全文
posted @ 2023-03-27 19:40 Linqylin 阅读(41) 评论(0) 推荐(0) 编辑
摘要:1、线程的生命周期 2、线程的安全问题 因为线程在执行时,有随机性,CPU的执行权随时有可能被抢走。 解决方法:把操作共享的代码锁起来 3、同步代码块 把操作共享的代码锁起来 格式: synchronized(锁){ 操作共享数据的代码 } 特点1:锁默认打开,有一个线程进去了,锁自动关闭 特点2: 阅读全文
posted @ 2023-03-27 18:58 Linqylin 阅读(12) 评论(0) 推荐(0) 编辑
摘要:MyThread t = new MyThread(); 1、String getName() 细节: 如果没有给线程设置名字,线程也是有默认的名字的 格式:Thread-X(X序号,从0开始) 2、void setName(String name) 细节: 如果要给线程设置名字,可以用set方法进 阅读全文
posted @ 2023-03-27 18:09 Linqylin 阅读(19) 评论(0) 推荐(0) 编辑
摘要:方式一:继承Thread类的方式进行实现 步骤: 1、自己定义一个类继承Thread 2、重写run方法 3、创建子类的对象,并启动线程 e.g. public class MyThread extends Thread{ @Override public void run(){ //书写线程要执行 阅读全文
posted @ 2023-03-27 16:45 Linqylin 阅读(820) 评论(0) 推荐(0) 编辑
摘要:1、概念 线程:线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。 进程:进程是程序的基本执行实体。 多线程:有了多线程,就可以让程序同时做多件事情。 多线程作用:提高效率。 多线程应用场景:软件中的耗时操作、所有的聊天软件、所有的服务器。 2、并发和并行 并发: 阅读全文
posted @ 2023-03-27 13:58 Linqylin 阅读(9) 评论(0) 推荐(0) 编辑
摘要:一、异常体系介绍 异常的最大一个类为java.lang.Throwable,其有两个子类,分别为Error和Exception。 Error:代表的系统级别错误(属于严重问题)系统一旦出现问题,sun公司会把这些错误封装成Error对象。Error是给Sun公司自己用的,不是给我们程序员用的。因此我 阅读全文
posted @ 2023-03-24 22:20 Linqylin 阅读(51) 评论(0) 推荐(0) 编辑
摘要:(1)方法引用:把已经有的方法拿过来用,当做函数式接口中抽象方法的方法体。 (2)能够使用方法引用的四个条件: 1.引用处必须是函数式接口; 2.被引用的方法必须已经存在; 3.被引用方法的形参和返回值需要跟抽象方法保持一致; 4.被引用方法的功能要满足当前需求。 (3)方法引用符 :: (4)方法 阅读全文
posted @ 2022-10-31 16:54 Linqylin 阅读(449) 评论(0) 推荐(0) 编辑
摘要:(1)作用: 结合了Lambda表达式,简化集合、数组的操作 (2)使用步骤: 1.先得到一条Stream流(流水线),并把数据放上去; 单列集合: list.stream().forEach(s->System.out.println(s)); 双列集合: 获取key: hm.keySet().s 阅读全文
posted @ 2022-10-30 21:12 Linqylin 阅读(92) 评论(0) 推荐(0) 编辑
摘要:(1)创建不可变集合的应用场景 1.如果某个数据不能被修改,可把它防御性地拷贝到不可变集合中。 2.当集合对象被不可信的库调用时,不可变形式是安全的。 (2)在List、Set、Map接口中,都存在静态的of方法,可以获取一个不可变的集合。 注意:这个集合不能添加、不能删除、不能修改。 (3)Map 阅读全文
posted @ 2022-10-30 20:01 Linqylin 阅读(160) 评论(0) 推荐(0) 编辑
摘要:1.当需要随机出概率时,我们可以创建一个数组,然后让里面的值代表每种情况,并符合概率分布,若抽到该数字,则在对应的数组对象中随机取出一个作为结果。 阅读全文
posted @ 2022-10-28 21:47 Linqylin 阅读(45) 评论(0) 推荐(0) 编辑
摘要:(1)java.util.Colections:是集合工具类 (2)作用:Collections不是集合,而是集合的工具类。 (3)常用API 阅读全文
posted @ 2022-10-28 19:43 Linqylin 阅读(14) 评论(0) 推荐(0) 编辑
摘要:(1)可变参数:方法形参的个数是可以发生变化的 (2)格式:属性类型...名字 eg. int...args (3)底层:可变参数底层就是一个数组,只不过不需要我们自己创建,Java会帮我们创建好。 (4)细节: 1.在方法的形参中最多只能写一个可变参数; 2.在方法当中,如果出了可变参数以外,还有 阅读全文
posted @ 2022-10-28 19:39 Linqylin 阅读(30) 评论(0) 推荐(0) 编辑
摘要:新的统计思想:利用map集合进行统计 如果题目中没有要求对结果进行排序,默认使用HashMap,效率较高 如果题目中要求对结果进行排序,使用TreeMap 键:表示要统计的内容 值:表示次数 阅读全文
posted @ 2022-10-28 19:32 Linqylin 阅读(28) 评论(0) 推荐(0) 编辑
摘要:(1)TreeMap跟TreeSet底层原理一样,都是红黑树结构的。 (2)由键决定特性:不重复、无索引、可排序。 (3)可排序:对键进行排序。 (4)注意:默认按照键的从小到大进行排序,也可以自己规定键的排序规则。 (5)代码书写的两种排序规则: 1.实现Comparable接口,指定比较规则。 阅读全文
posted @ 2022-10-28 19:28 Linqylin 阅读(66) 评论(0) 推荐(0) 编辑