JavaSE从零开始
文章平均质量分 82
从零开始学习JavaSE
Xucc_
这个作者很懒,什么都没留下…
展开
-
Java String 2-字符串的比较方式
如果现在有两个int型变量,判断其相等可以使用”==”完成。int x = 10;int y = 10;System.out.println(x==y); // true 但是对于字符串的比较,就不能使用”==”了。”==”本身是进行数值比较的,如果现在用于对象比较,那么所比较的就应该是两个对象所保存的内存地址数值比 较,而并没有比较对象的内容,例如:String str1...原创 2018-07-29 14:19:59 · 1605 阅读 · 0 评论 -
Java String类实例化方式以及入池操作
String类型是java中一种很重要的数据类型,但实际上,String是一个类,位于java.lang包下,定义如下:public final class String implements java.io.Serializable, Comparable<String>, CharSequence java.lang包存放着系统常用的基础类,例如String,...原创 2018-07-29 14:02:15 · 2543 阅读 · 0 评论 -
Java 深入理解接口定义
抽象类与普通类相比最大的特点是约定了子类的实现要求,但是抽象类存在单继承局限。如果要约定子类的实现要求并且避免单继承局限就需要使用接口。1. 接口概念 接口就是一个抽象方法和全局常量的集合,使用interface关键字进行定义。 子类如果要想使用接口,那么就必须使用implements关键字来实现接口,同时,一个子类可以实现多个接口,可以使用接口来实现多继承的概念,这也是接口相较...原创 2018-07-25 20:57:53 · 1235 阅读 · 0 评论 -
Java 剖析抽象类
抽象类只是在普通类的基础上扩充了一些抽象方法而已,所谓的抽象方法指的是只声明而未实现的方法(即没有方法体)。 所有抽象方法要求使用abstract关键字来定义,并且抽象方法所在的类也一定要使用abstract关键字来定义,表示抽象类。 由于抽象方法没有具体的方法实现,所以其抽象类是不能直接实例化的,使用抽象类的唯一途径是使用它的实现子类。 抽象类使用原则:所有抽象类必须有其实现...原创 2018-07-25 19:57:54 · 1302 阅读 · 0 评论 -
Java 面向对象三大特征
面向对象三大特征:封装性继承性多态性1. 封装性 所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的属性和方法只给特定的对象或其他类进行访问,即使用不同的访问统治权限使类被不同的对象访问,类中的方法属性也可单独使用访问控制权限进行修饰。 简而言之就是,使类对外部保持整洁,只留有主要的接口进行类业务逻辑的使用。 没有进行封装的类,如下所示:clas...原创 2018-07-24 21:24:59 · 1673 阅读 · 0 评论 -
Java阻塞队列
1. 阻塞队列 Java阻塞队列也是一种队列,只不过是实现了阻塞接口的队列。public interface BlockingQueue<E> extends Queue<E> 在java.util.concurrent包中提供了五中实现阻塞接口的阻塞队列。它们实质上就是特殊一点的队列,各自如下所示:ArrayBlockingQueuepub...原创 2018-07-24 16:05:40 · 1509 阅读 · 0 评论 -
Executors创建线程池
java中线程池的创建除了使用ThreadPoolExecutor之外,还可以使用Executors的静态方法来获取不同的线程池。Executors类 Executors利用工厂模式向我们提供了4种线程池静态实现方式。创建无大小限制的线程池public static ExecutorService newCachedThreadPool() { return ...原创 2018-07-23 23:19:48 · 1434 阅读 · 0 评论 -
线程池由浅入深-手动创建线程池
JDK提供了一个ThreadPoolExecutor类供我们来手动创建线程池,类定义如下:public class ThreadPoolExecutor extends AbstractExecutorService1. 构造方法 想要通过ThreadPoolExecutor类来创建线程池,实质上就是向其构造方法传入不同参数来获取不同的线程池。 看具体的构造方法之前,我...原创 2018-07-23 22:26:56 · 6993 阅读 · 3 评论 -
Java JVM 8-java堆新生代,老年代的划分及回收算法
Java堆(Java Heap)是JVM所管理的最大内存区域,也是所有线程共享的一块区域,在JVM启动时创建。 此内存区域存放的都是对象的实例和数组。JVM规范中说到:”所有的对象实例以及数组都要在堆上分配”。 Java堆是垃圾回收器管理的主要区域,百分之九十九的垃圾回收发生在Java堆,另外百分之一发生在方法区,因此又称之为”GC堆”。根据JVM规范规定的内容,Java堆可以处于物理上...原创 2018-06-17 11:39:21 · 25872 阅读 · 9 评论 -
Java JVM 7-方法区的回收
垃圾回收主要发生在线程共享的方法区和java堆中,本节主要介绍方法区的垃圾回收。 方法区是所有线程共享的一片内存区域。它存储的是已被JVM加载的类信息,常量,静态变量,编译器编译后的代码等数据。在JDK1.8以前的HotSpot虚拟机中,方法区也被称为永久代,1.8后被元空间取代。 方法区称为永久代并不意味这进入方法区就永久存在,方法区也会发生内存回收,此区域的内存回收主要是针对常量池的...原创 2018-06-17 11:36:36 · 2909 阅读 · 0 评论 -
Java JVM 6-finalize()方法
前面我们讲到,GC在垃圾回收之前先要判断对象是否’死亡’,然后将’死亡’的对象在进行内存回收。 其实,即使在可达性分析算法中不可达的对象,也并非”非死不可”的,这时候他们暂时处在”缓刑”阶段。 要宣告一个对象的真正死亡,至少要经历两次标记过程。 如果对象在进行可达性分析之后发现没有与GC Roots相连接的引用链,那它将会被第一次标记并且进行一次筛选,筛选的条件是此对象是否有必要执行...原创 2018-06-16 22:17:16 · 1270 阅读 · 0 评论 -
Java JVM 5-对象的四大引用方式
在JDK1.2以前,Java对引用的定义是 : 如果引用类型的数据中存储的数值代表的是另一块内存的起始地址,就称这块内存代表着一个引用。这种定义有些狭隘,一个对象在这种定义下只有被引用或者没有被引用两种状态。我们希望能描述这一类对象 : 当内存空间还足够时,则能保存在内存中;如果内存空间在进行垃圾回收后还是非常紧张,则可以抛弃这些对象。很多系统中的缓存对象都符合这样的场景。...原创 2018-06-16 22:15:35 · 1368 阅读 · 0 评论 -
Java JVM 4-GC对象判断算法:引用计数法,可达性分析算法
因为JVM的GC(垃圾回收)机制,所以使java程序员不用再受内存分配及内存回收的烦恼(其实还是会有这些烦恼,我们以后再进行探讨),而可以将注意力集中在程序的设计上,虽然我们不用再关心这些过程,但是GC的垃圾回收我们还是要了解一下的。对于内存的六大区域,对于线程私有的程序计数器,java虚拟机栈,本地方法栈三个区域,它们的生命周期都是随线程开始而生,线程结束而灭,并且这三个区域的内存分配和回收...原创 2018-06-16 22:14:20 · 2199 阅读 · 0 评论 -
Java JVM 3-内存区域OOM异常以及和StackOverFlowError的区别
上一节我们讲过,内存区域除了线程私有的程序计数器区之外,都存在OOM。1. Java虚拟机栈和本地方法栈溢出 关于虚拟机栈会产生的两种异常:如果线程请求的栈深度大于虚拟机所允许的最大深度,会抛出StackOverFlow内存溢出异常。如果虚拟机在拓展栈时无法申请到足够的内存空间,则会抛出OOM泄露异常。 栈上主要发生的是StackOverFlowError,所以我们对其...原创 2018-06-16 20:26:31 · 3547 阅读 · 1 评论 -
Java JVM 2-Java内存区域一探究竟
运行时数据区域 JVM会在执行Java程序的过程中把他管理的内存划分成若干个不同的数据区域。这些数据区域各有各的用处,各自区域内数据的创建与销毁相互独立,有的区域随着JVM进程启动而存在,有的区域则依赖用户线程的启动和结束而创建与销毁。 一般JVM将所管理的内存取悦分为六块,分别是:程序计算器Java虚拟机栈本地方法栈Java堆方法区运行时常量池 由于JVM的多线程是...原创 2018-06-16 16:52:46 · 1467 阅读 · 0 评论 -
Java JVM 1-JVM是什么
1. JVM概念 JVM是Java Virtual Machine的接卸,意为Java虚拟机。 虚拟机是指通过软件模拟的具有完整硬件功能的,运行在一个完全隔离的环境中的完整计算机系统,常见的虚拟机有JVM,VMwawe,Virtual Box等。虽然都是虚拟机,但是JVM比起其它虚拟机又有不同。 像VMwawe,Virtual Box虚拟机,是通过软件模拟物理CPU的指令集,物理系统中...原创 2018-06-16 15:37:50 · 1324 阅读 · 0 评论 -
Java 集合类 9-Properties类
在Java中有一种存放配置信息的属性文件(资源文件)格式为:*.properties。在这种格式的文件里存放的是”key=value”键值对形式的数据。 而Properties就是Java用于操作properties文件的类。 因为properties文件保存的是”key-value”形式的数据,所以我们很容易就想到Map集合,因为Map集合的元素就是”key-value”形式的。 ...原创 2018-06-03 12:15:22 · 1248 阅读 · 0 评论 -
Java 集合类 8-栈,队列
1. 栈 栈是一种先进后出的数据结构 浏览器的后退、编辑器的撤销、安卓Activity的返回等都属于栈的功能。 在Java集合中提供有Stack类,这个类是集合类Vector的子类。需要注意的是,关于栈的方法并不是Vector类或者List接口给出的,而是Stack类自己定义的。 接下来介绍栈的三个常用方法。// 入栈public E push(E item) { /...原创 2018-06-03 11:02:52 · 4783 阅读 · 0 评论 -
Java 集合类 7-Map子类的输出方式
Map类的四个子类因为都覆写了toString()方法,所以我们直接使用println进行打印是可以看到类中数据的,但是,这并不是Map的标准输出方式。 与Collection子类四种输出方式(Java 集合类 3-深入浅出了解Collection的输出方式)比起,Map的输出方式略显单薄,只有iterator一种。 由于Map类并没有继承Iterable接口,所以直接使用Map是无法进...原创 2018-06-03 10:18:42 · 1492 阅读 · 0 评论 -
Java 集合类 6-ConcurrentHashMap,TreeMap类
1. ConcurrentHashMap类 ConcurrentHashMap是JDK1.5引入的一个集合类,它继承了Map接口,与Map接口的其它子类一样,ConcurrentHashMap没有对其方法进行扩充,但是,在底层却进行了天翻地覆的改变。 上一节介绍了的HashMap和Hashtable子类(Java 集合类 5-HashMap,Hashtable类),或多或少都有一些缺点,例...原创 2018-06-03 09:55:35 · 1739 阅读 · 0 评论 -
Java 集合类 5-HashMap,Hashtable类
HashMap和Hashtable是Map接口的两个实现类,它们对Map接口的方法没有进行扩充。 关于Map接口大家可以参考: Java 集合类 4-集合类的另一把利器Map1. HashMap HashMap是Map接口中出场率很高的一个实现类。 可以存放存放null值,key值不允许重复,如果key值重复,会将原本的key-value对象更新为重复的key-va...原创 2018-06-02 15:51:43 · 1359 阅读 · 0 评论 -
Java 集合类 4-集合类的另一把利器Map
集合类中除了Collection接口之外,还有另外一个非常重要的接口:Map。在接下来的的几篇文章里,将对Map接口进行介绍。 Map接口不像Collection接口下面还有两个子接口,Map只有四个重要的实现类,分别是:HashMapHashtableConcurrentHashMapTreeMap Map比起Collection最大的特点在于保存的元素。Collecti...原创 2018-06-02 15:01:17 · 1260 阅读 · 0 评论 -
Java 集合类 3-深入浅出了解Collection的输出方式
Collection接口的子类由于覆写了toString()方法,所以直接打印就可以进行内容的输出,但是,这并不是它们的标准输出方式。JDK提供了四中输出集合的方式,分别是:IteratorListIteratorEnumerationforeach1. Iterator迭代器输出 在JDK1.5之前,Collection接口中定义有iterator()方法,通过此方法可以...原创 2018-06-01 09:07:00 · 2236 阅读 · 0 评论 -
Java 集合类 2-Set一家人
1. Set接口 Set与List同为Collection的继承子接口最大不同就是Set接口中的内容是不允许重复的。当添加重复元素时,不会报错,但是这个添加操作会被忽略。 而且Set并没有对Collection接口进行方法的扩充。 Set有两个实现子类,分别是HashSet和TreeSet,继承关系如下:1.1 HashSet HashSet定义如下:publi...原创 2018-05-31 23:06:21 · 1276 阅读 · 0 评论 -
Java 集合类 1-Collection接口以及List子接口
在实际开发中,数组的出现频率并不高,因为数组有一个很大的缺陷:数组长度固定。所以从JDK1.2开始,为了解决Java数组长度的问题,提供了动态的数组实现框架——Java集合类框架。 Java集合类框架实际上就是针对于数据结构的一种实现。 在Java的集合类库里面(java.util)包含了两个核心接口,Collection与Map。本次我们介绍的是Collection接口。...原创 2018-05-27 12:39:12 · 2184 阅读 · 0 评论 -
Java IO 7-序列化反序列化与transient关键字
序列化这个概念在所有的项目开发中都有。1. 序列化概念 对象序列化指的是:将内存中保存的对象变为二进制数据流的形式进行传输,或者是将这个二进制数据流保存在文本中。 但这并不意味着所有类的对象都需要被序列化,严格来讲,需要被序列化的类对象往往需要传输使用,同时这个类必须实现java.io.Serializable接口。 Serializable接口是一个标识接口,里面没...原创 2018-05-24 00:01:05 · 1413 阅读 · 0 评论 -
Java IO 6- BufferedReader,Scanner键盘输入和err,in,out
err/in/out 和C/C++一样,Java也有 err/in/out 的概念,Java中是由系统类 System类 给出的。 含义如下:// 错误输出public static final PrintStream err = null;// 标准输入(键盘)public static final InputStream in = null;// 标准输出(显示...原创 2018-05-23 22:45:31 · 1331 阅读 · 0 评论 -
Java IO 5-打印流
使用过 OutputStream 输出流的一定会有一种莫名的难受,因为每次给文件中输出内容都得先进行一次额外加工,输出二进制文件还好说,字节输出流直接走,但是IO操作总不能只和二进制文件打交道吧,想输出一个字符串,还得 getBytes() 一下,真是太麻烦了。 但其实,JDK为了解决 OutputStream 这一缺陷,提出了打印流这个概念,即像打印一样将内容打印到文件里。1....原创 2018-05-23 20:56:10 · 1218 阅读 · 0 评论 -
Java IO 4-Java实现的文件拷贝
利用Java的InputStream,OutputStream输入输出流我们可以自己实现文件拷贝操作。 对JavaIO流操作不清楚的可以参考 Java IO 2-字节流与字符流 文件拷贝的核心思想其实就是打开一个源文件的流,然后读取文件中的数据,在通过一个输出流,将它输出到指定的目录中。 接下来,我们来实现这个功能。import java.io.File;impor...原创 2018-05-23 19:59:05 · 1384 阅读 · 0 评论 -
Java IO 3-字节流与字符流的区别
java以流的形式操纵IO,又将流分为两种:字节流与字符流,对JavaIO流操作不清楚的可以参考 Java IO 2-字节流与字符流那字节流与字符流之间又有什么区别呢区别字节流用于操作文件数据,网络传输等场景,而字符流适用于与字符串,中文有关的内容处理,因为Writer/Reader两个抽象类对字符的支持比较好。除了这些,字符输出流写数据时是先将数据写入缓冲区,待字符...原创 2018-05-23 19:58:10 · 3089 阅读 · 1 评论 -
Java IO 2-字节流与字符流
FILE类只参与文件的创建删除等操作,而不对文件本身内容进行修改。如果要处理文件内容,就需要使用流来进行操作。1. 流的分类流分为输入流与输出流。 输入输出流又分为字节流与字符流,所以总共加起来有如下四种流:InputStream: 字节输入流Reader: 字符输入流OutputStream: 字节输出流Writer: 字符输出流 四者之间的关系如下:...原创 2018-05-22 23:01:40 · 1591 阅读 · 0 评论 -
Java IO 1-IO概念与FILE文件操作类
1. IO概念JavaIO操作的核心是五个抽象类和一个接口,所有的IO操作其实都是在操作这些类和接口,他们分别是: - FILE文件操作类 - OutputStream字节输出流 - InputStream字节输入流 - Reader字符输入流 - Writer字符输出流 - Serializable序列化标识接口 首先介绍一下FILE文件操作类。2. FILE文件操...原创 2018-05-22 17:51:27 · 1344 阅读 · 0 评论 -
Java ClassLoader类加载器,自定义类加载器以及双亲委派模型
在Java反射里,我们频繁接触到Class类,它是描述类信息的类,而Class类中的forName()方法可以根据一个类的全名称得到类的Class对象,其底层原理其实是:根据ClassPath配置的路径进行类的加载。 一般情况下,我们只需要使用JDK提供的默认类加载器,不用关心类加载器。但是如果我们的类加载路径是网络,文件,这个时候我们就得了解类加载器,也就是ClassLoader的作用...原创 2018-05-22 13:15:20 · 1946 阅读 · 0 评论 -
Java 反射6-动态代理模式
动态代理 动态代理模式的核心特点:一个代理类可以代理所有需要被代理的接口的子类对象,如下所示: N个接口, N+1个类, 其中 N 个真是业务类,1个代理类(在运行时动态获取当前要代理的接口)。 所以要使用动态代理,那么其代理类类特点必须一致(代理流程一致)。在Java动态代理中,有两个重要的接口和类,首先我们来熟悉一下。 - InvocationHandler接口...原创 2018-05-22 16:11:15 · 1344 阅读 · 0 评论 -
Java 反射5-基础代理模式
1. 代理设计模式概念 两个子类共同实现一个接口,其中一个子类负责真实业务实现,另外一个子类辅助真实业务的完成。就像战场上的狙击手都配有一名观察员,狙击手负责狙杀敌人,观察员负责辅助狙击手完成任务,两人都是为了狙杀敌人这个任务而生。 代理设计模式一般都与工厂设计模式相配合使用,对于工厂设计模式还有疑惑的可以参考: Java 反射3-简单工厂模式// 业务接口inte...原创 2018-05-22 16:20:10 · 1356 阅读 · 0 评论 -
Java 反射4-反射与单级VO操作
我们在开发过程中,经常会遇到这样的场景:class Person { private String name; private String gender; public String getName() { return name; } public void setName(String name) { thi...原创 2018-05-22 11:06:54 · 1554 阅读 · 0 评论 -
Java 反射3-简单工厂模式
1. 工厂设计模式 在程序设计的时候,我们要自始至终本着一个原则:主方法是客户端,对于程序的修改不应该影响客户端。 所以我们应该尽可能地将解决问题的代码不要放在主方法中,而是分类分成不同的模块。 观察下面的代码:// 定义一个接口,接口里只有一个抽象方法interface IFruit { public void eat();}// 定义一个实现类cla...原创 2018-05-22 09:43:05 · 1341 阅读 · 2 评论 -
Java 反射2-反射核心类Constructor、Method、Field以及相关操作
利用反射可以做出一个对象具备的所有操作行为,这一切的操作核心是基于 Object类。 对于反射基本概念还有疑惑可以参考: Java 反射1-反射概念,Class类概念,反射创建对象实例化1. 反射取得类信息 通过 Object类 的方法,取得类的信息。1.1 取得类的包名称// 取得当前Class对象包信息public Package getPack...原创 2018-05-22 09:40:46 · 1891 阅读 · 0 评论 -
Java 反射1-反射概念,Class类概念,反射创建对象实例化
反射是Java中至关重要的一个概念,我们必须要对它进行掌握。1. 反射概念 反射指的是对对象的反向处理操作。所谓反向指的是根据对象来获得对象的来源信息(对象类的来源信息 包名.类名)。 为了区分正向和反向,我们看下面这个正向例子。// 1. 我们想要创建Date类的对象实例化,首先要引入定义Data类的包import java.util.Date;public...原创 2018-05-21 17:18:13 · 1562 阅读 · 0 评论 -
Java 线程池
JDK1.5之引入了了一个关于并发访问的包 。 java.util.concurrent,对于线程池操作的类和相关接口就定义在此包 中,这里面有两个核心的接口:关于普通线程池:public interface ExecutorService extends Executor关于调度线程池:public interface ScheduledExecutorService extend...原创 2018-05-21 15:54:51 · 1141 阅读 · 0 评论