java
文章平均质量分 72
WuRuiF
一件简单的事情,重复的去做,反复的思考,不断的改进,会发生奇迹。
展开
-
父类方法中使用this,那么这个this指的是谁?
一直在用一些东西,却总是感觉有一些疑惑,今天发现了自己一个及其致命的意识错误。关于父类中this关键字到底是谁的问题。请看代码父类Parentpublic class Parent { public Parent(){ System.out.println("父类自己---->"+this); } public void onCreate(){ System.out.prin原创 2016-02-01 17:03:04 · 8985 阅读 · 4 评论 -
java再复习——使用JDK1.5新特性优化生产者消费者
传统的生产者消费者代码有一个问题:就是在notifyAll的时候会唤醒锁池中所有等待的线程,包括消费者线程和生产者线程,但是我们只知道,我们生产完之后值想唤醒消费者线程,我们消费完之后只想唤醒生产者线程,这样唤醒无用线程,既增加多余的判断,又影响性能。java在JDK1.5以后就提供了比较好的工具,把wait,notify,notifyAll方法封装成了一个Condition对象,可供我们操作原创 2017-03-08 10:29:49 · 279 阅读 · 0 评论 -
java再复习——异常总结
异常体系:Throwable顶层接口:Error:错误体系,发生这种错误,代表发生了不可挽回的错误,JVM会直接停止运行,并不提供任何可处理机制,只打印相关错误信息。Exception:异常体系,发生这种异常,相当于生病,有的可处理,有的不可处理,但是都是只是“病”,没有致命的问题,可以解决。RuntimeException:作为Exception的子类,RuntimeExcept原创 2017-03-08 10:58:58 · 275 阅读 · 0 评论 -
java再复习——Map体系
常有Map与Collection什么关系?没什么关系,都是集合的顶层接口,没有直接关系。Map体系没有实现Iterator接口。Map体系的特殊结果,K,V存在。 K键唯一。Map体系的常用实现类:HashMap: 底层实现哈希表,允许Key值和Value值为null,线程不同步的。TreeMap : 底层是二叉树,不允许key为null(因为TreeMap要排序,原创 2017-03-04 23:35:16 · 327 阅读 · 0 评论 -
java再复习——Collections和Arrays
常见问题Collections和Collection的区别?Collection的集合底层接口,而Collections只是一个操作集合的工具类。Collections提供的常用有用方法:sort:排序max:取最大值binarySearch:二分查找toArray:将集合转换为数组,值得注意的是,转化的时候需要new一个数组传入,如果这个数组的长度小于集合的长度的话,方法原创 2017-03-04 23:42:55 · 355 阅读 · 0 评论 -
java再复习——多线程之初识线程,并从源码角度分析start与run方法,Thread类与Runnable接口
进程与线程的概念。进程:是操作系统为一个程序分配内存空间的基本单位。线程:存在于一个进程里,是程序执行的基本单元。线程才是负责是去执行程序的。java创建线程的方式:一:继承Thread类,java为我们提供了封装好的线程类 Threadclass MyThread extends Thread{ @Override public void run() { Sy原创 2017-03-05 15:11:52 · 2096 阅读 · 0 评论 -
java再复习——线程的安全问题以及同步
使用多线程,最重要的就是安全问题,何为安全问题?public class ThreadTest1 { public static void main(String[] args) { MyRunnable runnable = new MyRunnable(); new Thread(runnable).start(); new Thread(runnable).start()原创 2017-03-05 19:49:24 · 270 阅读 · 0 评论 -
java再复习——线程的死锁问题
使用多线程的时候,除了因为操作共享数据带来的安全问题,还有一个就是因为,为了避免安全问题去使用同步,但是因为同步使用不当而产生的死锁问题。例子:public class DeadLockDemo { public static void main(String[] args) { Data data = new Data(); new Thread(new RunnableA(原创 2017-03-06 09:45:46 · 226 阅读 · 0 评论 -
java再复习——线程的状态以及等待唤醒机制
线程有自己的状态,看下图:上图基本描述的线程的生命状态,有的地方也会将冻结状态分为两种,但这没多大意义,明白就好,上图的流程也有少画的,详细会解释。解释一下各种状态消亡状态:不用说,线程死了。创建状态:new Thread()就代表创建了一个线程运行状态:thread.start()之后就开始运行现场,不过有可用没有抢到CPU执行权,所以有可能在阻塞状态等待。冻原创 2017-03-06 10:10:48 · 327 阅读 · 0 评论 -
java再复习-ThreadLocal的使用
JDK1.5以后提供了许多方便的关于线程的类,比如ThreadLocal,一个可以在线程范围内共享数据的类:使用:public class ThreadLocalDemo2 { public static ThreadLocal threadLocal = new ThreadLocal<>(); public static void main(String[] args) {原创 2017-03-11 11:17:05 · 310 阅读 · 0 评论 -
java再复习-CountDownLatch的使用与实际应用(Android)
CountDownLatch相当于一个多线程的计数器,可以不用关注数的同步,来定义一个数值去等待做一些事情,看例子:public class CountDownDemo2 { /** * 初始化一个CountDownLatch,次数为3 */ public static CountDownLatch countDownLatch = new CountDownLatch(3);原创 2017-03-11 11:32:21 · 563 阅读 · 0 评论 -
java再复习-Semaphere的使用
Semaphere:翻译为信号灯,其实就是提供一个值,用来限制并发访问量的,如果大于他的这个值,则会阻塞,小于的话可以进行执行,看例子:public class SemaphoreDemo2 { /** * 建立信号灯类 * 第一个参数为:并发数 * 第二个参数为:是否公平,默认为false,也就是一个参数的构造函数时就默认为false, * 那么何为是否公平呢? 如果设置原创 2017-03-11 11:58:47 · 490 阅读 · 0 评论 -
java再复习-Exchanger的使用
Exchanger:使用两个线程间交换数据,阻塞的等待。例子:public class ExchangerDemo2 { public static void main(String[] args) throws Exception { final Exchanger exchanger = new Exchanger<>(); new Thread(){ publ原创 2017-03-11 12:16:07 · 358 阅读 · 0 评论 -
java再复习-CyclicBarrier的使用
CyclicBarrier:译为路障,给它一个初始值(一般为线程的个数),然后这些线程分别去干自己的事,然后干完之后汇合,汇合完之后再去各种去干自己的事,看例子:public class CyclicBarrierDemo2 { /** * 第一个参数:需要等到几个(与CountDownLatch正好相反,countDounwLatch是需要消耗几个) * 第二个参数:当数值达到时原创 2017-03-11 13:12:07 · 298 阅读 · 0 评论 -
java再复习-Future与Callable的使用
Future总是与Callable绑着使用的。callable接口:相当于Runnable,但是被线程执行后可以提供返回值。future接口:用来保存Callable的返回值的。所以他俩是结合使用的Future常用子类:FutureTask,一个保存Callable接口返回值的任务,使用:public class FutureAndCallableDemo { publ原创 2017-03-11 14:16:18 · 421 阅读 · 0 评论 -
java再复习-枚举的使用及其实现原理
java 枚举的使用以及枚举的实现原理,枚举的深入理解原创 2017-03-12 11:56:31 · 545 阅读 · 0 评论 -
java再复习-线程池
线程池:涉及到池的概念,肯定是为了重复利用资源,避免资源的重复创建,以及方便统一管理,线程池也不例外,可以避免频繁的创建线程和销毁线程带来的性能消耗,也可以对线程的并发数以及行为等进行一个统一的管理。java中有一个Executor接口,它就是线程池的顶层接口,而真正的实现是ThreadPoolExecutor。ThreadPoolExecutor的使用:public clas原创 2017-03-14 12:50:59 · 388 阅读 · 0 评论 -
java再复习——线程的经典问题-生产者消费者
为什么多线程总是离不开这个问题呢?因为这种场景是多线程在生成环境中最重要,最主要的应用,基于这种场景提炼出的问题就是生产者消费者问题。实例代码:/** * 资源 * @author PC * */class Resource { int count = 0; boolean isHas = false; public synchronized void produc原创 2017-03-08 10:13:48 · 371 阅读 · 0 评论 -
java再复习——Collection体系
Collection体系作为开发中最常用的东西,值得再次梳理一下。体系图:Collection作为集合的顶层接口,它也有顶层接口,就是Iterable,为了描述所有集合必须有迭代器来进行遍历与取值的共性。Collection中最常用的两类实现接口为: List与Set.为什么分为两类?因为所存储数据时的数据结构不一样List: 这一类的容器,数据是有序的,并且可以重复,原创 2017-03-01 23:27:51 · 444 阅读 · 0 评论 -
java再复习——注解的定义与使用
@Target(value = ElementType.FIELD)@Retention(value = RetentionPolicy.RUNTIME)public @interface Column { String name() ; boolean isId() default false;}这是声明一个注解,@Target与@Retention为元注解,用来对自定义注原创 2017-02-22 17:39:55 · 356 阅读 · 0 评论 -
java再复习——成员内部类为什么不能定义静态变量
java的成员内部类不可以定义静态变量,为什么要设计? 以及真的完全不能静态的东西吗?public class InnerClassDemo { class InnerClass{ //1、这样是可以的,这样编译器会在编译的时候就将这种语句变成常量值(也就是说可以定义所有的static final + 基本数据类型) static final int i = 50; //2、这原创 2017-02-28 11:37:58 · 6701 阅读 · 0 评论 -
java再复习——通过反射读取注解
通过反射读取类的注解与属性的注解的相关常用APIpublic class AnnoationTest { public static void main(String[] args) throws ClassNotFoundException { //通过反射加载类 Class clazzClass = (Class) Class.forName("Student"); //读原创 2017-02-28 12:41:01 · 905 阅读 · 0 评论 -
java再复习——通过反射获取类的名字,属性,方法,构造器
熟练的使用反射的API,才可以熟练的写框架,不会语法,如何写句子?public class ReflectTest { public static void main(String[] args) throws Exception { //加载类 Class clazz = (Class) Class.forName("Student"); //获取类名 System.ou原创 2017-02-28 17:51:56 · 706 阅读 · 0 评论 -
java再复习——通过反射使用类的属性,方法和构造器
知道了如何获取到类的属性,方法和构造器,那么就应该开始使用了。public class ReflectDemo { public static void main(String[] args) throws Exception{ //加载类 Class clazz = Student.class; //取得无参构造函数 Constructor declaredConstru原创 2017-02-28 19:36:28 · 438 阅读 · 0 评论 -
java再复习——泛型
java在1.5之后引入泛型,为了什么?一:泛型只在编译时起作用,运行时会彻底擦除。二:因为泛型会在运行时被彻底擦除,所以不会影响程序的运行效率三:泛型的出现,使的程序中存在的类型不同的安全隐患问题可以得到很好的解决,而且也为程序免去了强制转换类型的多余步骤以及可能出现的运行时强制类型转换错误。例如: List list= new ArrayList();原创 2017-03-01 11:11:09 · 231 阅读 · 0 评论 -
java再复习——泛型使用语法上的一些坑
一些使用泛型过程中的语法的坑例如: //可以 List list = new ArrayList(); //原类型指向泛型参数类型OK List list2 = new ArrayList(); //泛型参数类型指向原类型也可以 List list3 = new ArrayList();这样写原创 2017-03-01 12:09:59 · 591 阅读 · 0 评论 -
java再复习——泛型的通配符与扩展
上次说了泛型的语法,发现有个问题,就是泛型是什么就得是什么,但这样岂不是程序就得写死了,没有一点可预判性了吗,那么泛型的好处也就光体现在不用进行强制类型转换上了吗?泛型还给我们提供了一种符号 : ? 这种符号代表通配符,意思是什么都可以,看例子 /** * 打印任意集合的值 * @param list */ public static void printSize(List原创 2017-03-01 17:07:00 · 371 阅读 · 0 评论 -
java再复习——自定义泛型方法
曾经对每一个新手都有这样的问题,做一个可以通用的给数组元素换位置的方法,那么这么做。。? 初学java阶段当然是方法的重载啊,但是其实还是写了好多代码。。。有时候就因为一个参数不一样,那么久得再重载一个,很痛苦的,看着其实也并不高大上,我们心里也一定知道,肯定会有其他高级方法的,这时候自定义泛型方法就出现了。自定义泛型方法的语法:public class GenericDemo2 {原创 2017-03-01 17:33:29 · 448 阅读 · 0 评论 -
java再复习——自定义泛型类
我们最先接触泛型是在哪里?我像大家都应该是这个:List list = new ArrayList();这样的话,这个链表就只能存放String类型的参数(不考虑通过反射绕过编译器存其他类型的参数这样的行为),以及取值等都是String。这就是一个泛型类,那么我们如何自定义我们的泛型类?(注意不要解决T能不能写出别的。比如说E了什么的。。确实是能写成E,不管是T,E都只是一个代替,原创 2017-03-01 18:08:04 · 955 阅读 · 0 评论 -
java再复习——通过反射获取到方法的参数和返回值的泛型类型
我们都知道了可以定义带有泛型参数的方法,以及泛型返回值的方法了,那么泛型在运行的时候已经被擦除了,我们该如何知道这个泛型到底是什么呢?有很多情况需要知道实际泛型是什么,Android数据库框架以及Http框架在解析成json成实体类的时候,必然要知道是哪个类。获取参数的泛型API方法:public class GenericParameterizedTypeDemo { public原创 2017-03-01 18:46:22 · 17070 阅读 · 0 评论 -
java再复习——面向对象(一)
面向对象,OOP,全名Object Oriented Programming,本意就是以对象为导向的编程。OOP是如何演变而来的?要只知道面向对象的是如何演变而来的,必须得先知道,在它之前人们是如何编程的,也就是面向过程编程。早起的C语言就是典型的面向过程编程,计算机专业的学生一定都学过C语言,大家都知道C语言是如何编程的,特别是新手,定义大一堆变量,然后再写一大堆的方法(好的话,原创 2017-02-21 11:31:51 · 325 阅读 · 0 评论 -
java再复习——面向对象(二)
上一次记录了一下面向对象是如何而来的,以及为什么要用面向对象的思想来编程,在工作中会带来什么好处。这一次我想记录一下我个人对面向对象的理解。我觉得:面向对象编程,其实是面向对象组织代码为什么要这么说? 因为上一次虽然说了那么多面向过程写代码的坏处,以及面向对象写代码的好处,但是细心的人或者初学者就发现,代码到最后写下来,每一句最根本的代码还不是面向过程吗? 假如说上一次举得例子,得原创 2017-02-21 12:02:15 · 258 阅读 · 0 评论 -
java再复习——代码执行的大体流程与内存分析
一段java代码是如何执行的以及它所涉及的内存分配时如何进行的?一:一个java程序的主入口为public static void man();二:java程序内存分为:堆内存和栈内存三:作为一个程序,代码的执行流程,一定是从左到右,从上到下的。程序片段:public class Test { int i; String name; public stati原创 2017-02-21 16:43:21 · 313 阅读 · 0 评论 -
java再复习——this的真正意义以及方法区的方法信息与对象的方法是如何产生关联的
this关键字:指代当前调用某方法的实际对象this关键字最常用场景:public class Student { String name; public Student(String name) { this.name = name; } }在同名的情况下,用来区分是局部变量还是对象的全局变量,当然还有其他场景,比如this()调用本类的其他构造方法,或者其他原创 2017-02-22 15:12:52 · 1068 阅读 · 0 评论 -
java再复习——字符串他妈到底有几个?
类的内存分析,为什么要加载方法到方法区,以及如何生效等都记录过了,再记录一下,方法区中的字符串常量池。我们在定义一个字符串变量时,JVM会先去方法区的常量池中寻找是否有以及存在的,如果有就直接将引用指向常量池中的这个字符串,如果没有就先在常量池中创建一个字符串,然后将引用指向它。public class Test { public static void main(String[] ar原创 2017-02-22 15:34:51 · 293 阅读 · 0 评论 -
java再复习——多态的理解
每当有人问我什么是多态的时候,我并不知道到底该如何去回答。我只知道在代码中什么时候该使用接口,什么时候使用父类,继承,使用多态的特性来编程,但是到底该如何回答,今天我想强迫自己总结一下。多态的定义:多种形态,可以实现动态联编,就是在编译的时候是一种形态,在运行的时候绝对它的真正形态。这话到底是他妈的什么意思?简单点,说话的方式再简单点,对应代码就是:public class Tes原创 2017-02-22 16:04:56 · 349 阅读 · 0 评论 -
java再复习-常用线程池
ThreadPoolExecutor只是java对线程池最原始的实现,java还提供了不同特性的封装好的线程池来供我们使用。Executors工具类提供了一系列静态工厂方法来帮助我们创建不同特性的线程池。1、FixedThreadPool: Executor executor = Executors.newFixedThreadPool(3);这是一种线程数量固定的线程池,它的线程都原创 2017-03-14 15:17:15 · 410 阅读 · 0 评论