核心Java
蓝星花
用代码编写我们的青春年华!
展开
-
阅读jdk源码
1.首先介绍下如何导入jdk源码,需要下载jdk(不是jre),jdk包中会有一个src.zip,这个就是源码包2.用idea新建一个普通java项目,把解压后的src所有文件拷到对应idea新建的java项目中,如下图:java.* java SE的标准库,是java标准的一部分,是对外承诺的java开发接口,通常要保持向后兼容,一般不会轻易修改。包括原创 2018-02-06 16:16:01 · 12995 阅读 · 5 评论 -
简单通俗了解一个完整的Java程序运行过程(内存分配情况)
1.JVM自动寻找main方法,执行第一句代码,创建一个Test类的实例,在栈中分配一块内存,存放一个指向堆区对象的指针110925。2.创建一个int型的变量date,由于是基本类型,直接在栈中存放date对应的值9。3.创建两个BirthDate类的实例d1、d2,在栈中分别存放了对应的指针指向各自的对象(对象在堆中)。他们在实例化时调用了有参数的构造方法,因此对象中有自定义初始值。调用tes...原创 2018-05-25 15:19:48 · 3413 阅读 · 0 评论 -
Java 中的反射机制-简单通俗
转载请注明出处:http://blog.csdn.net/magic_jss/article/details/52187726; 1、什么是反射?JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。反射其实就是通过.class字节码文件实现Ja...转载 2018-05-25 20:19:43 · 463 阅读 · 0 评论 -
Java反射机制动态加载-通俗易懂
编译/运行编译时是静态加载,如我们的new();运行时是动态加载,Class.forName();Demo走起class Main { public static void main(String[] args) throws Exception { if("Excel".equals(args[0])){ Exce...原创 2018-05-26 10:42:22 · 702 阅读 · 0 评论 -
底层实现:JDBC+IO+Socket
-- ------------------------------ sql file-- ----------------------------DROP TABLE IF EXISTS `tb_file`;CREATE TABLE `tb_file` ( `fid` int(11) NOT NULL AUTO_INCREMENT, `fname` varchar(255) C...原创 2018-05-27 22:09:52 · 939 阅读 · 0 评论 -
多线程同步的五种方法-(银行存取钱)
一、五种方法1)同步方法synochronized2)同步块synochronized3)特殊域变量volatile4)重人锁ReentrantLook5)局部变量ThreadLocal二、为什么要线程同步因为当我们有多个线程要同时访问一个变量或对象时,如果这些线程中既有读又有写操作时,就会导致变量值或对象的状态出现混乱,从而导致程序异常。举个例子,如果一个银行账户同时被两个线程操作,一个取100...转载 2018-05-28 16:20:04 · 4771 阅读 · 2 评论 -
Wait,Notify-小三 pk 女朋友
简单的例子人物: 1.男朋友 存钱 2.女朋友 取钱 3.小三 取钱1.账户Accountpackage com.cxx.thread.briup;/** * @Author: cxx * @Date: 2018/6/4 16:13 */public class Account { private int balance;...原创 2018-06-04 17:04:23 · 294 阅读 · 0 评论 -
java IO体系的学习总结
https://blog.csdn.net/nightcurtis/article/details/513241051.Java Io流的概念,分类,类图。1.1 Java Io流的概念 java的io是实现输入和输出的基础,可以方便的实现数据的输入和输出操作。在java中把不同的输入/输出源(键盘,文件,网络连接等)抽象表述为“流”(stream)。通过流的形式允许java程序使用相同的方...转载 2018-05-24 16:50:12 · 355 阅读 · 0 评论 -
Java代码执行顺序-(花1分钟看一下吧)
1.执行的六大原则 1)父类:静态成员赋值,静态代码块 2)子类:静态成员赋值,静态代码块 3)父类:实例成员赋值,实例代码块 4)父类:构造器中的其他方法 5)子类:实例成员赋值,实例代码块 6)子类:构造器中的其他方法2.下面程序会输出什么?package com.cxx.thread;public class Happy{ s...原创 2018-05-29 11:39:42 · 756 阅读 · 0 评论 -
线程池的理解及使用-快速上手
1.初识线程池:根据系统自身的环境情况,有效的限制执行线程的数量,使得运行效果达到最佳。线程主要是通过控制执行的线程的数量,超出数量的线程排队等候,等待有任务执行完毕,再从队列最前面取出任务执行。2.线程池作用:减少创建和销毁线程的次数,每个工作线程可以多次使用可根据系统情况调整执行的线程数量,防止消耗过多内存3.使用ExecutorService:线程池接口ExecutorService poo...转载 2018-05-29 16:19:50 · 315 阅读 · 0 评论 -
Java解析XML(4种方法)
xml文件<?xml version="1.0" encoding="utf-8" ?>&原创 2018-05-30 09:47:53 · 231404 阅读 · 33 评论 -
自己实现双向链表Link-通俗易懂
前言 链表中的每个节点即指向前面一个节点,也指向后面一个节点,就像丢手绢游戏一样,每个人都手拉手 。双向链表结构和单向链表的区别:最后一个结点的链接地址上,单向链表是null,而双向链表是表头的链接地址。 删除之后 index节点的上一个(20这个节点)的下一个指向index节点的下一个 index节点的下一个(40这个节点)的上一个指向index节点的上...原创 2018-06-07 22:52:58 · 1849 阅读 · 0 评论 -
自己实现ArrayList-通俗易懂
前言 我们知道ArrayList的底层结构是通过数组来实现的,那么我们试着弄个玩玩!MyList接口package com.cxx.list;import java.util.Collection;/** * @Author: cxx * 实现自己的list 底层原理:数组 * 定义好接口 * @Date: 2018/6/7 16:47 */public i...原创 2018-06-07 17:38:45 · 1240 阅读 · 2 评论 -
自己实现单链表Link-通俗易懂
前言 链表在我们日常的开发过程中应该说是非常常见,各种网络框架用到的队列,底层用到的都是链表.相信有一句话大家都听书过:集合更适合查询操作,链表更适合频繁的插入,删除操作实现单链表的思路链表类,数据节点节点类包含数据,和对下个节点的引用完整代码package com.cxx.list;/** * @Author: cxx * 单链表 * @Date: 2...原创 2018-06-07 19:58:09 · 1506 阅读 · 0 评论 -
自己实现HashSet-通俗易懂
前言 Hashset是基于HashMap实现的,默认构造函数是构建一个初始容量为16,负载因子为0.75 的HashMap。封装了一个 HashMap 对象来存储所有的集合元素,所有放入 HashSet 中的集合元素实际上由 HashMap 的 key 来保存,而 HashMap 的 value 则存储了一个 PRESENT,它是一个静态的 Object 对象。 HashSe...原创 2018-06-08 10:15:34 · 1061 阅读 · 0 评论 -
自己实现LinkedHashSet-通俗易懂
前言 前一篇博客实现了HashSet,而LinkedHashSet是在HashSet的基础上,用链表维护遍历出的顺序。对于LinkedHashSet而言,它继承与HashSet、又基于LinkedHashMap来实现的。 代码实现 LinkedHashSet底层使用LinkedHashMap来保存所有元素,它继承与HashSet,其所有的方法操作上又与HashSet相同,...原创 2018-06-08 11:04:42 · 818 阅读 · 0 评论 -
自己实现HashMap-通俗易懂
前言 HashMap的底层实现主要是基于数组和链表来实现的,HashMap中通过key的hashCode来计算hash值的,由这个hash值计算在数组中的位置,将新插入的元素放到数组的这个位置,如果新插入的元素的hash值跟这个位置上已有元素的hash值相同,就会出现hash冲突,这时候,就在该位置通过链表来插入新的元素。 参考图:http://www.cnblogs.com/che...原创 2018-06-08 15:05:22 · 9854 阅读 · 14 评论 -
Java之JDBC-批量操作
1.增加插入1000条数据,查看各种方法所需要的时间:*普通方式:package com.test.jdbc;import java.sql.*;/** * @Author: cxx * @Date: 2018/4/10 18:22 */public class JdbcTest { public static void main(String[] args) { ...原创 2018-04-10 20:08:51 · 3283 阅读 · 0 评论 -
Java之JDBC-(看这篇就够了)
JDBC (Java DB Connection)---Java数据库连接一、ODBC到JDBC的发展历程(看一眼就可以)自从Java语言于1995年5月正式公布以来,Java风靡全球。出现大量的用java语言编写的程序,其中也包括数据库应用程序。由于没有一个Java语言的API,编程人员不得不在Java程序中加入C语言的ODBC函数调用。这就使很多Java的优秀特性无法充分发挥,比如平台无关性、...原创 2018-04-10 18:21:37 · 891 阅读 · 0 评论 -
对JDK的深入理解
我们先来开一下我们下载的jdk文件目录:(Java develop kit (java开发工具)) Java的jdk其实一共包含三部分内容:1、工具包2、类库3、JREjdk包含了对Java的编译以及运行的处理,他能对编写的Java代码进行编译,编译之后的字节码文件,在jdk内部的虚拟机上运行,可以说它提供了全套的Java服务。编译:首先原创 2018-02-06 15:37:54 · 1087 阅读 · 0 评论 -
JVM学习
原文链接:http://blog.csdn.net/hjxgood/article/details/53896229JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平转载 2018-02-06 16:52:27 · 479 阅读 · 0 评论 -
工厂模式
1.什么是工厂模式工厂模式(Factory Pattern)的意义就跟它的名字一样,在面向对象程序设计中,工厂通常是一个用来创建其他对象的对象。工厂模式根据不同的参数来实现不同的分配方案和创建对象。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。例如用工厂来创建 人 这个对象,如果我们需要一个男人对象,工厂就会为我们创建一个男人;如果我们需要...转载 2018-02-18 18:08:15 · 375 阅读 · 0 评论 -
抽象工厂模式
1.定义抽象工厂模式(Abstract Factory Pattern)是一种软件开发设计模式。抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。如果比较抽象工厂模式和工厂模式,我们不难发现前者只是在工厂模式之上增加了一层抽象的概念。抽象工厂是一个父类工厂,可以创建其它工厂类。所以我们也叫它 “工厂的工厂”。2.抽象工厂模式应用抽象工厂模式特别适合于这样的一种产品结构:产品分...转载 2018-02-18 18:27:50 · 397 阅读 · 0 评论 -
适配器模式
=======================================================根据实验楼教学课程整理=======================================================1.什么是适配器模式顾名思义,适配器模式(Adapter Pattern)当然是用来适配的啦。当你想使用一个已有的类,但是这个类的接口跟你的又不一样,不能拿来...转载 2018-02-18 18:39:05 · 349 阅读 · 0 评论 -
Java设计模式
1.什么是设计模式在软件工程中,设计模式是对软件设计中普遍存在的各种问题,所提出的 解决方案。换句话说,设计模式是一套被反复使用、多数人知晓的、经过分类的、代码设计的 经验的总结。使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码可靠性。2. 设计模式原则1、开闭原则(Open Close Principle)开闭原则的意思是:对扩展开放,对修改封闭。在程序需要进行扩展的时候,不能去修...原创 2018-02-18 17:47:46 · 365 阅读 · 0 评论 -
23种设计模式总结
1.单例模式(Singleton Pattern)定义:Ensure a class has only one instance, and provide a global point of access to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。)通用代码:(是线程安全的)public class Singleton { private stati...转载 2018-02-19 11:22:31 · 415 阅读 · 0 评论 -
java 自定义注解的demo
前言Java的Annotation是在5.0版本之后引入的,可以用于创建文档,跟踪代码中的依赖性,并且可以执行编译时期检查。注解就是给虚拟机看的,代表程序的一些特殊的功能。JDK中提供了@Override,@SuppressWarning,@Deprecated三种注解,当让还有元注@Target,@Retention,@Documented,@Inherited,元注解的作用负责注解其它注解。要...原创 2018-03-15 12:41:32 · 1729 阅读 · 4 评论 -
二叉树的常见方法及三种遍历方式 Java 实现
读完本文你将了解到:什么是二叉树 Binary Tree两种特殊的二叉树满二叉树完全二叉树满二叉树 和 完全二叉树 的对比图二叉树的实现用 递归节点实现法左右链表示法 表示一个二叉树节点用 数组下标表示法 表示一个节点二叉树的主要方法二叉树的创建二叉树的添加元素二叉树的删除元素二叉树的清空获得二叉树的高度获得二叉树的节点数获得某个节点的父亲节点二叉树的遍历先序遍历中序遍历后序遍历遍历小结总结一道笔...转载 2018-03-15 20:50:40 · 906 阅读 · 1 评论 -
java的锁机制
一段synchronized的代码被一个线程执行之前,他要先拿到执行这段代码的权限,在java里边就是拿到某个同步对象的锁(一个对象只有一把锁); 如果这个时候同步对象的锁被其他线程拿走了,他(这个线程)就只能等了(线程阻塞在锁池等待队列中)。 取到锁后,他就开始执行同步代码(被synchronized修饰的代码);线程执行完同步代码后马上就把锁还给同步对象,其他在锁池中等待的某个线程就可以拿到锁...转载 2018-03-03 15:32:59 · 373 阅读 · 0 评论 -
Java乐观锁和悲观锁的区别
悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上...转载 2018-03-03 16:21:47 · 2525 阅读 · 0 评论 -
线程池的工作原理及使用示例
转载地址:https://www.cnblogs.com/nullzx/p/5175574.html1. 为什么要使用线程池? 我们现在考虑最简单的服务器工作模型:服务器每当接收到一个客户端请求时就创建一个线程为其服务。这种模式理论上可以工作的很好,但实际上会存在一些缺陷,服务器应用程序中经常出现的情况是单个客户端请求处理的任务很简单但客户端的数目却是巨大的,因此服务器在创建和销毁线程所花费的时间...转载 2018-03-03 17:24:06 · 569 阅读 · 0 评论 -
线程池的几种常见的创建的方式
一:创建大小不固定的线程池二:创建固定数量线程的线程池三:创建单线程的线程池四:创建定时线程1.创建大小不固定的线程池package com.peace.pms.Test;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * @Author: cxx...转载 2018-03-03 17:40:29 · 8438 阅读 · 3 评论 -
CountDownLatch的用法
CountDownLatch是一个同步的辅助类,它可以允许一个或多个线程等待,直到一组在其它线程中的操作执行完成。一个CountDownLatch会通过一个给定的count数来被初始化。其中await()方法会一直阻塞,直到当前的count被减到0,而这个过程是通过调用countDown()方法来实现的。在await()方法不再阻塞以后,所有等待的线程都会被释放,并且任何await()的子调用都会...转载 2018-03-03 17:55:48 · 491 阅读 · 0 评论 -
Java中的堆(heap)和栈(stack)
栈内存定义:主要保存在函数中定义的一些基本类型的变量和对象的引用变量。如:基本类型变量:String str1 = "测试";引用变量:String str2 = new String("测试");str1和str2 都是保存在栈内存中的。当定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后(如一个界面finish();一些变量不会再用到),java会自动释放掉该变量所分...转载 2018-04-10 11:04:43 · 521 阅读 · 0 评论 -
java多线程-(总结)
生产者与消费者应用案例产品类Product:生产者Producer:消费者Consumer:测试函数:MainTest1.Productpackage com.test.productconnsumer;/** * @Author: cxx * @Date: 2018/4/10 17:39 */public class Product { private String na...原创 2018-04-10 18:00:20 · 453 阅读 · 0 评论 -
Java网络编程TCP/IP,UDP
TCP/IP客户端package com.cxx.netty;import java.io.*;import java.net.Socket;/** * @Author: cxx * 客户端 * @Date: 2018/5/27 14:14 */public class GreetingClient { private static String host="1...原创 2018-05-27 15:41:01 · 593 阅读 · 0 评论