
Java基础
文章平均质量分 86
Alone枫叶
世界上有10种人,一种懂二进制,一种不懂二进制。
展开
-
内部类
在Java中内部类主要分为成员内部类、局部内部类、匿名内部类、静态内部类。为什么要使用内部类? 在《Think in java》中有这样一句话:使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。 在我们程序设计中有时候会存在一些使用接口很难解决的问题,原创 2017-09-21 23:40:27 · 187 阅读 · 0 评论 -
HashMap工作原理和扩容机制
HashMapHashMap是Java中十分常用的一种数据结构,java7中HashMap由数组+链表构成,java8引入了红黑树对HashMap进行了优化。工作原理HashMap内部实现是一个桶数组,每个桶中存放着一个单链表的头结点。其中每个结点存储的是一个键值对整体(Entry),HashMap采用拉链法解决哈希冲突HashMap提供两个重要的基本操作,put(K, V)和...原创 2019-04-16 22:19:35 · 276 阅读 · 0 评论 -
Java动态代理详解
静态代理和动态代理我们根据加载被代理类的时机不同,将代理分为静态代理和动态代理。如果我们在代码编译时就确定了被代理的类是哪一个,那么就可以直接使用静态代理;如果不能确定,那么可以使用类的动态加载机制,在代码运行期间加载被代理的类这就是动态代理,比如RPC框架和Spring AOP机制。动态代理我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,而AOP的原理就是java...原创 2019-03-31 21:15:19 · 344 阅读 · 0 评论 -
乐观锁与悲观锁
什么是乐观锁与悲观锁简单来说,乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中的人总是想着事情往坏的方向发展。各有各的优点悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞到知道它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统关系型数据库中就用到了很...原创 2019-03-10 12:35:21 · 157 阅读 · 0 评论 -
深入理解volatile关键字
Volatile关键字在了解了JMM之后,就可以深入了解以下volatile关键字的工作机制了。volatile关键字的两层语义一旦一个共享变量(类的成员变量,类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这个新值对其他线程来说是立即可见的(volatile的特殊规则保证了新值能立即同步...原创 2019-03-09 14:00:36 · 270 阅读 · 0 评论 -
浅析Java内存模型JMM
Java内存模型在并发编程中,多个线程之间采用什么机制通信(信息交换),什么机制进行数据的同步?为了解决这些疑惑,就很有必要了解java的内存模型,在Java语言中,采用的是共享内存模型来实现多线程之间的信息交换和数据同步的。线程之间通过共享程序公共的状态,通过读-写内存中公共状态的方式来进行隐式的通信。同步指的是程序在控制多个线程之间执行程序的相对顺序的机制,在共享内存模型中,同步是...原创 2019-03-09 11:48:26 · 321 阅读 · 0 评论 -
File类
File类(File类的概述和构造方法)File类的概述File更应该叫做一个路径文件路径或者文件夹路径路径分为绝对路径和相对路径绝对路径是一个固定的路径,从盘符开始相对路径相对于某个位置,在eclipse下是指当前项目下,在dos下构造方法File(String pathname):根据一个路径得到File对象File(String parent, String child):...原创 2019-01-13 19:52:57 · 169 阅读 · 0 评论 -
IO流(字符流)
IO流(字符流)基本概念字符流就是可以直接读写字符的IO流,字符流读取字符时,首先读取到的字节数据,然后转为字符,如果要写出字符,会把字符转为字节再写出什么情况下使用字符流字符流也可以拷贝文件,但不推荐使用,因为读取是会把字节转为字符,写出时还要把字符转转回为字节程序需要读取一段文本,或者需要写出一段文本的时候可以使用字符流读取的时候是按照字符的大小读取的,不会出现半个中文的情况写出...原创 2019-01-13 19:44:16 · 230 阅读 · 0 评论 -
IO流(字节流)
IO流(字节流)基本概念IO流用来处理设备之间的数据传输,Java对数据的操作是通过流的方式,Java用于操作流的类都在IO包中,流按照流向分为:输入流、输出流按照操作类型分类可分为:1.字节流:字节流可以操作任何字符,因为在计算机中任何数据都是以字节的形式存储的2.字符流只能操作纯字符数据,比较方便IO流的抽象父类1.字节流的抽象父类InputStreamOutputStrea...原创 2019-01-13 19:43:45 · 257 阅读 · 0 评论 -
集合
一、集合与数组 数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用。 集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用。二、层次关系Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。但是却让其被继承产生了两个接口,就是Set和L原创 2017-09-21 23:52:08 · 216 阅读 · 0 评论 -
异常
一、JAVA异常 异常指不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程。Java通 过API中Throwable类的众多子类描述各种不同的异常。因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的 错误条件。当条件生成时,错误将引发异常。 Java原创 2017-09-21 23:50:57 · 213 阅读 · 0 评论 -
线程——通信与线程池
1.传统的线程通信 使用synchronized修饰的同步方法或者同步代码块,则要在方法体重直接调用wait()、notify()和notifyAll()3个方法。其中: wait():使当前线程等待,知道其他线程调用该同步监视器的notify()或者notifyAll()方法。 notify():唤醒在此同步监视器上等待的单个线程。原创 2017-09-21 23:49:12 · 340 阅读 · 0 评论 -
线程——同步与死锁
为何要使用同步? java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查), 将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用, 从而保证了该变量的唯一性和准确性。1.同步方法 即有synchronized关键字修饰的方法。 由于java的每个对原创 2017-09-21 23:47:48 · 522 阅读 · 0 评论 -
线程——生命周期
线程状态转换下面的这个图非常重要!你如果看懂了这个图,那么对于多线程的理解将会更加深刻!一、运行和阻塞状态 当发生如下情况时,线程将会进入阻塞状态 1.线程调用sleep()方法主动放弃所占用的处理器资源。 2.线程调用了一个阻塞式IO方法,在该方法返回之前,该线程被阻塞。 3.线程试图获得一个同步监视器,但该同步监视器正原创 2017-09-21 23:43:57 · 225 阅读 · 0 评论 -
线程——创建和启动
一、线程的创建和启动 1)继承Thread类创建线程类 1.定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要的完成的任务。因此run()方法称为线程执行体。 2.创建Thread子类的实例,即创建线程对象。 3.调用线程对象的start()方法来启动该线程。//通过...原创 2017-09-21 23:42:37 · 362 阅读 · 0 评论 -
抽象类与接口
深入理解Java的接口和抽象类 在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。一、抽象类 在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为:abstract void fun(); 抽象原创 2017-09-21 23:41:16 · 217 阅读 · 0 评论 -
java动态代理中的invoke方法是如何被自动调用的(转)
一、动态代理与静态代理的区别。(1)Proxy类的代码被固定下来,不会因为业务的逐渐庞大而庞大;(2)可以实现AOP编程,这是静态代理无法实现的;(3)解耦,如果用在web业务下,可以实现数据层和业务层的分离。(4)动态代理的优势就是实现无侵入式的代码扩展。 静态代理这个模式本身有个大问题,如果类方法数量越来越多的时候,代理类的代码量是十分庞大的。所以引入动态代理来解决此类...转载 2019-06-12 21:50:02 · 1085 阅读 · 0 评论