Java SE
文章平均质量分 89
Marvin-Fox
这个作者很懒,什么都没留下…
展开
-
Java类的 初始化 和 实例化区别
类的初始化:是完成程序执行前的准备工作。在这个阶段,静态的(变量,方法,代码块)会被执行。同时在会开辟一块存储空间用来存放静态的数据。初始化只在类加载的时候执行一次。类的实例化:是指创建一个对象的过程。这个过程中会在堆中开辟内存,将一些非静态的方法,变量存放在里面。在程序执行的过程中,可以创建多个对象,既多次实例化。每次实例化都会开辟一块新的内存。1.主要区别2.基础知识2.1 java类的生命周期:指一个class文件从加载到卸载的全过程,类的完整生命周期包括7个部分:...转载 2020-09-23 17:13:30 · 9571 阅读 · 0 评论 -
String使用 final 修饰的目的
一、描述String 类被声明成final类型,不能被继承 。通过String源码可以看到,String类型的底层是由final修饰的char数组存储,在value初始化完成后不能被其他数组引用,在String类方法中没有改变数组的方法,确保String不可变Java语言的创建者James Gosling,曾经在一次采访中被人问到:什么时候应该使用不可变对象(immutable ob...转载 2020-03-08 20:35:51 · 994 阅读 · 1 评论 -
Java 8 的改变及新特性(一)
一、HashMap底层结构的改变jdk1.7 HashMap : 数组+单向链表jdk1.8 HashMap :数组+(单向链表/红黑树)jdk1.8中多了下图中3个参数在hashmap中,当hash碰撞大于8(数组单个下标中链表存储大于8个数据),并且总容量大于64(整个 hashmap中总大小大于64)时,hashmap的链表结构会转变为红黑树结构进行存储改变原因:链表...原创 2019-10-30 23:26:47 · 405 阅读 · 0 评论 -
Java 8 新特性(二)Lambda表达式
一、Lambda表达式简介个人理解,lambda表达式就是一种新的语法,没有什么新奇的,简化了开发者的编码,其实底层还是一些常规的代码。Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。Lambda表达式的语法(记得要在jdk1.8及以上的jdk环境下实验)Lambda 表达式的基础语法:Java8中引入了一个新的操作符"- &g..原创 2020-06-16 23:39:51 · 366 阅读 · 0 评论 -
Java 8 新特性(三)Stream API
一、Stream APIJava 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。生成流在 Java 8 中, 集合接口有两个方法来生成流: stream()− 为集合..原创 2020-08-01 20:41:13 · 5988 阅读 · 1 评论 -
Java多线程(一)之基本
一、线程状态和的生命周期各种状态一目了然,值得一提的是"blocked"这个状态:线程在Running的过程中可能会遇到阻塞(Blocked)情况调用join()和sleep()方法,sleep()时间结束或被打断,join()中断,IO完成都会回到Runnable状态,等待JVM的调度。 调用wait(),使该线程处于等待池(wait blocked pool),直到n..............................原创 2019-03-14 15:36:58 · 360 阅读 · 0 评论 -
Java多线程(二)之Synchronized锁
一、Synchronized是什么?如何理解synchronized是什么,根据百度词条搜索,上图说话我们摘要总结:synchronized是一个修饰关键字 它是一个锁。一旦将某个代码块、方法、类锁定,那么在多个线程同时访问这个修饰对象的情况下,只允许一个线程进行访问。 当前线程访问完成释放掉当前这个锁住的对象后(释放锁),才允许下一个线程进入进行访问(获取锁) 无论sy...原创 2019-03-18 16:21:28 · 247 阅读 · 0 评论 -
Java多线程(三)之 Lock 锁
一、介绍Jdk1.5以后,在java.util.concurrent.locks包下,有一组实现线程同步的接口和类,说到线程的同步,可能大家都会想到synchronized关键字,这是java内置的关键字,用来处理线程同步的,但这个关键字有很多的缺陷,使用起来也不是很方便和直观,所以就出现了Lock,下面,我们就来对比着讲解Lock。通常我们在使用synchronized关键字的时...............原创 2019-08-21 12:07:59 · 949 阅读 · 0 评论 -
Java多线程(四)线程池使用方法
一、new Thread的弊端执行一个异步任务你还只是如下new Thread吗?new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub }}).start();1、说说弊端:a. 每次new Threa...............原创 2019-08-18 11:58:46 · 8993 阅读 · 0 评论 -
Java多线程(五)生产者、消费者案例
生产完再消费,消费完再生产:满足数量后才开始进行消费,消费完全部再进行生产一只猫钓鱼,一次钓一条,放桶里,满五条后,拿回家。另一只猫吃鱼,一次吃一条,吃完后,让钓鱼猫再去钓鱼 ,如此继续(1)水桶:用来放鱼(2)创建生产者和消费者(3)main方法测试 (4)执行结果【边生产边消费】生产者:只要不大于5就一直去生产;消费者:只要有就可以一直去消费桶里最多放5条鱼一只猫钓鱼,一次钓一条放桶里同时通知另一只猫吃鱼,一次吃一条同时通知钓鱼猫再钓鱼 (只要桶里鱼不满足5条)如此继原创 2022-06-21 17:47:52 · 872 阅读 · 1 评论 -
Java多线程(六)JUC包功能
产生原因:多线程并发场景下,操作如 ArrayList 这种不安全的集合会出现问题,可能后面写入的会覆盖前面的会出现异常 :ConcurrentModificationException 多线程调用的时候:读取场景:直接对数据进行读取写入场景:写入的情况将原先的复制一份,在复制的上面进行写入,写入完成,将此数据覆盖元原先的数据目的:在写入时避免覆盖,造成数据问题 推荐使用:CopyOnWriteArrayList 推荐使用:CopyOnWriteArraySet 推荐使用:C原创 2022-06-22 00:14:35 · 469 阅读 · 0 评论 -
JVM(一)JVM虚拟机内存结构 和 JAVA内存模型(JMM)
本文转自:https://www.cnblogs.com/lewis0077/p/5143268.html,尊重作者,转载请注明出处~JVM内存结构 和 JAVA内存模型 是两个不同的概念JVM内存结构:讲的是Java虚拟机内存的结构划分,包括堆区,栈区,方法区等。JAVA内存模型(JMM):Java Memory Model,指的在java程序运行过程中,计算机有主内存,每个jav...转载 2019-03-19 14:41:27 · 1038 阅读 · 0 评论 -
JVM(二)堆内存(heap) 详解
阅读这篇文章前需要对JVM内存模型有一定的概念,参考JVM(一)JVM内存结构 和 JAVA内存模型(JMM)很好的一篇文章,转载了http://blog.51cto.com/lizhenliang/2164876?wx=JAVA堆内存管理是影响性能主要因素之一。堆内存溢出是JAVA项目非常常见的故障,在解决该问题之前,必须先了解下JAVA堆内存是怎么工作的。一、堆的内存划分结构...转载 2019-05-12 23:26:03 · 329 阅读 · 0 评论 -
JVM(三)GC 垃圾回收(Garbage Collection)
一、如何识别垃圾引用计数法最容易想到的一种方式是引用计数法,啥叫引用计数法,简单地说,就是对象被引用一次,在它的对象头上加一次引用次数,如果没有被引用(引用次数为 0),则此对象可回收String ref = new String("Java");以上代码 ref1 引用了右侧定义的对象,所以引用次数是 1如果在上述代码后面添加一个 ref = null,则由于对象没...原创 2020-01-29 14:51:02 · 553 阅读 · 0 评论 -
java中堆栈内存分析(一)String类型举例
在牛客网上看到的题目:参考牛客网下面的分析:对于这道题,考察的是对String类型的认识以及编译器优化。Java中String不是基本类型,但是有些时候和基本类型差不多,如String b = “tao” ; 可以对变量直接赋值,而不用 new 一个对象(当然也可以用 new)。所以String这个类型值得好好研究下。Java中的变量和基本类型的值存放于栈内存,而new出来的对象本...转载 2019-03-09 15:23:16 · 939 阅读 · 1 评论 -
java中堆栈内存分析(二)让你彻底明白JAVA中堆与栈的区别(详细)
简单的说: Java把内存划分成两种:一种是栈内存,一种是堆内存。在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。 堆内存用来存放由new创建的对象和数组。 在堆中分配的内存,由J...转载 2019-03-09 15:47:52 · 24286 阅读 · 4 评论 -
java中的堆(Heap)和栈(Stack)问题
Java中的堆和栈Java 把内存划分成两种:一种是栈内存,另一种是堆内存。在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java 会自动释放掉为该变量分配的内存空间,该内存空间可以立即被另作它用。堆内存用来存放由 new 创建的对象和数组,在堆...转载 2016-12-28 23:43:15 · 576 阅读 · 0 评论 -
JAVA反射
一、Java反射的概念JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.一个类有:...原创 2019-05-16 17:44:55 · 132 阅读 · 0 评论 -
深入了解Java数据结构(集合及底层实现)
一、集合介绍 Collection(单列集合) List(有序,可重复) ArrayList 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 Vector 底层数据结构是数组,查询快,增删慢 ...原创 2019-05-16 21:43:42 · 4376 阅读 · 1 评论 -
java遍历Map的4种方法及效率对比
一、Map遍历的方式先创建一个map,添加好数据:Map map=new HashMap();for(int i=0;i<10000;i++){ map.put(i, "a"+i);}1、keySet的for循环方式://只获取keypublic static void keySetForGetKey(Map<String, String> map){...转载 2019-02-20 00:10:28 · 4320 阅读 · 0 评论 -
重写equals就必须重写hashCode的原理分析
文章转自:https://www.cnblogs.com/wang-meng/p/7501378.html如果不被重写(原生Object)的hashCode和equals是什么样的? 不被重写(原生)的hashCode值是根据内存地址换算出来的一个值。 不被重写(原生)的equals方法是严格判断一个对象是否相等的方法(object1 == object2)。为什么需要重写equ...转载 2019-04-29 11:32:41 · 208 阅读 · 0 评论 -
Java设计模式【更新中...】
设计模式的六大原则总原则:开闭原则(Open Close Principle)开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类等,后面的具体设计中我们会提到这点。1、单一职责原则不要存在多于一个导致类变..............................原创 2019-05-01 15:39:20 · 897 阅读 · 0 评论 -
对多态的理解(附经典练习题)
(以下综合了多篇多态的文字,总结而得)定义:指不同类的对象对同一函数做出不同响应。实现方式:1.继承父类,方法重写(包括接口实现);2.同一个类中进行方法重载。存在的三个必要条件:1.要有继承(包括接口实现); 2.要有重写;3.父类引用指向子类对象。作用:调用方法是不用区分参数类型,程序会自动执行相应方法,如: 加法运算,可以使int相加,可以是double相加,都是同一个方法名...转载 2019-05-08 11:04:45 · 674 阅读 · 1 评论 -
动态代理和静态代理到底有什么区别,好处在哪里?
一、概念代理模式是常用的Java设计模式,它的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。按照代理类的创建时期,代理类可分为两种。静态代理 ...转载 2018-07-02 23:03:54 · 9102 阅读 · 2 评论 -
DateTime.ToString()格式详解
DateTime.ToString()用法详解我们经常会遇到对时间进行转换,达到不同的显示效果,默认格式为:2006-6-6 14:33:34 如果要换成成200606,06-2006,2006-6-6或更多的格式该怎么办呢?这里将要用到:DateTime.ToString的方法(String, IFormatProvider)示例:using System;using S转载 2016-10-18 21:49:37 · 2346 阅读 · 0 评论 -
封装、继承、多态、抽象(Java的基本特性)
一、封装二、继承三、多态四、抽象解释:描述数据模型的方法不依赖于具体实现与存放数据的机器无关 与数据存储的物理结构无关 与实现操作的算法和编程语言无关只描述数据对象集和相关操作集“是什么”,并不涉及“如何做到”的问题...原创 2018-05-13 15:38:14 · 839 阅读 · 0 评论 -
Java环境变量
下载请去Oracle官网下载:http://www.oracle.com/technetwork/java/javase/downloads/index.html下好后最好将jdk安装在系统C盘下(注意:给小白们说下,这里不要出现中文路径)安装好后通常是需要手动配置JAVA环境变量的win7下右键我的电脑---》属性---》高级系统设置---》高级---》环原创 2016-08-08 21:44:00 · 216 阅读 · 0 评论 -
sdk、jdk、jre的区别
本文转载于http://blog.csdn.net/hx_uestc/article/details/7220625 此处附上链接,请大家尊重版权一、JDK与jre简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。SDK是Software Development Kit 一般指软件开发包,可以包括函数库、编译程序等。 JDK就是Java Development Ki转载 2017-03-26 14:07:27 · 322 阅读 · 0 评论 -
什么时候应该用equals(),什么时候应该用==
本人小白一枚最近这一部分比较晕,所以自己就仔细研究了一下我结合网上和自己的理解总结了一些,如果我说的有问题,也请大家及时提醒,不足或漏说的地方愿大家积极补充以供更多小白得到帮助,在此谢谢大家了!1、equals是object的方法2、String类型的equals重写了object的方法,所以此方法比较的是内容,不比较内存地址==比较内容和地址,因为Stri原创 2016-02-12 13:37:50 · 8144 阅读 · 4 评论 -
Java enum常见的用法
一、常量定义public enum WeekDay { SUN, MON, TUE, WED, THT, FRI, SAT}二、swichpublic enum WeekDay { SUN, MON, TUE, WED, THT, FRI, SAT} public class SelectDay{ WeekDay weekday = WeekDay...转载 2019-09-18 15:36:14 · 158 阅读 · 0 评论