
java
文章平均质量分 64
NullPointExceptionc
只有知道自己有多菜,才会努力进步!
展开
-
ThreadLocal原理
ThreadLocal和Thread关系:Thread中维护了一个ThreadLocalMap,key是ThreadLocal,value是要存储的数据副本,每次存取ThreadLocal,都是从当前线程中的ThreadLocalMap找对应ThreadLocal的key对应的value;key为什么被设计为弱引用?回归本质,ThreadLocalMap是用来存放对象的,在一次线程的执行栈中,存放数据后方便我们在任意的地方取得我们想要的值而不被其他线程干扰。ThreadLocalMap本身并没有原创 2021-10-09 16:36:49 · 359 阅读 · 1 评论 -
对接第三方阿里云api接口 示例代码
最近对接了一个第三方阿里云api的接口,过程并不是很顺利,所以把最后成功的代码作为案例发出来,为了方便对后面有需要的人,有一些参考把。代码没做太多封装public List<ALaDingPrice> getPrice() throws Exception { String sufUrl = "请求地址"; List<String> arrayPriceStrings = getALaDDinData(sufUrl); List<ALaDingP原创 2021-09-23 21:02:08 · 1078 阅读 · 0 评论 -
Java 线程池之源码解析
Executors为线程池工具类,主要可创建创建固定数量线程数的线程池,不回收public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, ...原创 2020-11-05 18:26:13 · 227 阅读 · 0 评论 -
Java之AQS源码解析
锁状态: 枚举 含义 0 当一个Node被初始化的时候的默认值 CANCELLED 为1,表示线程获取锁的请求已经取消了 CONDITION 为-2,表示节点在等待队列中,节点线程等待唤醒 PROPAGATE 为-3,当前线程处在SHARED情况下,该字段才会使用 SIGNAL ..原创 2020-11-05 10:55:46 · 176 阅读 · 0 评论 -
for循环的执行顺序问题
今晚做的百度一道笔试题,判断A字符串中是否包含B字符串中的所有字符,不考虑顺序问题。代码如下:import java.util.Scanner;public class Main { public static void main(String[] args) throws InstantiationException, IllegalAccessException, Class原创 2015-09-28 21:53:57 · 831 阅读 · 0 评论 -
三个线程循环打印ABC。。。。
Java三个线程循环打印ABC。。。,是个笔试题,虽然简单,但说真的很多人对线程的同步问题掌握的不是很好,包括我自己,写完这个demo,准备好好学一下线程的同步问题。package str;public class binary { public static void main(String[] args) { // TODO Auto-generated method stub原创 2015-10-18 11:01:03 · 2637 阅读 · 1 评论 -
Java中&&与&、||与| 区别
前几天刷题有几道&&与&、||与|的题,也就是逻辑运算和位运算区别,当时记得特别清楚,现在又忘了,所以特地写下,以备记忆:一句话:逻辑&&和||运算,只要前面的false或者true能够判断整个语句的false或true,就不会再执行后面的判断语句,通俗讲即懒汉原理;而位运算符&和|则不管前面语句执行结果如何,都会执行后面的语句。和上面的不一样。好吧!总结完!原创 2015-09-30 22:51:28 · 286 阅读 · 0 评论 -
Java中的一些基本问题
在安装java环境时都要配置三个环境变量:PATH、JAVA_HOME、CLASSPATH。PATH:主要是为了能够通过命令行运行javac和java命令。CLASSPATH:作用是指定类搜索路径,要使用已经编写好的类,主要是类库和应用程序编译过的.class文件。JAVA_HOME:指向jdk安装路径,作为PATH、CLASSPATH中对jdk路径的引用变量,所以每次修改jd原创 2015-09-15 22:57:17 · 337 阅读 · 0 评论 -
java类加载器
来自http://blog.youkuaiyun.com/gjanyanlig/article/details/68186551.类的加载过程 JVM将类加载过程分为三个步骤:装载(Load),链接(Link)和初始化(Initialize)链接又分为三个步骤,如下图所示:1) 装载:查找并加载类的二进制数据;2)链接:验证:确保被加载类的正确性;原创 2015-09-16 14:28:51 · 251 阅读 · 0 评论 -
Java动态代理
1. 代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 代理模式一般涉及到三个角色: 抽象角色:声明真实对象和代理对象的共同接口; 代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻转载 2015-10-22 19:18:00 · 295 阅读 · 0 评论 -
Java类加载器
1 前言前段时间因为项目的需要,我搞了一套类似Servlet重新载入的一个框架,实现了类的动态载入过程。本文写了一些我的学习成果以及心得供大家分享一下。2 类载入的原理(下面引用网上的一篇文章):当JVM(Java虚拟机)启动时,会形成由三个类加载器组成的初始类加载器层次结构: bootstrap classloader转载 2015-10-24 15:13:35 · 302 阅读 · 0 评论 -
Java递归实现的堆排序
算法很简单,堆存放在一个数组中,对数组实现递归堆排序,每次递归得出的最大值存在同一个数组的最后位置,J控制递归的次数和每次递归选出的值的存放位置。代码如下:package String.Cheng;public class heapSort { public static int [] HeapSort(int [] a,int j){ int temp; int [] b原创 2015-10-11 11:25:43 · 692 阅读 · 1 评论 -
Java实现快速排序
今天特地把快速算法用Java实现了一下,毕竟找工作面试笔试用的比较多。package String.Cheng;import java.util.Scanner;public class QuickSort { public static void Swap(int []s,int l,int r){ int temp; if (s[l]<s[r]&&s[r]<s[(l+r)原创 2015-10-12 18:59:26 · 345 阅读 · 0 评论 -
如何中断JAVA线程
本文看了之后感觉对Java线程中断讲的还是蛮不错的,所以以下是本人对其的总结:线程最好使用volatile boolean的共享变量判断来实现中断,当然这对run方法阻塞情况下并没有效果,因为线程停在那不判断了,所有针对有阻塞的线程最好的办法是使用Thread.interrupt()加volatile boolean的共享变量判断来中断线程,Thread.interrupt()是使共享变量不能转载 2015-09-27 22:43:57 · 198 阅读 · 0 评论 -
Java关闭钩子
注册添加钩子方法:Runtime.getRuntime().addShutdownHook(new shutdownHook());关闭钩子shutdownHook的创建满足条件: 1.创建Thread的子类 2.实现run方法,应用程序关闭时会调用该方法,不需要调用start方法,有方法自动调用 3.在应用中实例化关闭钩子类 4.使用Runtime原创 2016-01-06 16:18:05 · 741 阅读 · 0 评论 -
二叉树的前、中、后遍历递归和非递归java实现
import java.util.Stack;class BinaryNode{ Object element; BinaryNode left; BinaryNode right; public BinaryNode(Object element,BinaryNode left,BinaryNode right){ this.element = element; this.l原创 2015-09-07 09:26:28 · 237 阅读 · 0 评论 -
深入研究 Java Synchronize 和 Lock 的区别与用法
这里把我看的几篇比较好的Java Synchronize 和 Lock文章结合在一起,能比较好的说明他们区别。在分布式开发中,锁是线程控制的重要途径。Java为此也提供了2种锁机制,synchronized和lock。做为Java爱好者,自然少不了对比一下这2种机制,也能从中学到些分布式开发需要注意的地方。 我们先从最简单的入手,逐步分析这2种的区别。 一、synch转载 2015-09-27 21:39:21 · 500 阅读 · 0 评论 -
java gc的垃圾处理和内存分配
今天对java虚拟机的gc和内存分配原理学习了一下,以下是本人的一些总结,不喜勿喷!首先说一下确定垃圾对象的方法:(1)标记计数法.(容易出现对象的相互引用的问题,通过这个问题的实例能够说明gc仍然可以对其回收,所以gc并不是通过这个方法确定垃圾对象的)(2)可达性分析法(看gc-roots能否有路径到达堆中的对象)。当对象确定为垃圾对象后,并不是立即确定其“死亡”,而是判断是否有原创 2015-09-04 23:07:56 · 959 阅读 · 0 评论 -
比较Collection 和Collections的区别
1、java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。 Collection ├List │├LinkedList │├ArrayList │└Vector │ └S转载 2015-04-18 09:24:28 · 376 阅读 · 0 评论 -
Java的国际化(i18n)
1. Java国际化简介Java既然作为一个跨平台的语言就必然要在各种不同的语言环境中使用, 为了解决这个问题Java给我们提供了一个工具类ResourceBundle, 帮助我们实现Java的国际化, 核心的思想就是, 对不同的语言提供一个不同的资源文件. 2. Java国际化的步骤(1) 当然是编写要实现国际化的主程序.(2) 定义资源文件, 注意资源文转载 2015-04-22 20:45:47 · 705 阅读 · 0 评论 -
Java时间格式转换
1,对String的时间转化为特定格式的Date;新建一个SimpleDateFormat 对象,并设定格式;SimpleDateFormat bartDateFormat1 = new SimpleDateFormat("yyyy-MM-dd"); 对于String类型的时间,要转化为自定义格式的date; String dateString= "2005-8-10";原创 2015-04-22 21:26:04 · 378 阅读 · 0 评论 -
自定义加载器
importjava.io.ByteArrayOutputStream;importjava.io.File;importjava.io.FileInputStream; /** * * 一、ClassLoader加载类的顺序 * 1.调用 findLoadedClass(String) 来检查是否已经加翻译 2015-05-04 15:48:59 · 289 阅读 · 0 评论 -
String s = new String(abc);创建了几个String对象?
String s = new String("abc");创建了几个String对象?首先需要明确下面的知识点:1、引用变量与对象的区别;2、字符串文字"abc"是一个String对象; 3、文字池(pool of literal strings)和堆(heap)中的字符串对象。一、引用变量与对象A aa;这个语句声明一个类A的引用变量aa[我们常常称之为句转载 2015-05-14 20:42:24 · 1591 阅读 · 0 评论 -
java中不同的存储区的区别
1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。) 3. 堆:存放所有new出来的对象。 4. 静态域:存放静态成员(static定义的) 5. 常量池:存放字符串常量和基本类型常量(public stat原创 2015-06-16 12:20:45 · 262 阅读 · 0 评论 -
如何将异常打印到日志文件中
public static String getTrace(Throwable t) { StringWriter stringWriter= new StringWriter(); PrintWriter writer= new PrintWriter(stringWriter); t.printStackTrace(writer);翻译 2015-05-31 18:48:16 · 1373 阅读 · 0 评论 -
JAVA中的异常
JAVA异常 异常指不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。Java通 过API中Throwable类的众多子类描述各种不同的异常。因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的 错误条件。当条件生成时,错误将引发异常。 Java异常类层转载 2015-05-31 19:55:48 · 298 阅读 · 0 评论 -
Java垃圾回收机制
在看下面文章的时候,这里强调一个问题,垃圾回收器回收的是对象占用的内存,而不是对象本身!1. 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象;而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。JVM的一个系统级线程会自动释放该内存块。垃圾回收意味着程序不再需要的对象是"无用信息",这些信息将被丢弃转载 2015-06-09 08:59:20 · 392 阅读 · 0 评论 -
冒泡算法和选择排序
//冒泡排序public class bubble_sort {public static void main(String[] args) {// TODO Auto-generated method stubint [] a={6,5,4,9,1};BoobleSrot(a);for(int i=0;iSystem.out.println(a[i原创 2015-06-10 11:13:01 · 412 阅读 · 0 评论 -
LeetCode | Surrounded Regions
题目:Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'.A region is captured by flipping all 'O's into 'X's in that surrounded region .For example,X X X原创 2015-08-08 13:55:19 · 261 阅读 · 0 评论 -
double类型的数据存入电脑失精度
1 范围float和double的范围是由指数的位数来决定的。float的指数位有8位,而double的指数位有11位,分布如下:float:1bit(符号位)8bits(指数位)23bits(尾数位)double:1bit(符号位)11bits(指数位)52bits(尾数位)在数学中,特别是在计算机相关的数字转载 2015-08-27 22:58:36 · 818 阅读 · 0 评论 -
Java泛型-类型擦除
Java泛型-类型擦除一、概述 Java泛型在使用过程有诸多的问题,如不存在List.class, List不能赋值给List(不可协变),奇怪的ClassCastException等。 正确的使用Java泛型需要深入的了解Java的一些概念,如协变,桥接方法,以及这篇笔记记录的类型擦除。Java泛型的处理几乎都在编译器中进行,编译器生成的bytecode是不包涵泛型信息的,泛型转载 2015-08-13 13:42:07 · 218 阅读 · 0 评论 -
POJO和javaBean
POJO 按照Martin Fowler的解释是“Plain Old Java Object”,从字面上翻译为“纯洁老式的java对象”,但大家都使用“简单java对象”来称呼它。POJO的内在含义是指那些没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的java对象。pojo的格式是用于数据的临时传递,它只能装载数据, 作为数据存储的载体,而不具有业务逻辑处理的转载 2015-07-25 09:41:09 · 278 阅读 · 0 评论 -
Comparable与Comparator的区别
Comparable & Comparator 都是用来实现集合中元素的比较、排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法。Comparator位于包java.util下,而Comparable位于包转载 2015-04-18 09:42:38 · 676 阅读 · 0 评论