JAVA那些事
文章平均质量分 57
南瓜灯cc
减法即加法
展开
-
计算机关机操作工具实现
通过简单的java代码实现计算机的关机,打开浏览器的一些功能package cn.sg.oop.firstPractice;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.IOException;public class computerOperateFrame extends原创 2016-05-28 16:54:55 · 367 阅读 · 0 评论 -
Java_LinkedList工作原理
Doubly-linked list implementation of the List and Deque interfaces. Implements all optional list operations, and permits all elements (including null).LinkedList实现了list接口,其底层实际上一个双向链表,其基本操作就是对双向链表的操作原创 2017-05-03 17:47:11 · 1540 阅读 · 0 评论 -
Java_HashSet工作原理
This class implements the Set interface, backed by a hash table (actually a HashMap instance). It makes no guarantees as to the iteration order of the set; in particular, it does not guarantee that th原创 2017-05-03 23:53:30 · 1300 阅读 · 0 评论 -
Java_LinkedHashMap工作原理
Hash table and linked list implementation of the Map interface,with predictable iteration order. This implementation differs from HashMap in that it maintains a doubly-linked list running through all原创 2017-05-04 14:50:11 · 3778 阅读 · 3 评论 -
Java_LinkedHashSet工作原理
Hash table and linked list implementation of the Set interface, with predictable iteration order. This implementation differs from HashSet in that it maintains a doubly-linked list running through a原创 2017-05-04 15:10:02 · 1040 阅读 · 0 评论 -
Java自动装箱与拆箱
Java的原始数据类型有byte,boolean,short,char,int,float,long,double 而包装类对应的分別有Byte,Boolean,Short,Chararcter,Integer,Float,Long,Double 自动装箱就是Java自动把原始数据类型装换为对应的包装类,而自动拆箱就是把对应的包装类转换为原始数据类型; 看如下代码:Integer i=10;原创 2017-04-23 17:39:42 · 292 阅读 · 0 评论 -
五子棋算法判断输赢
五子棋相信大部分人都玩过,至少应该听说过。(五子棋源码)简述一下规则:当在棋盘的横行或竖行或斜行(左斜与右斜)有五个及以上连续的棋子的时候,则为赢。分析一下五子棋的算法,当下一个棋子的时候(对应相应的棋盘应该有一个坐标),应该判断下的棋子的横行,横行或竖行或斜行(左斜与右斜)是否满足连续棋子的个数大于等于5个,每次下一个棋子的时候都应该有所判断,每次都应该对4个大的方向(横行,竖行,左斜,...原创 2016-07-06 23:13:22 · 33291 阅读 · 8 评论 -
五子棋小项目的总结
五子棋实现的具体代码我就不贴出来了,给出一下最后的运行结果。 说一下收获:小白阶段,感觉目前用到的很多基本方法都是jdk已经提供的。我们现阶段应该知道jdk能提供哪些基本的方法供我们使用,每天也都在学习到一些新的基本的方法的使用,还是蛮不错的。比如画五子棋的时候,不是直接的通过画笔画,如下g.drawOval(x, y, w原创 2016-07-07 23:26:47 · 3342 阅读 · 0 评论 -
Java并发编程之CountDownLatch
在Java.util.concurrent包下,有一个CountDownLatch类。官方定义:A synchronization aid that allows one or more threads to wait untila set of operations being performed in other threads completes.其能够根据给定的初始值,调用await()方法原创 2017-06-12 00:26:24 · 615 阅读 · 0 评论 -
Java并发编程之volatile解析
在对该关键字进行认识之前,需要对Java内存模型有一定的认识。 Java内存模型规定了所有的变量都存储在主内存中,每个线程都有自己的工作内存,线程的工作内存保存了该线程使用到的变量的是主内存副本的拷贝,线程对于变量的操作(读取,复制)都必须在工作内存中进行,而不能直接读写主内存中的变量。 在进行变量操作的时候,如果每次都是从主内存中读写,无疑是影响性能的, 即一个线程在操作某一个变量之前,会先原创 2017-06-11 00:56:44 · 732 阅读 · 0 评论 -
Java并发编程之CAS算法
在多线程环境下,我们要实现对一个变量自增的话,往往会使用java.util.concurrent.atomic包下的相关实现类。 如下:public class TestAtomic { public static void main(String[] args) { ThreadDemo td=new ThreadDemo(); //开启二十个线程完成自加操原创 2017-06-11 11:16:21 · 1237 阅读 · 0 评论 -
Spring源码分析之IOC容器创建过程
我们知道,Spring框架基于IOC容器能够实现依赖注入,使代码之间不在具有高度的耦合关系.解耦给问我们带来很多的好处,不仅会使我们的代码更加容易扩展维护,同时也更加方便测试。在Spring中,我们常使用ClassPathXmlApplicationContext(类路径下读取配置),XmlWebApplicationContext(web环境下加载配置),AnnotationConfigApp...原创 2018-12-04 23:14:35 · 1171 阅读 · 0 评论 -
cglib动态代理实现原理详细分析
在之前Java代理模式中大致的分析了下代理模式的类型及对每种代理类型简单的举例了下。在上篇JDK动态代理实现原理详细分析中,对其JDK代理的流程做了一个详细的分析。而本文,将介绍另一种动态代理模式:cglib动态代理。阅读完本文,你将对cglib代理模式的运行的流程有一个清晰的认识。本文的目录如下:目录一:cglib动态代理的样例展示二:cglib生成的代理类的分析三:cgli...原创 2020-01-13 16:37:11 · 3717 阅读 · 0 评论 -
Spring源码分析之getBean主流程分析
当我们通过向Spring容器获取某个bean的时候,总是调用Spring中重载的各种getBean方法。那么,getBean中的流程是什么样的?通过本文,你将对getBean方法的主流程有一个详细的认识。入口当然是getBean方法: public Object getBean(String name) throws BeansException { return doGetBe...原创 2019-01-08 23:23:35 · 2949 阅读 · 0 评论 -
Spring源码分析之createBean主流程分析
我们知道,在调用getBean获取bean实例的实例,首先会从缓存中获取bean实例,如果没有获取到,就会去创建bean的时候。关于获取bean实例,可以参考Spring源码分析之getBean主流程分析,而本文将会对创建bean实例的主流程来做一个分析。而入口,当然是createBean(AbstractAutowireCapableBeanFactory)的方法。下面来看源码:pro...原创 2019-01-20 15:21:35 · 655 阅读 · 0 评论 -
Java NIO 与IO的区别
在jdk1.4中,引入了NIO(NEW IO),其与传统的IO有着很大的差别,具体表现在:1:面向流与面向缓冲区传统IO面向流的,意味着每次从流中读取一个字节或多个字节,直到读取完所有字节,而没有缓冲的,想要缓冲的就得使用相应的缓冲流。对于InputStream与OutputStream要么是输入流,要么是输出流而不能复用。NIO是面向缓冲区的,说道缓冲区就必须要提到通道,什么是通道与缓冲区?可以这原创 2017-05-11 10:19:42 · 709 阅读 · 0 评论 -
Java NIO的非阻塞式网络通讯
之前说过NIO与传统IO不同有一点是NIO是非阻塞的,当线程从某通道进行读写数据时,若没有数 据可用时,该线程可以进行其他任务。线程通常将非阻塞 IO 的空闲时间用于在其他通道上执行 IO 操作,所以单独的线程可以管理多个输入和输出通道。因此,NIO 可以让服务器端使用一个或有限几个线程来同时处理连接到服务器端的所有客户端。 在使用的时候,需要设置相应的管道为非阻塞的,这里会用到选择器,相应的事原创 2017-05-11 15:39:26 · 880 阅读 · 0 评论 -
Java NIO的Buffer
前面说到的NIO中Buffer一个用于保存特定基本数据类型的容器,其底层就是一个数组。 可以看到,基本类型除了boolean,其他的都对应一个Buffer的实现类。对于抽象类Buffer,需要理解其以下几个属性: private int mark = -1; //标志位,标记后能使调用reset方法能够恢复到标记时的位置 private int position = 0; //相当原创 2017-05-11 12:14:27 · 465 阅读 · 0 评论 -
java中的异常类型与处理方法
在写Java程序的过程当中。我们不可避免的会出现各种各样的问题。比如人开车去某一个地方的时候,中途可能出现发动机坏了,在路上有一个大石头挡住了道路等都是有可能出现。 上面例子所说的车的发动机出现了问题,就是Error问题,当然在java程序中出项这样的问题,我们只能重启程序。而我现在要说的是另一类,就是Except原创 2016-07-10 01:13:31 · 582 阅读 · 0 评论 -
画图板的简单实现
新手入门,画图板感觉不失为一个好的小项目,值得做做。 简单粗暴,先看一下实现效果很简单的布局直接给出代码吧DrowBoard.javapackage cn.sg.DrawBoard;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.原创 2016-06-29 13:11:01 · 532 阅读 · 0 评论 -
面向对象编程三大特性之一--封装
我们知道,我们通常所说的面向对象编程有三大特性,继承,封装与多态。封装,既然作为三大特性之一,什么是封装,怎么封装,以及封装有什么好处?先看一下比较官方的一种定义:封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。封装是一种信息隐藏技术,在java中通过关键原创 2016-07-20 14:48:37 · 405 阅读 · 0 评论 -
Java_HashMap的工作原理(Jdk1.8)
本文主要是从以下几个方面对HashMap进行分析:一:什么是HashMap以及HashMap的基本特性有哪些?二:HashMap的基本工作原理是什么?三:关于put(),get()方法在源码层面是怎么实现的?(对put的源码做重点分析)四:HashMap中的hash算法是如何实现的?五:HashMap使如何进行resize的?六:关于HashMap还可以深入了解原创 2016-09-22 18:10:43 · 3683 阅读 · 2 评论 -
java中重写equals()方法的时候为什么要重写hashCode()方法?
有时候,或许会听到被人说,在重写equals方法的时候,记得重写hashcode方法。那么自然有这样的疑问,那么为什么这样?equals方法和hashCode方法是什么关系?不重写的时候会有什么危害?文章将从一下几个方面进行叙述。一:什么是hashCode(),equals()方法?二:hashCode(),equal()s两种方法是什么关系?三:为什么在重写equals方法的原创 2016-09-29 15:06:38 · 30265 阅读 · 28 评论 -
源码实现ArrayList的常用方法
关于ArrayList,用起来非常的方便,对于一些常用的方法,如果能够自己实现 一下,像源码一样原创 2016-07-29 12:32:31 · 402 阅读 · 0 评论 -
同步机制中notify()与wait()--实现A,B,C循环打印
关于同步与异步机制,听过很多通俗的解释。日常生活中其实也有很多这样的例子,比如吃饭的时候同步:就是你通知我去吃饭,我听到了就和你一起去,如果我没有回应,你就会一直喊,直到我有反映了为止。异步:你通知我一声后,不管我有没有回应,你自己就去吃饭去了。在通讯当中:同步:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。 异步:发送方发出数据后,不等接收方发回响原创 2016-07-22 18:48:32 · 1736 阅读 · 0 评论 -
Java反射之获取类的信息(类名,属性,方法,构造函数)
通过反射获取类的基本信息,创建对象并进行相应的设置。public class Demo02 { @SuppressWarnings("all") public static void main(String[] args) throws Exception { // 另一个com.sg.myReflection.bean包下的User类 String path = "com.sg.my原创 2016-10-05 17:09:15 · 8362 阅读 · 0 评论 -
JVM类加载机制—加载的顺序问题
对于Java的源程序,我们一般需要经过编译与运行两个步骤,源程序经过编译生成字节码文件,字节码文件又被加载到java的虚拟机中。如下图:那么,在加载的时候,按一个什么样的顺序进行加载的?下面将通过一个具体的实例来分析一下。 public class Demo01 { static { System.out.println("静态代码块Demo01"); }原创 2016-10-07 00:56:02 · 1094 阅读 · 0 评论 -
java基础理解(重载与重写--方法与类的分类等)
在java学习的过程当中,不免有些容易弄混淆的概念和知识点,话不多说,直接进入主题: 重写与重载的区别:原创 2016-06-03 00:32:47 · 429 阅读 · 0 评论 -
Java-try_catch_finally中带有return语句的执行顺序
我们知道,在try_catch_finally块对异常进行捕捉时,一定会执行到finally块中的语句。看下面例子:Test1:(try语句中有return,finally中没有) public static void main(String[] args) { System.out.println(test()); } public static int tes原创 2017-05-03 11:59:35 · 378 阅读 · 0 评论 -
Java_ArrayList的工作原理
Resizable-array implementation of the List interface. Implementsall optional list operations, and permits all elements, includingnull. In addition to implementing the List interface, this class pro原创 2017-05-03 14:03:30 · 614 阅读 · 0 评论 -
Java NIO的Channel
NIO中通道由 java.nio.channels 包定义的。Channel 表示 IO 源与目标打开的连接。Channel 类似于传统的“流”。只不过 Channel本身不能直接访问数据,Channel 只能与Buffer 进行交互。原创 2017-05-11 14:52:37 · 587 阅读 · 0 评论 -
Java NIO的Scatter与Gather
Scatter(分散):分散读取,从管道Channel中读取的数据分散到一个或者多个缓冲区Buffer中,分散的时候会依次的按缓冲区的顺序一个一个的进行。 Gather(聚集):聚集写入,把缓冲区position到limit之间的数据依次的写入到管道中。 这样,一个大文件就可以分割成许多小的文件进行传输。 其示意图如下: 代码实现如下:public class Demo06_ScotterA原创 2017-05-11 15:12:54 · 872 阅读 · 0 评论 -
Java并发编程之线程状态与创建线程的方式
在Java并发编程中,线程所处的状态以及创建线程的方式算是’开学第一课’了。而从本文开始,我将对Java并发做一个系统的认识。话不多说,开始进入主题。一:线程状态在Thread类中详细的枚举了线程的状态,如下: public enum State { /** * 创建了线程还未调用srart()方法的时候,线程处于NEW的状态 */...原创 2019-03-02 13:41:42 · 316 阅读 · 0 评论