Java高级编程
文章平均质量分 61
春水煎茶
这个作者很懒,什么都没留下…
展开
-
数组和字符串
数组一维数组:int intArray[];float[] floatArray;String strArray[];二维数组:int[][] array1;int array1[][];int[] array1[];动态初始化:int intArray[]; // 动态初始化int数组intArray = new int[4];// 动态初始化String数组String[] stringArray = new String[4];字原创 2021-11-09 14:45:01 · 65 阅读 · 0 评论 -
Map 集合
Map(映射)集合表示一种非常复杂的集合,允许按照某个键来访问元素。Map 集合 是由两个集合构成的,一个是键(key)集合,一个是值(value)集合。键集合是 Set 类 型,因此不能有重复的元素。而值集合是 Collection 类型,可以有重复的元素。Map 集合 中的键和值是成对出现的。提示 Map集合更适合通过键快速访问值,就像查英文字典一样,键就是要查的英文单词, 而值是英文单词的翻译和解释等。有的时候,一个英文单词会对应多个翻译和解释, 这是与Map集合特性对应的。Map map =原创 2021-11-08 22:04:44 · 464 阅读 · 0 评论 -
Set集合
Set集合是由一串无序的,不能重复的相同类型元素构成的集合。提示 :List集合中的元素是有序的、可重复的,而Set集合中的元素是无序的、不能重复的。 List集合强调的是有序,Set集合强调的是不重复。当不考虑顺序,且没有重复元素时, Set集合和List集合可以互相替换的。Set set = new HashSet();常用方法:Set 接口也继承自 Collection 接口,Set 接口中大部分都是继承自 Collection 接口,这 些方法如下...原创 2021-11-08 21:44:40 · 104 阅读 · 0 评论 -
List集合
List 接口的实现类有:ArrayList 和 LinkedList。ArrayList 是基于动态数组数据结构的实 现,LinkedList 是基于链表数据结构的实现。常用方法:List 接口继承自 Collection 接口,List 接口中的很多方法都继承自 Collection 接口的。 List 接口中常用方法如下。1. 操作元素get(int index):返回 List 集合中指定位置的元素。set(int inde...原创 2021-11-08 21:13:17 · 682 阅读 · 0 评论 -
Collection框架总结
ListArraylist:Object数组 Vector:Object数组 LinkedList:双向链表Set HashSet:(无序、唯一)基于HashMap实现的,底层采用HashMap来保存元素 LinkedHashSet:LinkedHashSet继承与HashSet,并且其内部是通过LinkedHashMap来实现的,有点类似LinkedHashMap其内部是基于Hashmap实现的一样,但是略有区...原创 2021-11-06 21:47:55 · 49 阅读 · 0 评论 -
stack.peek()和stack.pop()的区别
stack.pop():返回栈顶的值,返回后再栈中删除该值stack.peek():也是返回栈顶的值,但是返回该值后并不在栈中删除原创 2021-11-05 20:30:39 · 323 阅读 · 0 评论 -
new ListNode常用方法
1、初始化一个空结点,没有复制,指针指向list ListNode list=new ListNode();2、初始化一个空结点,初始值为0,指针指向为list ListNode list=new ListNode(0);3、初始化一个空结点,初始赋值为0,并且list的下一个next指针指向head,指针指向为list ListNode list=new ListNode(0,head);4、定义一个空链表 ListNod...原创 2021-11-05 10:37:18 · 8739 阅读 · 0 评论 -
Java 10和Java 11新特性
Java 10简介:1)2018年3月21日,Oracle官方宣布Java 10正式发布。2)需要注意的是Java 9和Java 10都不是LTS(Long-Term-Support)版本。和过去的Java大版本升级不同,这两个只有半年左右的开发和维护期。而未来的Java 11,也就是18.9 LTS,才是Java 8之后第一个LTS版本。3)JDK 10一共定义了109个新特性,其中包含12个JEP(对程序员来讲,真正的新特性其实就一个),还有一些新API和JVM规范以及JAVA语言规范上的改原创 2021-10-13 21:45:49 · 559 阅读 · 0 评论 -
Java 9的新特性
JDK 9的发布:1)经过4次跳票,经历曲折的Java 9终于在2017年9月21日发布。2)自从Java 9这个版本开始,Java的极化发布周期是6个月,下一个Java的主版本将于2018年3月发布,命名为Java 18.3,紧接着再过六个月将发布Java18.9。3)这意味着Java的更新从传统的以特性驱动的发布周期,转变为以时间驱动的(6个月为周期)发布模式,并逐步的将Oracle JDK原商业特性进行开源。4)针对企业客户的需求,Oracle将以三年为周期发布长期支持版本(long原创 2021-10-12 22:11:58 · 965 阅读 · 0 评论 -
Java8的新特性
Java 8新特性简介: Java 8(又称为jdk1.8)是Java语言开发的一个主要版本。Java 8是oracle公司于2014年3月发布,就可以看成是Java 5以来最具革命性的版本。Java 8为Java语言、编译器、类库、开发工具与JVM带来了大量的新特性。优点:1)速度更快2)代码更少(增加了新的语法:Lambda 表达式)3)强大的Stream API4)便于并行5)最大化减少空指针异常:Optional6)Nashorn引擎,允许在JVM上...原创 2021-10-08 22:23:07 · 3841 阅读 · 0 评论 -
反射的应用:动态代理
动态代理:1)代理设计模式的原理: 使用一个代理将对象包起来,然后用该代理对象取代原始对象。任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上。 2)之前讲解的代理机制的操作,属于静态代理,特征是代理类和目标对象的类都是在编译期间确定下俩,不利于程序的扩展。同时,每一个代理类只能为一个接口服务,这一样一来程序开发中必然产生过多的代理。最好可以通过一个代理类完成全部的代理功能。3)动态代理是指客户通过代理类来调用其它对象的方法,并且实在程...原创 2021-10-08 21:23:03 · 54 阅读 · 0 评论 -
Java反射机制
Java Reflection:1)Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。2)加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只要有一个Class对象),这个对象就包含了完整的类的结构信息。可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构。所以,我们形象的称之为:反射。正常方式:引入需要的“包类”名称——>原创 2021-10-05 17:34:54 · 88 阅读 · 0 评论 -
Java网络编程
网络编程概述:1)Java是Internet上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序。2)Java提供的网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在Java的本机安装系统里,由JVM进行控制。并且Java实现了一个跨平台的网络库,程序员面对的是一个同意的网络编程环境。3)计算机网络:把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息、共享硬件、软件、数据信息原创 2021-10-03 22:27:05 · 93 阅读 · 0 评论 -
Java IO流
IO原理:1)I/O是Input/Output的缩写,I/O技术是非常实用的技术,用于处理设备之间的数据传输。如读/写文件,网络通讯等。2)Java程序中,对于数据的输入/输出操作为“流(stream)”的方式进行。3)java.io包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过标准的方法输入或输出数据。4)输入input:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。 输出output:将程序(内存)数据输出到磁盘、光盘等存储设备中。...原创 2021-09-28 22:18:12 · 82 阅读 · 0 评论 -
File类
File类的使用:1)java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关2)File能新建、删除、重命名文件和目录,但File不能访问文件内容本身。如需要访问文件内容本身,则需要使用输入/输出流3)想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。4)File对象可以作为参数传递给流的构造器。5)File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹)。6原创 2021-09-27 16:46:21 · 711 阅读 · 0 评论 -
泛型(Generic)
泛型的简介:泛型:标签举例:中药店每个抽屉外面贴着标签;超市购物架上有很多瓶子,每个瓶子装着什么有标签泛型的设计背景:集合容器类在设计阶段、声明阶段不能确定这个容器到底实际存的是什么类型的对象,多以在JDK1.5前只能把元素类型设计为Object,JDK1.5之后使用泛型来解决。因为这个时候除了元素的类型不确定,其他的部分是确定的,例如关于这个元素是如何保存,如何管理等是确定的,因此此时把元素类型设计成一个参数,这个类习惯参数叫做泛型。Collection<E>,...原创 2021-09-23 22:19:58 · 235 阅读 · 0 评论 -
Map接口
Map接口继承树:Map:双列数据,存储key-value对的数据,类似于高中的函数:y=f(x) HashMap:作为Map的主要实现类; LinkedHashMap: TreeMap: Hashtable:作为古老的实现类; Proper...原创 2021-09-22 16:41:27 · 346 阅读 · 0 评论 -
Collection子接口:Set接口
Set接口概述:1)Set接口是Collection的子接口,set接口没有提供额外的方法。2)Set集合不允许包含相同的元素,如果试把两个相同的元素加入同一个Set集合中,则添加操作失败。3)Set判断两个对象是否相同不是==运算符,而是根据equals()方法。Set实现类:HashSet1)HashSet是Set接口的典型实现,大多数时候使用Set集合时都使用这个实现类。2)HashSet按Hash算法来存储集合中的元素,因此具有很好的存取、查找、删除性能。3)Hash原创 2021-09-16 20:33:09 · 342 阅读 · 0 评论 -
Collection子接口之一:List接口
List接口概述:1)鉴于Java中数组用来存储数据的局限性,我们通常使用List替代数组。2)List集合类中元素有序、且可重复,集合中每个元素都有其对应的顺序索引。3)List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。4)JDK API中List接口的实现类常用的有:ArrayList、LinkedList和Vector。ArrayList、LinkedList、Vector三者的异同?相同点:三个类都是实现了List接口,存储数据原创 2021-09-15 16:42:44 · 72 阅读 · 0 评论 -
foreach循环遍历
使用foreach循环遍历集合元素:1)Java5.0 提供了foreach循环迭代访问Collection和数组。2)遍历操作不需要获取Collection或数组的长度,无需使用索引访问元素。3)遍历集合的底层调用Iterator完成操作4)foreach还可以用来遍历数组 for(Person person: person){ //for(要遍历的元素类型 遍历后自定义元素名称:要遍历的结构名称) System.out...原创 2021-09-14 18:04:22 · 3809 阅读 · 0 评论 -
Iterator迭代器接口
使用Iterator接口遍历集合元素:1)Iterator对象称为迭代器(设计模式的一种),主要用于遍历Collection集合中的元素。2)GOF给迭代器模式的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需要暴露该对象的内部细节。迭代器模式,就是为容器而生。类似于“公交车上的售票员”、“火车上的乘务员”、“空姐”。3)Collection接口继承了java.lang.Iterable接口,该接口有一个iterator()方法,那么所有实现了Collection接原创 2021-09-14 16:43:22 · 190 阅读 · 0 评论 -
Collection接口
Collection接口中的方法的使用:1)添加:add(Object obj)、addAll(Collecttion coll)2)获取有效元素的个数:int size()3)清空集合:void clear()4)是否是空集合:boolean isEmpty()5)是否包含某个元素: boolean contatins(Object obj):是通过元素的equals方法来判断是否是同一对象。 boolean cont...原创 2021-09-14 13:30:42 · 73 阅读 · 0 评论 -
Java集合框架
Java集合框架概述:1)一方面,面向对象语言对事务的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另一方面,使用Array存储对象方面具有一些弊端,而Java集合就像是一种容器,可以动态地把多个对象的引用放入到容器中。 数组在内存方面的特点: a)数组初始化以后,长度就确定了。 b)数组声明的类型,就决定了进行元素初始化时的类型 数组在存储数据方面的弊端: ...原创 2021-09-13 19:25:44 · 62 阅读 · 0 评论 -
注解(Annotation)
注解的概述:1)从JDK5.0 开始,Java增加了对元数据(MetaData)的支持,也就是Annotation(注解)。3)2)Annotation其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过使用Annotation,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。3)Annotation可以像修饰符一样被使用,可用于修饰包,类,构造器,方法,成员变量,参数原创 2021-09-13 11:36:51 · 258 阅读 · 0 评论 -
java中的枚举类
枚举类的使用:1)类的对象只有有限个,确定的。如下所示: 星期:Monday(星期一)、...、Sunday(星期天) 性别:Man(男)、Woman(女) 季节:Spring(春)、...、Winter(冬)2)当需要定义一组常量时,强烈建议使用枚举类。3)如果枚举类中只有一个对象,则可以作为单例模式的实现方式。4)枚举类的实现:JDK 1.5之前需要自定义枚举类,JDK 1.5新增的en...原创 2021-09-10 19:16:16 · 274 阅读 · 0 评论 -
Java面试题
将字符串“2021-09-09”转换为对应的java.sql.Date类的对象。(使用JDK8之前或JDK8中的API接口)。SimpleDateFormat sdf=new SimpleDateFormat(“yyyy-MM-dd”);解析:java.util.Date date=sdf.parse(“2021-09-09”);DateTimeFormatter dtf=DateTimeFormatter.ofPattern(“yyyy-MM-dd”);new + 构造器单例、Ca原创 2021-09-10 09:59:02 · 183 阅读 · 0 评论 -
BigInreger与BigDecimal
BigInteger类:1)Integer类作为int得包装类,能存储得最大整型值为2^31-1,Long类也是有限的,最大为2^63-1。如果要表示再大的整数,不管是基本数据类型还是他们的包装类都无能为力,更不用说进行运算了。2)java.math包的BigInteger可以表示不可变的任意精度的整数。BigInteger可以表示不可变的任意精度的整数。BigInteger提供所有Java的基本整数操作符的对应物,并提供java.lang.Math的所有相关方法。另外,BigInteger还提供以原创 2021-09-09 21:05:20 · 70 阅读 · 0 评论 -
Math类
java.lang.Math提供了一系列静态方法用于科学计算。其方法的参数和返回值类型一般为double型。abs:绝对值acos,asin,atan,cos,sin,tan:三角函数sqrt:平方根pow(double a,double b):a的b次幂log:自然对数exp:e为底指数max(double a,double b):返回两个double值的最大值min(double a,double b):返回两个double值得最小值random():...原创 2021-09-09 17:09:29 · 38 阅读 · 0 评论 -
System类
System类:1)System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。2)由于该类的构造器是private的,所以无法创建该类的对象,也就是无法实例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便的进行调用。3)成员变量: System类内部包含in、out和err三个成员变量,分别代表标准输入流(键盘输入),标准输出流(显示器)和标准错误输出流(显示器)。4)成员方法 native ...原创 2021-09-09 15:24:03 · 155 阅读 · 0 评论 -
Java比较器:Comparable和Comparator
说明: Java中的对象,正常情况下,只能进行比较:==或!=。不能使用>或<,但是在开发场景中,我们需要对多个对象进行排序,言外之意,需要比较对象的大小。如何实现?使用两个接口中的任何一个:Comparable或Comparatorjava实现对象排序的方式有两种:自然排序:java.lang.Comparable1)Comparable接口强行对实现它的每个类的对象进行整体排序,这种排序被称为类的自然排序。2)实现Comparable的类必须实现com...原创 2021-09-09 10:53:51 · 77 阅读 · 0 评论 -
JDK8中新日期时间API
java.time:包含值对象的基础包java.time.chrono:提供对不同的日历系统的访问java.time.format:格式化和解析时间和日期java.time.temporal:包括底层框架和扩展特性java.time.zone:包含时区支持的类说明:大多数开发者智慧用到基础包和format包,也可能会用到temporal包。因此,尽管有68个新的公开类型,大多数开发者,大概智慧用到其中的三分之一。...原创 2021-09-08 18:47:13 · 96 阅读 · 0 评论 -
获取一个字符串在另一个字符串中出现的次数
获取一个字符串在另一个字符串中出现的次数。比如:获取“ab”在“abkkcadkabkebfkabkskab”中出现的次数。public class StringDemo1 { /* 获取一个字符串在另一个字符串中出现的次数。 比如:获取“ab”在“abkkcadkabkebfkabkskab”中出现的次数。 获取subStr在mainStr中出现的次数 */ public int getCount(String mainStr,Stri...原创 2021-09-07 10:29:04 · 432 阅读 · 0 评论 -
java字符串反转三种方式
将一个字符串进行反转。将字符串中指定部分进行反转。比如“abcdefg”反转为“abfedcg”。public class StringDemo { /* 将一个字符串进行反转。将字符串中指定部分进行反转。比如“abcdefg”反转为“abfedcg”。 */ //方式一:转换为char[] public String reverse(String str, int startIndex, int endIndex) { if (str !=原创 2021-09-06 21:42:20 · 4145 阅读 · 0 评论 -
JDK8之前日期时间API
JDK8之前日期时间API:1)java.lang.System类 System类提供的public longcurrentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。(此方法适于计算时间差)计算世界时间的主要方法有:UTC(Coordinated Universal Time)、GMT(Greenwich Mean Time)、CST(Central Standard Time)2)java.util.Data类 表示特定的...原创 2021-09-06 16:30:06 · 231 阅读 · 0 评论 -
StringBuffer和StringBuilder
String、StringBuffer、StringBuilder三者的异同?String:不可变的字符系列,底层使用char[]存储。StringBuffer:可变的字符序列,线程安全的,效率低,底层使用char[]存储。StringBuilder:可变的字符序列,jdk5.0新增的,线程不安全的,效率高,底层使用char[]存储。源码分析:String str=new String();//new char[0];String str1=new String(“abc”);//原创 2021-09-06 14:22:58 · 63 阅读 · 0 评论 -
String与基本数据类型转换
字符串-->基本数据类型、包装类:1)Integer包装类的public static int parseInt(String s):可以将由“数字”字符组成的字符串转换位整型。2)类似地,使用java.lang包中的Byte、Short、Long、Float、Double类调相应的类方法可以将由“数字” 字符组成的字符串,转化为相应的基本数据类型。基本数据类型、包装类-->字符串1)调用String类的public String valueOf(int n)可将int型转换原创 2021-09-05 17:50:03 · 409 阅读 · 0 评论 -
String的常用方法
String的常用方法:int length():返回字符串的长度:return value.lengthchar charAt(int index):返回某索引处的字符return value[index]boolean isEmpty():判断是否为空字符串:return value.length==0String toLowerCase():使用默认语言环境,将String中的所有字符转换为小写String toUpperCase():使用默认语言环境,将String中的所有字符转原创 2021-09-05 14:47:23 · 92 阅读 · 0 评论 -
字符串相关的类:String
String的特性:1)String类:代表字符串。Java程序中的所欲字符串字面值(如“abc”)都作为此类的实现实例。2)String使用一个final类,代表不可变的字符序列。3)String对象的字符内容是存储在一个字符数组value[]中的。public final class String implements java.io.Serializable,Comparable<String>,CharSequence{ /** The value is原创 2021-09-04 16:57:43 · 120 阅读 · 0 评论 -
释放锁和不释放锁操作
释放锁的操作:1)当前线程的同步方法、同步代码块执行结束。2)当前线程在同步代码块、同步方法种遇到break、return中止了该代码块、该方法继续执行。3)当前线程在同步代码块、同步方法中出现了未处理的Error或Exception,导致异常结束。4)当前线程在同步代码块、同步方法中执行了线程对象的wait()方法,当前线程暂停,并释放锁。不会释放锁的操作:1)线程执行同步代码块或同步方法时,程序调用Thread.sleep()、Thread.yield()方法暂停当前线程的执原创 2021-09-03 19:54:54 · 1037 阅读 · 0 评论 -
使用线程池创建多线程
新增方式二:使用线程池背景:经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建销毁、实现重复利用。类似于生活中的公交交通工具。好处:提高响应速度(减少了创建新线程的时间) 降低资源消耗(重复利用线程池中线程,不需要每次都创建) 便于线程管理 corePoolSize:核心池的大小 maximumPoolSize:最大线程数 keepaliveTime:线程没有任务时最原创 2021-09-03 15:22:26 · 1241 阅读 · 0 评论