java
文章平均质量分 57
学习中呢
一个本科小生的匍匐前进之路
展开
-
String
string存在于堆中 ,常量池只是堆中的引用,每次写String s=“sss”会首先检查常量池中有没有他的引用,如果有直接把引用赋予他,负责则在堆中创建,在常量池存有引用。new String()在堆中创建,并不在常量池存引用 +拼接字符串 虚拟机不会创建多个实例,会使用StringBuild优化,但是当拼接的数量过多时就会创建很多StringBuild对象原创 2018-04-05 10:12:13 · 158 阅读 · 0 评论 -
jdk动态代理的实现原理
jdk动态代理实际上是jvm帮我们建成的类实现我们传入的接口,加载字节码到jvm。实际上就是帮我们拼接的字符串和我们传进去的接口进行拼接,然后生成字节码加载进虚拟机。代理类持有InvocationHandler的引用,当我们调用方法时实际上调用的是InvocationHandler的引用的invoke方法,invoke方法中再进行反射调用方法。jdk动态代理只能代理接口接口类:public inte原创 2017-11-30 03:01:37 · 662 阅读 · 1 评论 -
java.lang.ProcessBuilder.command(String command)方法实例 代替命令行方式启动程序
java.lang.ProcessBuilder.command(String... command) 方法设置此进程生成器的操作系统程序和参数。这是设置命令包含相同的字符串作为命令数组中的字符串列表,在同一顺序的便捷方法。它不检查command是否为一个有效的操作系统命令。声明以下是java.lang.ProcessBuilder.command()方法的声明public Proce转载 2017-11-09 18:14:15 · 2405 阅读 · 0 评论 -
Class的 getSuperclass与getGenericSuperclass区别和如何获取泛型参数类型
一、getSuperclass 返回直接继承的父类(由于编译擦除,没有显示泛型参数) ClassgetSuperclass() 返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class。返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class。如果转载 2017-10-15 18:21:34 · 864 阅读 · 0 评论 -
反射难点 长期更新
JAVA 反射机制中,Field的getModifiers()方法返回int类型值表示该字段的修饰符。其中,该修饰符是java.lang.reflect.Modifier的静态属性。对应表如下:PUBLIC: 1 PRIVATE: 2 PROTECTED: 4 STATIC: 8 FINAL: 16 SYNCHRONIZED: 32 VOLATILE: 64 TRANSIENT: 12原创 2017-11-07 13:29:50 · 237 阅读 · 0 评论 -
Java 中Timer和TimerTask 定时器和定时任务使用的例子
这两个类使用起来非常方便,可以完成我们对定时器的绝大多数需求 Timer类是用来执行任务的类,它接受一个TimerTask做参数 Timer有两种执行任务的模式,最常用的是schedule,它可以以两种方式执行任务:1:在某个时间(Data),2:在某个固定的时间之后(int delay).这两种方式都可以指定任务执行的频率TimerTest.Java:转载 2017-08-31 12:42:26 · 393 阅读 · 1 评论 -
java版本区别
一、Java的版本区别 常用的 java 程序分为 Java SE、java EE、Java ME三个版本,介绍如下:1. Java SE(Java Platform,Standard Edition)java se 以前称为J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE是基础包,但是也包含了支持 J转载 2017-08-30 20:44:47 · 39310 阅读 · 10 评论 -
java8中HashMap相对于java7的改进
本文从性能、内存以及各种典型问题分析Java7到Java8中HashMap的改进:原文地址:http://coding-geek.com/how-does-a-hashmap-work-in-Java/HashMap内部存储过程:HashMap类实现了Map接口,主要方法包括:V put(K key,V value)V get(Object key)V re转载 2017-08-30 20:26:53 · 630 阅读 · 0 评论 -
一看你就懂,超详细java中的ClassLoader详解
ClassLoader翻译过来就是类加载器,普通的java开发者其实用到的不多,但对于某些框架开发者来说却非常常见。理解ClassLoader的加载机制,也有利于我们编写出更高效的代码。ClassLoader的具体作用就是将class文件加载到jvm虚拟机中去,程序就可以正确运行了。但是,jvm启动的时候,并不会一次性加载所有的class文件,而是根据需要去动态加载。想想也是的,一次性加载那么多j转载 2017-11-30 04:16:07 · 371 阅读 · 0 评论 -
正则表达式appendReplacement appendTail组合使用
Pattern p=Pattern.compile("order\\s*by[\\w|\\W|\\s|\\S]*"); Matcher m=p.matcher(hql); StringBuffer sb=new StringBuffer(); while (m.find()){ m.appendReplacement(sb,"原创 2017-12-08 17:02:37 · 526 阅读 · 0 评论 -
Target runtime Apache Tomcat v6.0 is not defined.错误解决方法
Eclipse导入工程后工程上显示一个小红叉,但工程里没有文件错误,也没有语法错误,百思不得其解啊,后来在网上找了一些资料说是项目引用的类库路径有问题。【项目】->【右键】->【build path】->【configure build path】->【libraries】,查看一下引用的类库路径。网上都说是因为这里引用错误引起的,但是我在项目导入的时候做的第一件事情就是修改这里的library,转载 2017-12-01 18:50:44 · 258 阅读 · 0 评论 -
GC为什么影响程序效率
java垃圾回收机制 早期的jvm使用引用计数,现在大多数jvm采用对象引用遍历。对象引用遍历从一组对 象开始,沿着整个对象图上的每条链接,递归确定可到达(reachable)的对象。如果某对 象不能从这些根对象的一个(至少一个)到达,则将它作为垃圾收集。在对象遍历阶段, gc必须记住哪些对象可以到达,以便删除不可到达的对象,这称为标记(marking)对象。下一步,gc要删除不可到达的对象。删除时转载 2018-04-04 00:31:27 · 2289 阅读 · 0 评论 -
Android Java层的同步机制
java语言和c/c++语言不一样,java语言提供了同步关键字synchronized来支持线程间的同步操作。同步关键字synchronizedsynchronized关键字最常见的用法是保护一段代码,如下所示:(锁对象)class Foo implements Runnable{private String mLock; public void lockedMethod(){原创 2018-04-01 12:08:26 · 155 阅读 · 0 评论 -
IO操作
File表示文件或文件夹的路径File file=new File(“F:\a.text”);file.exists()文件是否存在 File file=new File(“F:\b”,”a.text”);可以判断前面路径是否存在后面文件file.createNewFile()创建文件 如果没有就创建并返回true,如果存在就不创建返回false file.mkdir()创建文件夹 文件夹也可以原创 2017-12-14 16:33:45 · 190 阅读 · 0 评论 -
java普通工程中/和web工程中/的区别
1.(无)开头表示当前目录下的 2.(/)开头的目录表示该目录为根目录的一个子目录 3.(./)开头的目录表示该目录为当前目录(当前目录所在的目录)的一个子目录 4.(../)开头的目录表示该目录为当前目录的父目录 但是实际使用过程中我们发现了很多问题,首先关于无反斜杠开头的路径描述基本准确,是表示当前目录下和(./)相似。问题主转载 2017-11-26 02:12:25 · 446 阅读 · 0 评论 -
Java相对路径/绝对路径总结(转)
1.基本概念的理解绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:C:xyz est.txt 代表了test.txt文件的绝对路径。http://www.sun.com/index.htm也代表了一个URL绝对路径。相对路径:相对与某个基准目录的路径。包含Web的相对路径(HTML中的相对目录),例如:在Servlet中,"/"代表转载 2017-11-26 01:57:47 · 407 阅读 · 0 评论 -
MyEclipse:An internal error occurred during: "Build Project". GC overhead limit exceeded
在使用Eclipse的Build Project功能时,提示以下错误: An internal error occurred during: “Build Project”. GC overhead limit exceeded 如图: 搜索的一下,是属于java.lang.OutOfMemoryError。 OOM大家都知道,就是JVM内存溢出了,那GC overhead转载 2017-11-25 14:57:43 · 740 阅读 · 0 评论 -
泛型的内部原理:类型擦除以及类型擦除带来的问题
参考:java核心技术一、Java泛型的实现方法:类型擦除前面已经说了,Java的泛型是伪泛型。为什么说Java的泛型是伪泛型呢?因为,在编译期间,所有的泛型信息都会被擦除掉。正确理解泛型概念的首要前提是理解类型擦出(type erasure)。Java中的泛型基本上都是在编译器这个层次来实现的。在生成的Java字节码中是不包含泛型中的类型信息的。使用泛型的时候加上的类转载 2017-12-04 00:26:22 · 243 阅读 · 0 评论 -
char转换为字面值和ASSCII
//转换为c对应的字面值String.valueOf(char a)//强转为a对应的ASCII码int(char a)示例:public class BigCount {public static void main(String[] args) { // TODO Auto-generated method stubchar[] data=new char[6];data[0原创 2017-11-22 23:19:27 · 773 阅读 · 0 评论 -
为什么int类型(16位)的下溢下限为-32768而上溢上限却是32767
首先说吧,32767很容易理解,32767=2^15-1 (因为要有一个符号位),但为什么下溢的时候分明是15位来表示的数会出现32768呢?? 首先从原码讲起,原码即为计算机中对数值的二进制表示,如 5用二进制表示为0000 0101 ; 其次就是反码,反码,顾名思义取反,对于正数来说,反码与原码相同;对于负数来说,反码为原码的各位取反(符号位除外),如(0011转载 2017-09-24 20:23:47 · 3504 阅读 · 0 评论 -
eclipse中几个库目录的解释
ADT 在project里面删除了 Android Private Libraries 之后怎么重新添加进去? 右键点击相关project目录,点击Android Tools -> Fix Project Properties 即可。当前工程的libs下的v4jar包与所包含的library工程的libs下的v4jar包会重复。而这个时候当前工程是不会将libs下面的任何jar包放到自动生成的An原创 2017-09-05 12:25:44 · 439 阅读 · 0 评论 -
重新学习位运算
位运算符 符号表示 定义 运算结果 按位非 ~ 单数操作,0变1,1变0 按位或 | 两个二进制数相同位只要有一个为1就为1 取大运算(结果不会小于最大的那个数) 按位与 & 同1才1 取小运算(结果不会大于最小的那个数) 按位异或 ^ 相同为0不同为1,00为1,11为1 结果大小无规律 >> 有符号右移 二进原创 2017-08-26 22:02:22 · 551 阅读 · 0 评论 -
wait、join、sleep、yield的区别
函数名作用wait()当一个线程执行到wait()方法时,它就进入到一个和该对象相关的等待池中,同时失去(释放)了对象锁机制,使得其他线程可以访问。用户可以用notify、notifyAll或者指定睡眠时间来唤醒当前等待池中的线程。注意:wait()、notify()、notifyAll()必须放在synchronized block中,否则会抛出异常原创 2017-07-02 17:19:57 · 807 阅读 · 0 评论 -
为什么使用线程池及线程池讲解
当我们需要频繁的创建多个线程进行耗时操作时,每次通过new Thread实现并不是一个好的方式,每次new Thred新建和销毁对象性能较差,线程缺乏管理,并不能充分利用每一个线程,可能无限制新建线程,相互之间竞争,可能占用过多系统资源导致死锁,并且缺乏定时执行、定期执行、线程中断等功能。java提供了四种线程池,他能够有效的管理、调度线程,避免过多的资源消耗。线程池的有点有以下几点:1)原创 2017-07-02 16:58:39 · 1303 阅读 · 0 评论 -
Java四种引用包括强引用,软引用,弱引用,虚引用。
强引用:只要引用存在,垃圾回收器永远不会回收Object obj = new Object();//可直接通过obj取得对应的对象 如obj.equels(new Object());而这样 obj对象对后面new Object的一个强引用,只有当obj这个引用被释放之后,对象才会被释放掉,这也是我们经常所用到的编码形式。 软引用:非必须引用,内存溢出之原创 2017-07-02 16:57:22 · 219 阅读 · 0 评论 -
java基本数据类型和引用数据类型
JAVA的基本数据类型和引用数据类型的区别 基本数据类型大小范围默认值int(整形)32-2147483648~21474836480long(长整形)64-9233372036854477808~92333720368544778080float(浮原创 2017-06-21 14:47:27 · 261 阅读 · 0 评论 -
什么是UUID
什么是UUID: UUID:(Universally Unique Identifier):通用唯一识别码,也可以翻译成普遍识别码。UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。如此一来,每个人都可以建立不与其它人冲突的 UUID。在这样的情况下,就不需考虑数据库建立时的名称重复问题。目前最广泛应用的 UUID,即是原创 2017-05-30 14:38:13 · 5732 阅读 · 0 评论 -
重写hashcode和equals的原因探究
大家都知道,map中存放的是键值对,值可以重复,键不可以重复。如果键不存在,则存入其中,如果键已存在。则新值替换旧值,原创 2017-05-30 13:22:23 · 325 阅读 · 0 评论 -
类和接口
子类覆盖父类的方法 父类的变量指向子类对象,在调用方法时,实际调用的仍然是子类的方法,这就是类的多态性。 一个子类对象在一定条件下可以转换成继承链中的另一个类的对象:1.一个子类对象的类型一般可以向上转换成它的父类对象,这种转换是安全的,java编译器能自动进行2.一个父类对象的类型一般不能向下转成它的子类。但有一种情况例外,如果一个父类对象引用连接的实际上是一原创 2017-05-29 17:10:46 · 490 阅读 · 0 评论 -
comparator接口与Comparable接口的区别
1. Comparator 和 Comparable 相同的地方他们都是java的一个接口, 并且是用来对自定义的class比较大小的,什么是自定义class: 如 public class Person{ String name; int age }.当我们有这么一个personList,里面包含了person1, person2, persion3....., 我们用C原创 2017-05-29 17:07:48 · 497 阅读 · 0 评论 -
String,StringBuffer,StringBuild的区别
String和StringBuild是异步的StringBuffer是同步的,线程安全的String是不可变的,是final的String a="abc";a=a+"cde";字符串a指向一块存储有abc的内存,拼接以后会指向另一块内存,因为String是不可变的StringBuffer buffer=new StringBuffer("abc");buffer.app原创 2017-07-02 17:21:07 · 452 阅读 · 0 评论 -
可序列化
可序列化接口Serializable(java.io) 只有可序列化的对象才可以写入到输出流中。如何让一个类的实例是可序列化的: 1.实现java.io.Serializable接口原创 2017-05-29 17:09:32 · 1415 阅读 · 0 评论 -
位运算
位运算主要是直接操控二进制时使用 ,主要目的是节约内存,使你的程序速度更快,还有就是对内存要求苛刻的地方使用,以下是一牛人总结的方法,分享一下:位运算应用口诀清零取反要用与,某位置一可用或若要取反和交换,轻轻松松用异或 移位运算要点 1 它们都是双目运算符,两个运算分量都是整形,结果也是整形。 2 " 3 " > > " 右移:右边原创 2017-07-04 15:17:52 · 255 阅读 · 0 评论 -
HashMap和Hashtable的区别
HashMap和Hashtable的比较是Java面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决问题。HashMap的工作原理、ArrayList与Vector的比较以及这个问题是有关Java 集合框架的最经典的问题。Hashtable是个过时的集合类,存在于Java API中很久了。在Java 4中被重写了,实现了Map接口,所以自此以后也成了Java转载 2017-08-26 11:36:09 · 240 阅读 · 0 评论 -
LinkedHashmap源码剖析
LinkedHashMap简介 LinkedHashMap是HashMap的子类,与HashMap有着同样的存储结构,但它加入了一个双向链表的头结点,将所有put到LinkedHashmap的节点一一串成了一个双向循环链表,因此它保留了节点插入的顺序,可以使节点的输出顺序与输入顺序相同。 LinkedHashMap可以用来实现LRU算法(这会在下面的源码中进行分析)。转载 2017-07-26 21:08:48 · 217 阅读 · 0 评论 -
HashMap内部原理
目录(?)[+]HashMap 内部实现通过名字便可知道的是,HashMap 的原理就是散列。HashMap内部维护一个 Buckets 数组,每个 Bucket 封装为一个 Entry 键值对形式的链表结构,这个 Buckets 数组也称为表。表的索引是 密钥K 的散列值转载 2017-07-04 15:37:15 · 267 阅读 · 0 评论 -
基本类型和引用类型的本质区别
java的基本数据类型和引用数据类型原创 2017-07-21 10:52:01 · 1255 阅读 · 0 评论 -
Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
一、Java的反射机制 每个Java程序执行前都必须经过编译、加载、连接、和初始化这几个阶段,后三个阶段如下图:其中i、加载是指将编译后的java类文件(也就是.class文件)中的二进制数据读入内存,并将其放在运行时数据区的方法区内,然后再堆区创建一个Java.lang.Class对象,用来封装类在方法区的数据结构。即加载后最终得到的是Class对象,并且更加转载 2017-07-23 20:54:53 · 583 阅读 · 0 评论 -
Serializable序列化中serialVersionUId的作用
Serializable是java所提供的一个序列化接口,它是一个空接口,为对象提供标准的序列化和反序列化操作,使用Serializable来实现序列化很简单,只要在类的声明中指定一个类似下面的标识即可自动实现默认的序列化过程。private static final long serialVersionUID=2656653232L想让一个对象实现序列化,只要这个类实现Serializabl原创 2017-07-15 11:46:22 · 2257 阅读 · 0 评论 -
HashSet的实现
HashSet的实现和HashMap类似,看源码, public HashSet() { map = new HashMap<>(); }添加也是HashMap的添加,填充的也是键值对,虽然我们使用时只填充了一个值,实际上填充的是key,value被固定成了一个对象 private static final Object PRESENT = new Object()原创 2017-07-04 16:25:14 · 212 阅读 · 0 评论