java基础
文章平均质量分 58
籍籍无名的白菜
大四实习狗
展开
-
stream()流的一些常用方法
extends R>> mapper)返回一个流,其中包含将此流的每个元素替换为通过将提供的映射函数应用于每个元素而生成的映射流的内容的结果。super T> predicate:返回由与给定谓词匹配的此流的元素组成的流(根据条件对数据进行过滤),返回值类型为Stream。返回一个Optional描述此流的某些元素,如果流是空的,返回的是空的 Optional。skip(long n)再丢弃流的第一个元素后,返回由该流的剩余元素组成n的流。根据提供的流,返回此流中的最大元素。原创 2022-09-20 11:02:24 · 426 阅读 · 0 评论 -
JUC学习笔记
1、关于 wait()方法虚假唤醒的问题wait()方法一个特点就是在哪里沉睡就会在哪里醒来,所以,如果wait()方法没加在循环里,就会出现一个只有第一次判断生效,第二次则不进行判断,直接往下执行造成虚假唤醒的情况,从而导致数据出错。下图中,把 if改为 while解决虚假唤醒问题2、线程的定制化通信// 提供功能class Th { private int flag = 1; ReentrantLock lock = new ReentrantLock();原创 2022-04-19 11:05:59 · 323 阅读 · 0 评论 -
关于ArrayList()线程不安全问题的解决方法
线程不安全条件下的并发操作 public static void main(String[] args) { ArrayList<String> arrayList = new ArrayList<>(); for (int i = 0; i < 30; i++) { new Thread(()->{ arrayList.add(UUID.randomUUID().toString(原创 2022-04-01 21:16:02 · 897 阅读 · 0 评论 -
String s=new String(“abc”)一共创建了几个对象?
答案分为两种情况:第一种情况:常量池中没有此对象:2个第二种情况:常量池中有此对象:1个再讲为什么之前,先看一看百度百科对常量池的介绍: 常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。它包括了关于类,方法,接口等中的常量,也包括字符串常量,如String s = "java"这种申明方式;当然也可扩充,执行器产生的常量也会放入常量池,故认为常量池是JVM的一块特殊的内存空间。常量池中除了包含代码中所定义的各种基本类型(如int、long等等)和对象型(如Str原创 2022-03-18 17:06:24 · 3554 阅读 · 1 评论 -
Mybatis中的一级缓存和二级缓存
一级缓存一级缓存是 SqlSession级别的。通过同一个SqlSession下访问同一个sql语句,第一次会从数据库中获取,第二次直接从缓存中获取,不在经过数据库导致一级缓存失效的原因在两次查询同一语句之间执行了任意的增删改操作手动清空一级缓存(.clearCache())不同的SqlSession对应不同的缓存同一SqlSession下的不同语句二级缓存二级缓存是 SqlSessionFactory级别的,通过同一个 SqlSessionFactory创建出来的 SqlSess原创 2022-03-15 10:29:23 · 224 阅读 · 0 评论 -
Java反射学习笔记
简要说明Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射。补充:动态语言和静态语言动态语言是一类在运行时可以改变其结构的语言:原创 2022-03-02 09:14:16 · 315 阅读 · 0 评论 -
Java之IO流学习笔记
File的构造器public File(String pathname) 以pathname为路径创建File对象,可以是绝对路径或者相对路径,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。绝对路径:是一个固定的路径,从盘符开始。相对路径:是相对于某个位置开始public File(String parent,String child) 以parent为父路径,child为子路径创建File对象。public File(File parent,Stri原创 2022-02-28 14:46:06 · 813 阅读 · 0 评论 -
面试题: ArrayList、LinkedList. Vector三者的异同?
相同点:三个类都实现了List接口,数据存储特点相同:存储有序,可重复的数据不同点:ArrayList:作为List接口的主要实现类,线程不安全,效率高,底层采用Object[]数组存储LinkedList:对于频繁的插入,删除操作适用,效率比ArrayList高。底层使用双向链表存储Vector:List接口的古老实现类,线程安全,效率略低,底层使用Object[]存储.ArrayList的源码分析jdk7情况下ArrayList list = new ArrayList();//底层创原创 2022-02-25 20:49:02 · 679 阅读 · 0 评论 -
字符串(字符串的拼接及一些常用方法)
字符串拼接特性 public static void main(String[] args) { String a = "a"; String b = "b"; String c = "a" + "b"; String d = "ab"; String e = a + "b"; String f = "a" + b; String g = a + b; String h = (a原创 2022-02-22 13:51:11 · 1008 阅读 · 0 评论 -
Java之同步锁
同步代码块加锁的为需要被同步的代码共享数据,多个线程都需要操作的数据同步监视器,即锁,任何一个对象都可以成为锁。、要求:锁必须是唯一的,多线程之间必须共用一把锁实现Runnable接口时,我们可以考虑使用this充当同步监视器使用Thread继承时我们可以使用类名.class作为同步监视器synchronized(同步监视器){ 需要同步的代码}同步方法如果操作共享数据的代码完整的声明在一个方法中,我们不妨使用此方法声明同步同步方法中仍然涉及到同步监视器,只是原创 2022-02-21 19:01:08 · 4632 阅读 · 0 评论 -
线程的创建方式、生命周期,及常见知识点
优点提高应用程序的响应,对图形化界面更有意义,可增强用户体验提高计算机系统CPU的利用率改善程序结构,将既长又复杂的进程分为多个线程,独立运行,利于理解和修改何时需要多线程程序同时执行两个或多个任务需要实现一些等待任务时,如用户输入,文件读写操作,网络操作,搜索需要一些后台运行的程序创建方式(4种)继承Thread,重写run方法注意,一定要【对象名】.start()调用,不能直接调用run方法实现Runnable接口创建一个实现了Runnable接口的类在r原创 2022-02-18 11:54:11 · 434 阅读 · 0 评论 -
#抽象(abstract)与接口(interface)的区别
abstract关键字abstract关键词可以修饰类和方法修饰类时修饰的类为抽象类,里面可以没有抽象方法,但有抽象方法的类一定是抽象类抽象类不能被实例化抽象类中一定有构造器,以便子类调用父类使用修饰方法时修饰的方法没有方法体包含抽象方法的一定是抽象类子类重写父类的所有抽象方法后则子类可以实例化若子类没有重写完父类中的抽象方法,则子类也是抽象类,需要使用absract修饰注意absract不能修饰属性,构造器等结构不能修饰私有方法,final方法,静态方法interf原创 2022-02-17 20:30:10 · 99 阅读 · 0 评论 -
静态代码块VS非静态代码块
静态代码块 随着类的加载而执行 可以有输出语句 只执行一次 作用:初始化类信息 如果一个类中定义了多个静态代码块,则按照声明先后顺序执行 静态代码块优先于非静态代码块 静态代码块中只能调用静态属性和静态方法 非静态代码块 随着对象的创建而执行 可以有输出语句 每次对象的创建都会执行 作用:在创建对象时,对对象进行初始化 如果一个类中定义了多个非静态代码块,则按照声明先后顺序执行 非静原创 2022-02-16 18:37:13 · 139 阅读 · 0 评论 -
HashMap源码解析
HashMap源码中的一些重要常量 DEFAULT_INITIAL_CAPACITY: HashMap的默认容量16 MAXIMUM_CAPACITY: HashMap的最大支持容量,2^30 DEFAULT_LOAD_FAC TOR: HashMap的默认加载因子:0.75 TREEIFY_THRESHOLD: Bucket中链表长度大于该默认值,转化为红黑树:8 UNTREEIFY_THRESHOLD: Bucket中红黑树存储的Node小于该默认值,转化为原创 2022-02-13 21:29:22 · 417 阅读 · 0 评论 -
单例模式之饿汉式和懒汉式
饿汉式代码举例public static void main(String[] args) { Bank instance = Bank.Instance(); Bank instance1 = Bank.Instance(); System.out.println(instance == instance1);// true 证明是一个实例 } class Bank{ // 私有化这个类,保证外部无法调用原创 2022-02-10 11:38:54 · 353 阅读 · 0 评论 -
java面向对象的三大特性
封装和隐藏(封装性)前言程序设计追求"高内聚,低耦合。高内聚:类的内部数据操作细节自己完成,不允许外部干涉内耦合:仅对外暴露少量的方法用于使用封装性的设计思想隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性,可维护性。通俗的讲,就是把该隐藏的隐藏起来,该暴露的暴露出来,这就是封装性的设计思想封装性的体现 属性进行私有化,同时提供公共的set和get方法进行赋值和调用 不对外暴露的私有方法 单例模式 封装新的体现需要配合原创 2022-02-06 16:29:54 · 462 阅读 · 0 评论 -
java的值传递机制
前言:参考链接:Java 到底是值传递还是引用传递?什么是形参和实参形参:方法定义时,声明在小括号里面的参数实参:方法调用时,实际传递给形参的数据什么是值传递和引用传递值传递:实参传递给形参的是实参的真实数据值,会创建一个副本引用传递:实参传递给形参的是实参的地址值,不会创建副本针对基本数据类型传递的是真实存储的值的拷贝举例: int m=1; int n = 2;...原创 2022-02-02 19:19:10 · 597 阅读 · 0 评论 -
属性和局部变量的区别与联系
相同点:1. 定义变量的格式相同 (数据类型 变量名=变量值)2. 先声明,后使用3. 变量都有其作用域不同点:1. 在类中声明的位置不同 * 属性:直接声明在类中({}中) * 局部变量:声明在方法内,方法形参,代码块,构造器形参,构造器内部的变量2. 权限修饰符 * 属性:public default protectrd private * 局部变量:不能声明权限修饰符3. 默认值不同 * 属性:有默认值 * 局部变量:无默认值...原创 2022-01-30 19:08:41 · 467 阅读 · 0 评论 -
面向过程(POP)与面向对象(OOP)的区别
概述1. 二者都是一种思想,面向对象是相对于面向过程而言的。面向过程的效率一般要高于面向对象。2. 面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。分析出解决问题的步骤,用函数把这些步骤一步一步的实现。3. 面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。把构成问题的事物分成一个一个的对象,建立对象的目的不是为了完成某一个步骤,而是描述某个事物在整个解决问题的步骤中的行为。面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、原创 2022-01-28 17:08:43 · 1279 阅读 · 0 评论 -
java基础——数组
前言数组是多个相同类型按一定顺序排列的集合,并使用一个名字来命名,并通过编号的方式对这些数据进行统一管理常见概念:数组名,下标(索引), 元素 , 数组长度概述 数组本身是引用数据类型,而数组中的元素可以是任意数据类型,包括基本数据类型和引用数据类型。 创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址 数组的长度一旦确定,便不能修改 可以通过下标(索引)来查找指定位置的元素 数组的分类按照维度:一维数组,二维数组,三维原创 2022-01-27 14:23:47 · 340 阅读 · 0 评论 -
java数据类型
java基本类型的一些解释说明原创 2022-01-26 19:17:41 · 182 阅读 · 0 评论 -
java的三种注释区别
java的三种注释区别以及如何使用原创 2022-01-26 13:53:29 · 1042 阅读 · 0 评论