JDK

Java集合框架-概述

六月ゝ 毕业季﹏ 提交于 2020-08-17 19:14:34
Java 集合框架 学习目标 会使用集合存储数据 遍历集合,取出数据 掌握每种集合的特性 学习方法 学习顶层!通过顶层接口/抽象类的共性方法,所有子类都可以使用 使用底层!顶层无法创建对象,需要使用具体的实现类创建对象 框架图 第一章 Collction集合 一种工具,放在 java.util 包中 单列集合的最顶层接口,定义了所有单列集合的共性方法 方法 描述 boolean add(E e) 把给定的对象 添加 到当前集合中 boolean isEmpty() 如果此集合不包含元素,则返回 true 。 boolean remove(E e) 从该集合中 删除 指定元素的单个实例(如果存在) int size() 返回此集合中的元素数。 boolean contains(E e) 如果此集合 包含 指定的元素,则返回 true 。 Object[] toArray() 返回一个包含此集合中所有元素的数组。 void clear() 从此集合中 清空 所有元素 创建集合对象时,使用多态,面向接口编程 比如 Collection<String> list = new ArrayList<String>(); 测试代码 package collection; import java.util.ArrayList; import java.util.Collection; /** *

Java8新特性代码示例浅聊

旧城冷巷雨未停 提交于 2020-08-17 19:12:17
   Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。 Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等。   博主最近才有空研究了一下Java8的一些新特性,简单地写了一些测试用例,感觉开始有那味了,受益颇深,将示例代码贴出,以供大家学习交流。   测试用例代码:    import java.util.* ; import java.util.stream.Collectors; /** * @ClassName Java8Test * @Description java8新特性测试用例 * @Author zzp * @Date 2020/6/30 11:06 * @Version 1.0 */ public class Java8Test { public static void main(String[] args) { Java8Test test = new Java8Test(); List <String> hobbies1= Arrays.asList("篮球","看书","写作" ); List <String> hobbies2= Arrays.asList("足球","看书","睡觉" );

spring源码调试准备工作

若如初见. 提交于 2020-08-17 18:40:01
Spring源码下载 1、git clone--branchv5.1.3.RELEASE https://gitee.com/Z201/spring-framework.git 2、gradle 下载,gradle 要 JDK8 的版本 3、到下载的 spring 源码路径执行 gradle 命令, gradlew:spring-oxm:compileTestJava 4、用 idea 打开 spring 源码工程,在 idea 中安装插件 kotlin,重启 idea 5、把编译好的源码导入到工程中 最后我们需要在我们自己的项目中调试源码引入spring源码对应的依赖,并且将源码打成jar包: 双击对应工程的jar就可以断点调试了 来源: oschina 链接: https://my.oschina.net/u/3995125/blog/4310406

Java 的新未来:逐渐“Kotlin 化”

若如初见. 提交于 2020-08-17 18:16:50
我们行业始终有一个热门话题,那就是对 Java 的批判,这种批判很大程度上来源于 Java 的繁琐性以及它所生成的大量样板式代码 ,而这些代码在很多场景下是根本不需要的。 虽然我一直以来都很喜欢 Java,但是我不能说这些指责是错误的。的确,Java 的繁琐性以及数量不菲的杂乱代码在很多情况下会很烦人。在大多数情况下,我们不得不接受我们生活在一个不完美的世界这一现实,很多时候,我们必须两害相权取其轻。我们都知道,Java 并不完美,但是主要的问题在于在此之前为什么没有采取任何措施来解决这些问题呢? 我认为,变更需要耗费这么长时间的唯一原因就是 Java 缺乏足够的竞争。 Java 语言之所以能够主导市场,可能就是因为缺乏真正的竞争对手 ,当然也要归功于 Sun 和 Oracle 先后做出的巨大努力。 Java 提供的强类型安全性,以及作为一个结构良好的语言所带来的其他特性,使其成为大型项目中非常流行的语言 。通过使用 Java,我们很少会让事情变得难以收拾。Java 的另外一个重要特点是作为多平台语言,它运行在自己的虚拟机上,这使其能够完美契合很多的组织。如果你通过著名的 JIT 编译器启用了其自动性能优化的固有能力,那么在很多情况下都能将糟糕代码所带来的影响最小化,这样我们就有了一组使用 Java 的坚实理由。 但是,后来发生了什么呢?接下来的事情就是,能够像 Java

三篇搞定Java高并发笔记【第一篇】

无人久伴 提交于 2020-08-17 17:33:21
本文 Java高并发 的内容将从三个阶段记录,参考资料【Java并发编程详解】: 多线程基础 Java内存模型(高并发设计模式) Java并发包JUC Java并发包源码AQS 什么是线程 相信学过操作系统的同学都知道线程和进程的关系,对于计算机来说一个任务就是一个进程,一个进程里面至少有一个线程。想必学习的时候会不会问, 一个APP就对应一个进程,一个进程难道就是一个JVM吗?那经常写的函数是不是就是一个线程呢? 通常来说,一个APP是一个进程,但是也有可能多个进程。 一个进程就是一个JVM (虚拟机),里面有很多个线程运行,接下来就是操作系统的知识了。 每个线程都有自己的局部变量表、程序计数器以及生命周期,线程的生存状态分为以下五个主要的阶段: NEW状态 当我们用关键字 new 创建一个Thread对象时,此时并不处于执行状态,因为没有调用start方法。此时只是一个对象的状态,就跟平常创建一个对象一样,当用 start 方法时就会进入到`RUNNABLE``状态。 RUNNABLE状态 此时才是真正的在JVM中创建了一个线程,线程一经启动就立即执行吗?肯定不是的,因为还有个RUNNING状态,当调用run方法才真正开始执行。线程的执行与否都需要听从CPU的调度,只有CPU调度了才有执行资格。 RUNNING状态 一旦CPU通过轮询从队列中选中了线程

Java对象创建模式

微笑、不失礼 提交于 2020-08-17 17:23:47
创建Java对象时,对于可为空的属性,创建对象的时候有3种模式:重叠构造器模式、JavaBeans模式、Builder模式(推荐)、Stream模式(推荐)。 重叠构造器模式 该模式使用多个构造器创建Java对象。 该写法符合Java的标准惯例,但是随着参数的越来越多,代码变得越来越难写。而且该方式灵活性低,可读性较差,客户端想要知道哪些值的具体含义,还需要仔细数参数,而且还容易写错参数的位置。 package effectiveJava.builder; public class NutritionFactsMultiContr { //食物尺寸 private int servingSize; //食物数量 private int servings; //热量(卡路里) private int calories; //脂肪含量 private int fat; //食用盐(钠)含量 private int sodium; //糖类含量 private int carbohydrate; public NutritionFactsMultiContr(int servingSize, int servings) { this(servingSize,servings,0); } public NutritionFactsMultiContr(int servingSize,

好程序员Java培训分享Java性能常见命令有哪些

与世无争的帅哥 提交于 2020-08-17 17:20:58
  好程序员Java培训分享Java性能常见命令有哪些,性能优化一向是后端服务优化的重点,但是线上性能故障问题不是经常出现,或者受限于业务产品,根本就没办法出现性能问题,包括笔者自己遇到的性能问题也不多,所以为了提前储备知识,当出现问题的时候不会手忙脚乱。   既然是定位问题,肯定是需要借助工具,我们先了解下需要哪些工具可以帮忙定位问题。   top命令   top命令是我们最常用的Linux命令之一,它可以实时的显示当前正在执行的进程的CPU使用率,内存使用率等系统信息。top -Hp pid 可以查看线程的系统资源使用情况。   vmstat命令   vmstat是一个指定周期和采集次数的虚拟内存检测工具,可以统计内存,CPU,swap的使用情况,它还有一个重要的常用功能,用来观察进程的上下文切换。字段说明如下:   r: 运行队列中进程数量(当数量大于CPU核数表示有阻塞的线程)   b: 等待IO的进程数量   swpd: 使用虚拟内存大小   free: 空闲物理内存大小   buff: 用作缓冲的内存大小(内存和硬盘的缓冲区)   cache: 用作缓存的内存大小(CPU和内存之间的缓冲区)   si: 每秒从交换区写到内存的大小,由磁盘调入内存   so: 每秒写入交换区的内存大小,由内存调入磁盘   bi: 每秒读取的块数   bo: 每秒写入的块数   in:

深入理解JVM(③)虚拟机的类加载过程

倾然丶 夕夏残阳落幕 提交于 2020-08-17 17:01:04
前言 上一篇我们介绍到一个类的生命周期大概分7个阶段:加载、验证、准备、解析、初始化、使用、卸载。并且也介绍了类的加载时机,下面我们将介绍一下虚拟机中类的加载的全过程。 主要是类生命周期的,加载、验证、准备、解析和初始化这五个阶段所执行的具体动作。 加载 类加载过程的第一个阶段就是加载,在加载阶段,Java虚拟机需要完成以下三件事情: 1. 通过一个类的全限定名来获取定义此类的二进制字节流。 2. 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。 3. 在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。 《Java虚拟机规范》对这三点要求其实并不是特别具体,这样留给虚拟机实现和Java应用的灵活度都是相当大的。仅第一条,获取二进制字节流,并没有有指出从哪里获取,如何获取。这样就已经能被我们的Java开发人员玩出各种花样了。 例如: 从ZIP包中读取(JAR、EAR、WAR)。 从网络中获取(Web Applet)。 运行时计算生成,最典型的就是动态代理技术,在 java.lang.reflect.Proxy 中,就是用了 ProxyGenerator.generateProxyClass() 来为特定接口生成形式为“ $Proxy ”的代理类的二进制字节流。 由其他文件生成(JSP)。 从数据库中读取。

Java项目在编译时出现“Unsupported major.minor version 52”的解决方案

僤鯓⒐⒋嵵緔 提交于 2020-08-17 16:55:48
如题所示,出现这个问题的原因是: 在高版本JDK编译的项目放到低版本JDK所在的eclipse环境中编译运行将会出现这个错误。 因此,要想这个项目在低版本的环境中能够正常运行,可以按照下面的思路进行解决: (1)查看JDK的环境变量,确保JDK环境变量已经配置正确 (2)修改Java Build Path: 在eclipse中的项目上鼠标右键, Properties –> Java Build Path –>Libraries ,将这里面不存在的删掉,并重新选择当前存在的库,如:JDK1.7、Tomcat7.0等 这一步做完之后,刷新项目重新编译运行,如果仍然报错的话,请继续往下看 (3)修改Project Facets: 同上面一样,在eclipse中的项目上鼠标右键, Properties –> Project Facets 在这里,主要修改我圈上的这两项配置,上面的3.0和JDK1.7相对应,3.1和JDK1.8相对应 如果这里不能修改,或者修改后刷新项目仍然报错的话,请继续往下看 (4)修改org.eclipse.wst.common.project.facet.core.xml: 打开项目所在的文件夹,打开.settings文件夹,修改里面的“org.eclipse.wst.common.project.facet.core.xml”文件 跟上面一样,直接修改这里的版本

去年去阿里面试,被问到ArrayList和LinkedList,我是这样回答的!

喜夏-厌秋 提交于 2020-08-17 16:55:19
前言 在一开始基础面的时候,很多面试官可能会问List集合一些基础知识,比如: ArrayList 默认大小是多少,是如何扩容的? ArrayList 和 LinkedList 的底层数据结构是什么? ArrayList 和 LinkedList 的区别?分别用在什么场景? 为什么说 ArrayList 查询快而增删慢? Arrays.asList 方法后的List可以扩容吗? modCount 在非线程安全集合中的作用? ArrayList 和 LinkedList 的区别、优缺点以及应用场景 * ArrayList(1.8) ArrayList 是由动态再分配的 Object[] 数组作为底层结构,可设置 null 值,是非线程安全的。 ArrayList成员属性 //默认的空的数组,在构造方法初始化一个空数组的时候使用 private static final Object[] EMPTY_ELEMENTDATA = {}; //使用默认size大小的空数组实例 private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; //ArrayList底层存储数据就是通过数组的形式,ArrayList长度就是数组的长度。 transient Object[] elementData; /