java
姜小衰
这个作者很懒,什么都没留下…
展开
-
[java] Class.getResource与ClassLoader.getResource的区别
Class.getResource(String path)path不以"/“开头时,默认是从此类所在的包下取资源;path 以”/"开头时,则是从ClasPath根下获取资源;public class ResourceTest { @Test public void testClassGetResource() { Class<ResourceTes...原创 2018-10-17 09:18:02 · 154 阅读 · 0 评论 -
java反射系列03 isInstance() isAssignFrom()
isInstance()Class<Object> clz = Object.class;clz.isInstance(new String("dengyi"));如果new String(“dengyi”)实例的类也就是String类是Object类的子类则返回trueisInstance()与 instanceof关键字的区别使用场景不同当发生转型异常时,instanceof会无法通过编译原创 2017-07-11 23:20:24 · 947 阅读 · 0 评论 -
java炒冷饭系列14 内部类标识符
前言由于每个类都会产生一个.class文件,其中包含了如何创建该类型的对象的全部信息(此信息产生一个”meta-class”,叫做Class对象),你可能猜到了,内部类也必须生成一个.class文件以包含它们的Class对象信息。这些类文件的命名有严格的规则:外围类的名字,加上“$”,再加上内部类的名字。举列如下面的Out.java文件经过编译后 会得到Out.class Out$Inner1.c原创 2017-06-21 17:57:00 · 952 阅读 · 0 评论 -
java反射系列02 toString() toGenericString()
前言由Class类文档和Class.toString()的方法文档我们可得知Interface, Annotation -> “interface”primitive(八种基本类型,void) -> “”其他的非接口,非原始类型的类 -> “class”加一个空格(” “)。 加 getName()方法返回的字符串。代码那么Class.toString()方法的代码实原创 2017-07-11 08:25:58 · 2036 阅读 · 0 评论 -
java反射系列01 getName()的实现
getName代码实现Java Class类中关于getName()的相关方法和成员变量如下private transient String name;private native String getName0();public String getName(){ String name = this.name; if(name == null) this.nam原创 2017-07-10 23:11:43 · 2022 阅读 · 0 评论 -
java炒冷饭系列13 内部类的继承
内部类的继承因为内部类的构造器必须连接到指向其外围类对象的引用,所以在继承内部类的时候,事情会变得有点复杂。问题在于,那个指向外围类对象的“秘密的”引用必须被初始化,而在导出类中不再存在可连接默认对象。要解决这个问题,必须使用特殊的语法来明确说清它们之间的关联:class WithInner{ class Inner{}}public class InheritInner extends转载 2017-06-21 14:33:32 · 720 阅读 · 1 评论 -
java炒冷饭系列12 接口内部的类 ,从多层嵌套类中访问外部类的成员
接口内部的类正常情况下,不能在接口内放轩任何代码,但嵌套类可以作为接口的一部分。你放到接口中的任何类都自动地是public和static的。因为类是static的,只是将嵌套类置于接口的命名空间内,这并不违反接口的规则。你甚至可以在内部类中实现其外围接口,你像下面这样:public interface ClassInterface { void howdy(); class Test转载 2017-06-21 13:06:08 · 254 阅读 · 0 评论 -
java炒冷饭系列12 嵌套类(静态内部类)
如果不需要内部类对象与外围对象之间有联系,那么可以将内部类声明为static。这通常称为嵌套类。想要理解static就用于内部类时的含义,就必须记住,普通的内部类对象隐式地保存了一个引用,指向创建它的外围类对象。然而,当内部类是static的时候,就不是这样了。嵌套类意味着:要创建嵌套类的对象,并不需要其外围类的对象不能从嵌套类的对象中访问非静态的外围类对象嵌套类与普通的内部类还有一个区别:普转载 2017-06-21 11:50:56 · 482 阅读 · 0 评论 -
java炒冷饭系列11 方法和作用域内的内部类 与 匿名内部类
在方法和作用域内的内部类到目前为止,读者所看到的只是内部类的典型用途。通常,如要所读、写的代码包含了内部类,那么它们都是“平凡的”内部类,简单并且容易理解。然而,内部类的语法覆盖了大量其他的更加难以理解的技术。例如,可以在一个方法里面或者在任意的作用域内定义内部类。这么做有两个理由:如前所示,你实现了某类型的接口,于是可以创建并返回对其的引用。你要解决一个复杂的问题,想创建一个类来辅助你的解决方转载 2017-06-21 09:53:01 · 526 阅读 · 0 评论 -
java炒冷饭系列10 内部类 使用.this与.new和向上转型
使用.this与.new如果你需要生成对外部类对象的引用,可以使用外部类的名字后紧跟加点和this(OutClass.this)。这样产生的引用自动地具有正确的类型,这一点在编译期就被知晓并受到检查,因此没有任何运行时开销。下面的示例展示了如何使用.thispublic class DotThis { void f(){ System.out.println("DotThis转载 2017-06-21 08:07:37 · 345 阅读 · 0 评论 -
java炒冷饭系列08 try-with-resources
前言这次的米饭不太冷,前几篇文章聊了聊java的异常体系,就想起来了java7中新增加的try-with-resources语句,其实我也不熟悉,大家一起来看看吧介绍try-with-resources语句是声明一个或多个资源的try语句try-with-resources语句是声明一个或多个资源的try语句。一个资源作为一个对象,必须在程序结束之后随之关闭。try-with-resources语句转载 2017-06-20 15:41:55 · 452 阅读 · 0 评论 -
java实用方法系列 方法返回数组的表示形式(这个技巧有点不实用)
前言我们都知道在Java中数组的表示方式变量有两种表示数组的方式private int[] arr;private int arr[];方法返回数组时的表示方法public static int[] method(){}方法返回数组的另一种表示形式这种表示形式是在ByteArrayOutputStream类中看到,以前不知道有这种表示形式,在此记录一下public synchronized b原创 2017-06-29 15:42:47 · 475 阅读 · 0 评论 -
java炒冷饭系列07 java标准异常
前言Throwable这个Java类被用来表示任何可以作为异常被抛出的类。Throwable对象可分为两种类型(指从Throwable继承而得到的类型):Error用来表示编译时和系统错误(除特殊情况处,一般不用你关心)Exception是可以被抛出的基本类型在Java类库、用户方法以及运行时故障中都可能抛出Exception型异常。所以Java程序员关心的基类型通常是Exception要想对转载 2017-06-20 08:22:15 · 2029 阅读 · 2 评论 -
java炒冷饭系列06 异常说明(throws)
前言java鼓励人们把方法可能会抛出的异常告知使用此方法的客户端程序员。这是种优雅的做法,它使得调用者能确切知道写什么样的代码可以捕获所有潜在的异常。当然,如果提供了源代码,客户端程序员可以在源代码中查找throw语句来获知相关信息,然而程序库通常并不与源代码一起发布。为了预防这样的问题,java提供了相应的语法(并强制使用这个语法),使你能以礼貌的方式告知客户端程序员某个方法可能会抛出的异常类型,转载 2017-06-20 07:06:32 · 632 阅读 · 0 评论 -
java炒冷饭系列06 异常匹配
前言抛出异常的时候,异常处理系统会按照代码的书写顺序找出“最近”的处理程序。找到匹配的处理程序之后,它就认为异常将得到处理,然后就不再继续查找。 查找的时候并不要求抛出的异常同处理程序所声明的异常完全匹配。派生类的对象也可以匹配其基类的处理程序,你像这样:class Annoyance extends Exception {}class Sneeze extends Annoy转载 2017-06-20 06:36:10 · 622 阅读 · 0 评论 -
java char '\u0000'
前言今天在看java.io.File类的源码的时候遇到这样一段代码 该断代码是判断File路径名是不是有效的, 先要判断路径名包含不包含’\u0000’final boolean isInvalid() { if (status == null) { status = (this.path.indexOf('\u0000') < 0) ? PathStat原创 2017-06-25 01:18:41 · 13046 阅读 · 2 评论 -
[java泛型] 通配符wildcards
前言最近被反射获取泛型搞的有点晕,所以总结一下泛型中的通配符测试类我们先定义几个测试类 /** * 动物类 */public class Animal { private String name; public Animal() {} public Animal(String name) { this.name = name转载 2017-07-13 19:25:55 · 1002 阅读 · 0 评论 -
[Java] NIO之标准字符集
NIO之标准字符集你程序中是否有过这样的代码:try { bytes = string.getBytes("UTF-8");} catch (UnsupportedEncodingException e) { ...}或是这样的代码 try { "string".getBytes(Charset.forName("UTF-8"));...原创 2018-06-29 08:49:32 · 409 阅读 · 0 评论 -
[Java并发]读者写者问题
面试题读者写者问题题目这也是一个非常经典的多线程题目,题目大意如下:有一个写者很多读者,多个读者可以同时读文件,但写者在写文件时不允许有读者在读文件,同样有读者读时写者也不能写。思路利用java.util.concurrent.locks.ReentrantReadWriteLock(读写锁) 写者写文件时持有写锁,此时只能有唯一个写者写文件,且读者不能读文件。 读者读...原创 2018-07-03 16:28:28 · 844 阅读 · 0 评论 -
[Java并发]编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
面试题来自迅雷的一道面试题题目编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。实现public class OrderOutput implements Runnable{ private Value value; private in...原创 2018-07-03 15:57:36 · 2155 阅读 · 0 评论 -
[Java并发]有四个线程1、2、3、4。线程1的功能就是输出1,线程2的功能就是输出2,以此类推.........现在有四个文件ABCD。初始都为空。现要让四个文件呈如下格式
面试题一道来自谷歌的面试题。题目有四个线程1、2、3、4。线程1的功能就是输出1,线程2的功能就是输出2,以此类推………现在有四个文件ABCD。初始都为空。现要让四个文件呈如下格式: A:1 2 3 4 1 2…. B:2 3 4 1 2 3…. C:3 4 1 2 3 4…. D:4 1 2 3 4 1….请设计程序。解题思路 ...原创 2018-07-03 15:28:54 · 887 阅读 · 0 评论 -
java炒冷饭系列09 内部类的创建和链接到外部类
前言内部类这个概念对新手来说应该是一个很不了解的点,有点晦涩的语法,懂了语法,又不知道在哪里用到内部类,因为不经常用,所以慢慢的就会遗忘掉。(说的就是我呀)我最初接触内部类的概念是从某堂的培训机构的视频,然后就是几本经典的java书籍,还有Java集合库中List 和 Map实现类对内部类的使用,才感觉对内部类是有点感觉了。我这个人记性不好,不喜欢死记硬背。但是有些知识点不背不行呀,那转载 2017-06-21 07:09:31 · 386 阅读 · 0 评论 -
java实用方法系列 new Boolean(str)什么时候返回true或false
前言new Boolean(str)什么时候返回false,什么时候返回true。之前一直看书但心理总有点不踏实,今天翻一翻源码,一目了然了。当传入的参数忽略大小写与“true”相等时返回true,其他情况一律返回false源码public static boolean parseBoolean(String s){ return ((s != null) && s.equalsIgnore原创 2017-07-17 00:27:04 · 4407 阅读 · 0 评论 -
java实用方法系列 list转换为字符串的形式
前言我们都知道List<String> list = new ArrayList<>();list.add("jianglei");list.add("dengyi");String str = list.toString();System.out.println(str); //会输出[jianglei, dengyi]上述调用的toString()方法其实是在AbstractCollec原创 2017-06-28 11:07:01 · 10054 阅读 · 1 评论 -
[java] 块语句内不能加访问修饰符
前言开发中这么写static { public int a = 0;}编辑器报错了,编译器编译通不过。想了好久为什么通不过,今天突然想明白了。静态块内的变量,是局部变量啊,要什么访问修饰符。真的是蠢。希望大家引以为戒,不要笑话我。正确的写法static { int a = 0;}这跟方法中定义的局部变量是一样的public void test(){ int a = 0;原创 2017-06-14 16:10:39 · 359 阅读 · 0 评论 -
java实用方法系列 从源数组考贝到目标数组 边界检查的问题
前言在jdk的源码中,用到大量的从源数组考贝到目标数组的操作,既然涉及到数组,那会一定会有数组的越界检查问题。今天就列举出一个,基本思想要掌握源码ByteArrayOutputStream中的一个方法public synchronized void write(byte b[], int off, int len) { if ((off < 0) || (off > b.length原创 2017-06-27 08:31:54 · 503 阅读 · 0 评论 -
java数组api (off, len) 与 (begin, end)的问题
前言java 关于操作数据的api中大多是如题目的两种形式,例如:public static char[] copyOfRange(char[] original, int from, int to)public static native void arraycopy(Object src, int srcPos,转载 2017-06-27 00:55:13 · 1745 阅读 · 0 评论 -
java 实用方法系列 Arrays, Objects 里的equals方法
Objects.equals(Object a, Object b)如果a equals b 返回true,否则返回false 实际的逻辑是: 如果两个参数都为null返回true。 然后如果一个参数为null,返回false, 否则,是否等价取决于第一个参数的equals()方法 注: 此方法不适用于两个数组比较相等性源码public static boolean equlas(Ob原创 2017-07-14 09:57:24 · 960 阅读 · 1 评论 -
[java泛型] 泛型的继承规则
前言泛型的继承规则,跟类的继承规则是有点区别的,希望大家不要误解测试类public class Animal {}public class Dog extends Animal {}List<Animal>可以引用 List<Dog>吗?public class AnimalTest { @Test public void test01(){ List<Dog> l原创 2017-07-13 22:18:01 · 861 阅读 · 0 评论 -
java炒冷饭系列05 使用多态时需要注意的几点
缺陷:“覆盖”私有方法我们试图像下面这样做也是无可厚非的:public class PrivateOverride { private void f(){ System.out.println("private.f()"); } public static void main(String[] args) { PrivateOverride po转载 2017-06-19 09:31:44 · 250 阅读 · 0 评论 -
java炒冷饭系列04 初始化及类的加载
前言在许多传统语言中,程序是作为启动过程的一部立刻被加载的。然后是初始化,紧接着程序开始运行。这些语言的初始化过程必须小必控制,以确保定义为static的东西,其初始化顺序不会造成麻烦。例如C++中,如果某个static期望另一个static的被初始化之前就能有效地使用它,那么就会出现问题。Java就不会出现这个问题,因为它采用了一种不同的加载方式。加载是众多变得更加容易的动作之一,因为Java中的转载 2017-06-19 07:49:48 · 311 阅读 · 0 评论 -
Java集合系列02 Collection架构
参考链接:http://www.cnblogs.com/skywang12345/p/3308513.html 首先,我们对Collection进行说明。下面先看看Collection的一些框架类的关系图: Collection是一个接口,它主要的两个分支是:List和Set. List和Set都是接口,它们继承于Collection.List是有序的队列,List中可以有重复的元素;而转载 2017-04-21 06:43:29 · 554 阅读 · 0 评论 -
Java集体系列01之 总体框架
转:skywang12345 加上笔者对原谅错字的校对Java集体是Java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Java集合工具包位置是java.util.* Java集合主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections) java集合工具包框架图转载 2017-04-20 21:59:58 · 468 阅读 · 0 评论 -
java集合系列10 Deque
前言Deque 双端队列 继承了 Queue Deque文档介绍一个线性collection,支持在两端插入和删除。deque 是 “double ended queue”的缩写。绝大多数的Deque实现对它们能包含的元素数没有固定的限制,但此接口支持容量限制,也支持没有固定大小限制的双端队列。此接口定义了访问队列两端元素的方法。提供了插入,移除,检查元素的方法。这些的每个方法存在两种形式:如果失原创 2017-04-28 08:56:34 · 354 阅读 · 0 评论 -
java集合系列09 Queue
前言是几篇博客我们一步步分析Collection AbstractCollection List AbstractList..等最后分析了我们最常用的ArrayList类。 以后的几篇文章可能要着重介绍LinkedList了 我们先来看一看UML图 可以看到好多接口和抽象类我们已经介绍过了 新面孔也可能是Queue Deque AbstractSequentialListQueue文档介原创 2017-04-28 08:16:47 · 289 阅读 · 0 评论 -
[java 排序] Comparable 和 Comparator
Comparable简介接口定义:package java.lang;import java.util.*;public interface Comparable<T> { public int compareTo(T o);}文档:此接口强行对实现它的每个类的对象进行整体排序。这种排序称为类的自然(native)排序。类的compareTo方法被称为它的自然(native)比较方法原创 2017-04-13 09:32:32 · 489 阅读 · 0 评论 -
[Java String] StringBuilder类解读
首先我们来看一看其UML图 由关系图可知,StringBuilder类继承AbstractStringBuilder抽象类,而AbstractStringBuilder实现了Appendable和CharSequence接口。 所以我们来看看这两个接口的定义和文档CharSequence介绍文档:CharSequence是char值的只读序列(说白了就是char数组,并且该接口只提供了读方法,没原创 2017-04-12 20:01:54 · 449 阅读 · 0 评论 -
[java 数值]深入剖析Java中的装箱和拆箱
自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来看一下拆箱中的若干问题。本文讲术装箱和拆箱最基本的东本,再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。什么是装箱?什么是拆箱装箱和拆箱是如何实现的面试中相关的问题什么是装箱?什么是拆箱在前面的文章中提到,Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴转载 2017-04-12 21:21:50 · 193 阅读 · 0 评论 -
[Java 数值] 数值类型之间的转换
问题:你是否在工作中数值类型之间的转换在程序运行时,经常需要将一种数值类型转换为另一种类型。下图给出了数值类型之间的合法转换。 图中有6个实心箭头,表示无信息丢失的转换; 有3个虚箭头,表示可能有精度损失的转换。 例如,123456789是一个大整数,它包包含的位数比float类型所能表达的位数多。当将这个整型数值转换为float类型时,将会得到同样大小的结果,但却失去了一定的精度。 如转载 2017-04-11 21:03:29 · 1356 阅读 · 0 评论 -
[java 线程] Java内存模型深度解读
原文链接 http://www.cnblogs.com/wxd0108/p/5488290.htmljava内存模型规范了java虚拟机与计算机内存是如何协同式作的。java虚拟机是一个完整的计算机的一个模型,因此这个模型自然也包含一个内存模型 – 又称为java内存模型如果你想设计表现良好的并发程序,理解java内存模型是非常重要的。java内存模型规定了如何和何时可以看到由其他线程修转载 2017-03-16 07:49:32 · 559 阅读 · 0 评论