Java
Mr-Xi
此博客不在更新,更多博客请访问:
http://blog.csdn.net/qq_29078329
展开
-
Java成员初始化顺序
原则:静态成员优先于非静态成员;父类优先于子类初始化;按定义顺序初始化1父类静态变量、父类静态代码块、子类静态变量、子类静态代码块2父类非静态变量、父类非静态代码块、父类构造函数3子类非静态变量、子类非静态代码块、子类构造函数原创 2016-10-28 16:15:25 · 258 阅读 · 0 评论 -
Sring的intern()方法
"abc".intern()返回"abc",如果字符串常量池中存在"abc"的话,返回池中的字符串,如果字符串常量池中不存在"abc"的话,虚拟机会创建"abc"放入常量池中,再返回池中"abc"的引用。原创 2016-10-28 15:24:06 · 260 阅读 · 0 评论 -
Java反射机制 -数据库相关
一、什么是反射机制 简单的来说,反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字, 那么就可以通过反射机制来获得类的所有信息。二、哪里用到反射机制 有些时候,我们用过一些知识,但是并不知道它的专业术语是什么,在刚刚学jdbc时用过一行代码, Class.forName("com.mysql.jdbc.Drive转载 2016-10-28 15:13:14 · 640 阅读 · 0 评论 -
抽象类和接口的区别
抽象类和接口都是支持抽象类定义的两种机制。包含抽象方法的类是抽象类,抽象类由abstract修饰,抽象类中的抽象方法只有定义没有实现,抽象类中可以包含非抽象的方法。继承抽象类的子类必须实现父类的抽象方法,否则子类也是抽象类。 接口是一种特殊形式的抽象类,是一种规范,接口中的所有方法都是抽象的,只有定义没有实现,接口中的成员变量都是public static final类型的,通过接口可以原创 2016-10-28 14:53:01 · 318 阅读 · 0 评论 -
Java面向对象特征
封装、继承、多态 封装是把实际的事物封装成抽象的类,类里面包含自身的数据也就是成员变量,以及类拥有的行为也就是成员方法,通过访问控制符类可以把自己的数据和方法只让可信的类操作,对不可信的类隐藏实现细节。 继承是实现代码复用的一种手段,子类可以拥有父类的所有功能,并且还可以对父类不合适的方法进行重写,子类还可以在父类的基础上扩充自己的功能,添加成员变量或者成员方法,Jav原创 2016-10-28 14:50:18 · 356 阅读 · 0 评论 -
switch能作用的类型
在Java7之前,switch只能支持 byte、short、char、int或者其对应的封装类以及Enum类型。在Java7中,也支持了String类型。不支持Long类型,long类型转成int类型,可能得不到精确值,但是byte、short、char都可以转成int,并且得到的数没有损失。原创 2016-10-28 14:45:05 · 6643 阅读 · 2 评论 -
static关键字
Static修饰的成员是属于类的,可以达到全局的效果,static可以修饰成员变量、成员方法、代码块和内部类。 Static修饰的成员变量是属于类的,在内存中只有一份,存放在方法区中,所有对象都共享静态变量,只要类被加载就可以使用,由于静态变量被类拥有,所以不能在方法体中定义static变量。 Static修饰的方法是类的方法,只要类被加载就可以使用,静态方法里只能访问所属类的原创 2016-10-28 14:22:01 · 298 阅读 · 0 评论 -
final、finally、finalize区别
Final用于修饰类、成员变量和成员方法。final修饰的类,不能被继承(String、StringBuilder、StringBuffer、Math,不可变类),其中所有的方法都不能被重写,所以不能同时用abstract和final修饰类(abstract修饰的类是抽象类,抽象类是用于被子类继承的,和final起相反的作用);Final修饰的方法不能被重写,但是子类可以用父类中final修饰的方原创 2016-10-28 14:19:27 · 16265 阅读 · 0 评论 -
Java反射机制
转自:http://blog.csdn.net/liujiahan629629/article/details/18013523 反射,当时经常听他们说,自己也看过一些资料,也可能在设计模式中使用过,但是感觉对它没有一个较深入的了解,这次重新学习了一下,感觉还行吧! 一,先看一下反射的概念: 主要是指程序可以访问,检转载 2016-10-28 16:58:45 · 223 阅读 · 0 评论 -
Java虚拟机内存组成
JVM内存分为Java堆、Java栈、方法区、本地方法栈、程序计数器Java堆:Java栈:方法区:程序计数器:本地方法栈:常量池:总结:Java堆(线程共享):运行时new出来的对象;Java栈(线程私有):每个线程都有一个线程栈,每个方法被执行时都会创转载 2016-10-28 17:54:03 · 319 阅读 · 0 评论 -
Java中内存泄露问题
首先Java中是存在内存泄露的,长生命周期的对象持有短生命周期对象的引用就可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用,会导致短生命周期对象不能被回收。常见的内存泄露情形:1使用静态的集合类静态的集合类的生命周期和应用程序的生命周期一样长,所以在程序结束前容器中的对象不能被释放,会造成内存泄露。(不需要容器时将其赋值为null)2 单例模式可原创 2016-10-27 13:49:56 · 1202 阅读 · 0 评论 -
Java 自动装箱和拆箱
1.Java数据类型 在介绍Java的自动装箱和拆箱之前,我们先来了解一下Java的基本数据类型。 在Java中,数据类型可以分为两大种,Primitive Type(基本类型)和Reference Type(引用类型)。基本类型的数值不是对象,不能调用对象的toString()、hashCode()、getClass()、equals()等方法。所以J转载 2016-11-23 18:00:14 · 540 阅读 · 0 评论 -
Java中包装类型的作用
Java是面向对象的语言,每一种基本数据类型都应该有对应的对象类型,方便对基本类型进行操作。包装类型可以解决一些基本类型解决不了的问题,如下:1 有时候一个函数需要传递一个Object变量 而你想传递int类型的进去显然不行,这就要用到包装类。public void test(Object obj){}想传递5进去就可以这样test(new Integer(5));2 集合不原创 2016-11-21 18:47:48 · 10164 阅读 · 0 评论 -
Java线程同步实现方法
1 synchronized关键字(1) synchronized修饰代码块,一个线程访问一个对象的synchronized同步代码块时,其它试图访问该对象的线程将被阻塞,必须等待当前线程执行完这个代码块以后才能执行该代码块,但是另一个线程仍然可以访问该对象中的非synchronized同步代码块。一个线程在访问一个对象的synchronizedmethod1,其他的线原创 2016-10-26 19:45:43 · 768 阅读 · 0 评论 -
sleep()和wait()的区别
sleep是Thread类的静态方法,使线程暂停一段时间,休眠时间一到会重新执行。wait()是Object类的本地方法,并且被final修饰,不能被子类重写,它是线程间通信的方式,当前线程如果拥有一个对象的对象锁,调用这个对象的wait()方法会使当前线程释放掉这个对象的锁,并进入等待状态,也可以设置等待时间,超过时间线程会自动进入就绪队列,如果没有设置等待时间,直到再调用对象的notify或者原创 2016-10-26 19:56:05 · 294 阅读 · 0 评论 -
String、StringBuilder、StringBuffer区别
(1)不可变VS可变String对象是不可变的,StringBuilder和StringBuffer是可变的。String类中有个char类型的数组value,这个数组用于存储字符序列,并且这个数组用final修饰,只能赋值一次,因此String对象是不可变的,一旦赋值就不能变动。对String对象的改动操作都不是在原有的字符串上进行的,而是重新生成了一个新的字符串对象,也就是说进行改动操作后原创 2016-10-27 16:57:35 · 389 阅读 · 0 评论 -
Java中值传递与引用传递的区别
值传递是方法调用的时候,把实参的值的拷贝传递给形参,实参和形参存储在不同的存储单元里面,对形参的改变不会影响到实参的值,Java里基本数据类型的传递是值传递。引用传递是方法调用的时候,传递的是对象在堆空间中的地址,实参的值和和形参的值都指向同一个对象,所以对形参的改变会影响到实参的值,因为它们指向同一个对象。Java里引用类型数据的传递是按引用传递。参考链接:http://blog.c原创 2016-10-27 17:23:25 · 518 阅读 · 0 评论 -
Java异常分类
参考链接:http://blog.csdn.net/hguisu/article/details/6155636原创 2016-10-28 18:07:42 · 314 阅读 · 0 评论 -
Java类加载器
面向对象的原理:认为万事万物都是对象,类也是对象,是class类的对象叫做类类型。(why)Java类加载器的作用就是在运行时加载类。(How?)Java类加载器基于三个机制:委托、可见性和单一性。委托机制是指将加载一个类的请求交给父类加载器,如果这个父类加载器不能够找到或者加载这个类转载 2016-10-28 17:01:50 · 663 阅读 · 0 评论 -
Break、continue、return区别
Break用于跳出break语句所在的那层循环,如果还有外层循环的话,继续执行外层循环,如果是while循环遇到break语句,直接跳出while循环,如果是两层循环,break语句在最内层循环,遇到break语句,跳出内层循环,执行外层循环。 Continue用于停止本次循环,并且不在执行本次循环的continue语句下面的语句,不是跳出本层循环。当程序执行到return语句时原创 2016-10-27 22:46:25 · 344 阅读 · 0 评论 -
Java堆栈区别
栈主要是用来执行程序的,方法中定义的基本类型变量和对象的引用变量都是在栈内存中分配,方法中定义一个变量时,JVM会在栈中为这个变量分配内存空间,方法执行完成后,JVM会自动释放掉为该变量分配的栈空间。JVM为每个新创建的线程都分配一个栈空间,栈空间以帧为单位保存线程的状态,当线程激活一个Java方法,JVM就会在线程的栈空间里新压入一个帧,在此方法执行期间,这个帧将用来保存参数,局部变量,中间计算原创 2016-10-27 22:41:08 · 465 阅读 · 0 评论 -
非静态内部类为什么持有外部类的this引用
内部类虽然和外部类写在同一个文件中, 但是编译完成后, 还是生成各自的class文件,内部类通过this访问外部类的成员。1 编译器自动为内部类添加一个成员变量, 这个成员变量的类型和外部类的类型相同, 这个成员变量就是指向外部类对象(this)的引用;2 编译器自动为内部类的构造方法添加一个参数, 参数的类型是外部类的类型, 在构造方法内部使用这个参数为内部类中添加的成员变量赋值;3在调用内部类原创 2016-10-27 22:21:10 · 6374 阅读 · 1 评论 -
Java线程通信方式
1 wait()、notify()、notifyAll()wait()、notify()和notifyAll()是Object类中的本地方法,并且被final修饰,无法被重写,一般在synchronized代码块中使用。当前线程在拥有一个对象的锁的时候,调用这个对象的wait方法会使当前线程释放对象锁并进入等待状态,wait(n), 参数 0 时无限长 , 负数会抛 java.lang.Ill原创 2016-10-26 19:49:32 · 380 阅读 · 0 评论 -
Java线程的实现方式
(1) 继承Thread类,重写run方法(2) 实现runnable接口,实现run方法 (1)(2)两种方法本质上都是相同的,使用Runnable实现多线程(3)实现Callable接口,重写call()方法Callable接口中只有一个call方法,call方法执行完后可以返回结果,并且call方法可以抛原创 2016-10-26 19:13:03 · 282 阅读 · 0 评论 -
同步异步概念
同步:在发出一个功能调用后,在没有得到结果之前,该调用就不返回,也就是必须一件一件事做,等前一件做完了才能做下一件事。同步常用于解决多线程环境中数据的共享问题,同步锁机制保证同一时刻只有一个线程能进入临界区(访问互斥资源的代码块,也就是访问共享数据的代码块),当前线程执行完成,并且释放了对象锁,其他等待进入临界区的线程才能执行。异步:在发出一个异步调用后,被调用的对象不能立刻返回结果,在没有得原创 2016-10-26 18:51:05 · 482 阅读 · 0 评论 -
进程与线程的区别
线程是程序执行过程中,执行程序代码的一个执行单元,有就绪、运行、挂起、结束四个状态。进程是一段正在执行的程序,一个进程可以拥有多个线程,各个线程之间共享进程的内存空间(堆空间、方法区、常量池)以及进程资源(打开的文件),各个线程拥有自己的栈空间。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的栈空间,但线程之间没有单独的地址原创 2016-10-26 18:46:34 · 506 阅读 · 0 评论 -
Java本地方法
一. 什么是Native Method 简单地讲,一个Native Method就是一个java调用非java代码的接口。一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C。这个特征并非java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去调用一个C的函数。 "A native m转载 2015-08-29 09:14:49 · 400 阅读 · 0 评论 -
ArrayList、LinkedList、Vector的区别
ArrayList、LinkedList、Vector都是可以动态改变长度的容器类,ArrayList和Vector都是基于Object[] array实现的,容器中的数据在内存中是连续存储的,用下标访问元素在O(1)时间就能完成;但是在插入元素或者删除元素时执行比较慢,插入元素时需要把插入项后面的所有元素都要向后移动,删除元素时需要把删除项后面的元素都要向前移动,如果在第i个位置插入或者删除元素原创 2016-10-26 20:19:34 · 295 阅读 · 0 评论 -
HashMap的实现原理
hashMap是map接口的一个实现类,常用于存储键值对,HashMap在底层采用一个Entry[] 数组来保存所有的key-value对,一个键值对就是一个Enry。当调用put()方法存储Entry对象的时候,首先会将Entry中的key值的hashcode值输入hash算法,hash算法会返回一个hash值,这个值决定了Entry在table数组中的存储位置(indexFor()实际上返原创 2016-10-26 20:23:37 · 264 阅读 · 0 评论 -
HashMap、HashTable有哪些区别
hashMap是HashTable的轻量级实现,它们都实现了Map接口,HashTable是线程安全的,其中的大部分方法是同步的,hashMap本身不支持线程的同步,它不是线程安全的,所以在多线程环境下,如果使用hashMap的话,要提供同步操作,正因为HashTable自身就提供了同步操作,所以效率方面HashTable要低于hashMap。使用上,hashMap允许Entry对象的key值原创 2016-10-26 20:43:50 · 286 阅读 · 0 评论 -
Java中的引用类型分类以及使用场景
(1)强引用 如果一个对象具有强引用的话,垃圾回收器不会回收这个对象,即使内存空间不足的时候也不会回收具有强引用类型的对象,平时通过new创建一个对象赋值给一个变量(Aa = new A()),这种方式就是强引用,强引用类型的对象,在不使用时要赋值为null,才能被垃圾回收器回收。(2)软引用 如果一个对象只具有软引用,内存空间足够,垃圾回收器就不会回收它,如果内存原创 2016-10-27 20:13:21 · 3612 阅读 · 0 评论 -
Java中==、equals()、hashCode()区别
==比较的是两个变量的内存中存储的值是否相同,也就是比较的是引用,对于基本数据类型比较的是它们的数值,数值相同返回true,数值不同返回false;对于引用类型比较的是,两个变量是否指向堆中的同一个对象,如果指向同一个对象的话返回true,否则返回false。equals()方法是object类提供的一个方法,每个Java类都拥有equals()方法,object类中的equals()方法直接原创 2016-10-27 17:11:16 · 269 阅读 · 0 评论 -
Java socket编程
(1) 概念socket用来实现服务端和客户端的网络通信,在Java中,用ServerSocket作为服务端,socket作为客户端。(2) 原理ServerSocket在指定的端口监听客户端发来的请求,通过Accept()方法收到请求的话就加入请求队列中,否则就一直处于阻塞状态,直到客户端发来请求,服务端通常在主线程里接收请求,收到请求后把socket交给子线程处理,在子线程中对客户原创 2016-10-27 16:17:40 · 350 阅读 · 0 评论 -
Java序列化机制
(1)概念序列化是把对象转换成字节序列,保存在磁盘上或者通过网络传输,序列化保存的是对象的"状态",也就是对象的成员变量的值,通过反序列化可以把对象的字节序列恢复为Java对象,序列化是深复制(对象当中的对象也会被序列化),反序列化还原后的对象地址与原来的对象地址不同。(2)序列化API被序列化的对象要实现Serializable接口或者Externalizable接口才能完成序列化,原创 2016-10-27 14:28:10 · 492 阅读 · 0 评论 -
Java集合框架
Set、List接口继承了Collection接口,Set中的元素不能重复,用元素的equals()比较,实现类有HashSet、TreeSet;List中的对象按顺序存放,可以重复,实现类有LinkedList、ArrayList、Vector;Map接口存储键值对,存放的元素无序,key值不可以重复,value值可以重复,Map可以看成特殊的Set,把value看成key的附属部分,实现类有H原创 2016-10-27 11:39:02 · 228 阅读 · 0 评论 -
Java集合CurrentHashMap
ConcurrentHashMap是一个线程安全的容器,内部分成了多个Segment,Segment类似于HashTable,Segment实现了ReentrantLock,所以Segment本身就是一个锁结构,允许多个修改操作并发进行,只要多个修改操作在不同的Segment中进行就可以,ConcurrentHashMap锁的粒度保持的小,而不是对整个容器加锁。ConcurrentHashMap定原创 2016-10-26 21:55:42 · 1792 阅读 · 0 评论