![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JavaSE
文章平均质量分 82
Xucc_
这个作者很懒,什么都没留下…
展开
-
Java break、continue实现goto
尽管goto是Java的一个保留字,但是并没哟阻碍语言中得到正式的使用。虽然goto声名狼藉,但有的时候使用goto进行跳转,能达到意想不到的好处。Java使用continue和break可以实现跳转的效果,但是两者有一些不同。continue实现gotocontinue向上跳转到标签处,继续下次循环。 public static void main(String[] args) thro...原创 2019-07-21 16:52:56 · 435 阅读 · 0 评论 -
Java JVM 4-GC对象判断算法:引用计数法,可达性分析算法
因为JVM的GC(垃圾回收)机制,所以使java程序员不用再受内存分配及内存回收的烦恼(其实还是会有这些烦恼,我们以后再进行探讨),而可以将注意力集中在程序的设计上,虽然我们不用再关心这些过程,但是GC的垃圾回收我们还是要了解一下的。对于内存的六大区域,对于线程私有的程序计数器,java虚拟机栈,本地方法栈三个区域,它们的生命周期都是随线程开始而生,线程结束而灭,并且这三个区域的内存分配和回收...原创 2018-06-16 22:14:20 · 2131 阅读 · 0 评论 -
Java JVM 3-内存区域OOM异常以及和StackOverFlowError的区别
上一节我们讲过,内存区域除了线程私有的程序计数器区之外,都存在OOM。1. Java虚拟机栈和本地方法栈溢出 关于虚拟机栈会产生的两种异常:如果线程请求的栈深度大于虚拟机所允许的最大深度,会抛出StackOverFlow内存溢出异常。如果虚拟机在拓展栈时无法申请到足够的内存空间,则会抛出OOM泄露异常。 栈上主要发生的是StackOverFlowError,所以我们对其...原创 2018-06-16 20:26:31 · 3484 阅读 · 1 评论 -
Java JVM 2-Java内存区域一探究竟
运行时数据区域 JVM会在执行Java程序的过程中把他管理的内存划分成若干个不同的数据区域。这些数据区域各有各的用处,各自区域内数据的创建与销毁相互独立,有的区域随着JVM进程启动而存在,有的区域则依赖用户线程的启动和结束而创建与销毁。 一般JVM将所管理的内存取悦分为六块,分别是:程序计算器Java虚拟机栈本地方法栈Java堆方法区运行时常量池 由于JVM的多线程是...原创 2018-06-16 16:52:46 · 1403 阅读 · 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 · 1319 阅读 · 0 评论 -
Java 集合类 4-集合类的另一把利器Map
集合类中除了Collection接口之外,还有另外一个非常重要的接口:Map。在接下来的的几篇文章里,将对Map接口进行介绍。 Map接口不像Collection接口下面还有两个子接口,Map只有四个重要的实现类,分别是:HashMapHashtableConcurrentHashMapTreeMap Map比起Collection最大的特点在于保存的元素。Collecti...原创 2018-06-02 15:01:17 · 1220 阅读 · 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 · 1288 阅读 · 0 评论 -
Java 集合类 3-深入浅出了解Collection的输出方式
Collection接口的子类由于覆写了toString()方法,所以直接打印就可以进行内容的输出,但是,这并不是它们的标准输出方式。JDK提供了四中输出集合的方式,分别是:IteratorListIteratorEnumerationforeach1. Iterator迭代器输出 在JDK1.5之前,Collection接口中定义有iterator()方法,通过此方法可以...原创 2018-06-01 09:07:00 · 2135 阅读 · 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 · 1235 阅读 · 0 评论 -
Java IO 7-序列化反序列化与transient关键字
序列化这个概念在所有的项目开发中都有。1. 序列化概念 对象序列化指的是:将内存中保存的对象变为二进制数据流的形式进行传输,或者是将这个二进制数据流保存在文本中。 但这并不意味着所有类的对象都需要被序列化,严格来讲,需要被序列化的类对象往往需要传输使用,同时这个类必须实现java.io.Serializable接口。 Serializable接口是一个标识接口,里面没...原创 2018-05-24 00:01:05 · 1357 阅读 · 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 · 1276 阅读 · 0 评论 -
Java IO 5-打印流
使用过 OutputStream 输出流的一定会有一种莫名的难受,因为每次给文件中输出内容都得先进行一次额外加工,输出二进制文件还好说,字节输出流直接走,但是IO操作总不能只和二进制文件打交道吧,想输出一个字符串,还得 getBytes() 一下,真是太麻烦了。 但其实,JDK为了解决 OutputStream 这一缺陷,提出了打印流这个概念,即像打印一样将内容打印到文件里。1....原创 2018-05-23 20:56:10 · 1183 阅读 · 0 评论 -
Java IO 4-Java实现的文件拷贝
利用Java的InputStream,OutputStream输入输出流我们可以自己实现文件拷贝操作。 对JavaIO流操作不清楚的可以参考 Java IO 2-字节流与字符流 文件拷贝的核心思想其实就是打开一个源文件的流,然后读取文件中的数据,在通过一个输出流,将它输出到指定的目录中。 接下来,我们来实现这个功能。import java.io.File;impor...原创 2018-05-23 19:59:05 · 1344 阅读 · 0 评论 -
Java IO 3-字节流与字符流的区别
java以流的形式操纵IO,又将流分为两种:字节流与字符流,对JavaIO流操作不清楚的可以参考 Java IO 2-字节流与字符流那字节流与字符流之间又有什么区别呢区别字节流用于操作文件数据,网络传输等场景,而字符流适用于与字符串,中文有关的内容处理,因为Writer/Reader两个抽象类对字符的支持比较好。除了这些,字符输出流写数据时是先将数据写入缓冲区,待字符...原创 2018-05-23 19:58:10 · 2989 阅读 · 1 评论 -
Java IO 2-字节流与字符流
FILE类只参与文件的创建删除等操作,而不对文件本身内容进行修改。如果要处理文件内容,就需要使用流来进行操作。1. 流的分类流分为输入流与输出流。 输入输出流又分为字节流与字符流,所以总共加起来有如下四种流:InputStream: 字节输入流Reader: 字符输入流OutputStream: 字节输出流Writer: 字符输出流 四者之间的关系如下:...原创 2018-05-22 23:01:40 · 1520 阅读 · 0 评论 -
Java JVM 5-对象的四大引用方式
在JDK1.2以前,Java对引用的定义是 : 如果引用类型的数据中存储的数值代表的是另一块内存的起始地址,就称这块内存代表着一个引用。这种定义有些狭隘,一个对象在这种定义下只有被引用或者没有被引用两种状态。我们希望能描述这一类对象 : 当内存空间还足够时,则能保存在内存中;如果内存空间在进行垃圾回收后还是非常紧张,则可以抛弃这些对象。很多系统中的缓存对象都符合这样的场景。...原创 2018-06-16 22:15:35 · 1312 阅读 · 0 评论 -
Java JVM 6-finalize()方法
前面我们讲到,GC在垃圾回收之前先要判断对象是否’死亡’,然后将’死亡’的对象在进行内存回收。 其实,即使在可达性分析算法中不可达的对象,也并非”非死不可”的,这时候他们暂时处在”缓刑”阶段。 要宣告一个对象的真正死亡,至少要经历两次标记过程。 如果对象在进行可达性分析之后发现没有与GC Roots相连接的引用链,那它将会被第一次标记并且进行一次筛选,筛选的条件是此对象是否有必要执行...原创 2018-06-16 22:17:16 · 1207 阅读 · 0 评论 -
Java JVM 7-方法区的回收
垃圾回收主要发生在线程共享的方法区和java堆中,本节主要介绍方法区的垃圾回收。 方法区是所有线程共享的一片内存区域。它存储的是已被JVM加载的类信息,常量,静态变量,编译器编译后的代码等数据。在JDK1.8以前的HotSpot虚拟机中,方法区也被称为永久代,1.8后被元空间取代。 方法区称为永久代并不意味这进入方法区就永久存在,方法区也会发生内存回收,此区域的内存回收主要是针对常量池的...原创 2018-06-17 11:36:36 · 2864 阅读 · 0 评论 -
Java 常见字符编码
1. GBK、GB2312 国标编码,GBK包含简体中文和繁体中文,而GBK只包含简体中文。这两种编码都是描述中文的编码。2. UNICODE java默认的16进制编码,可以描述世界上任何的文字信息,但是这个编码太庞大了,在网络传输的时候,会造成很大的负担。3. ISO8859-1 国际通用编码,是浏览器的默认编码,不支持中文。所以在前端开发,JavaWeb开发时,对于中文信...原创 2018-08-04 18:09:22 · 1541 阅读 · 0 评论 -
Java 深度解析clone方法
在实际编程过程中,我们常常要遇到这种情况:有一个对象 A,在某一时刻 A 中已经包含了一些有效值,此时可能会需要一个和 A 完全相同新对象 B,并且此后对 B 任何改动都不会影响到 A 中的值,也就是说, A 与 B 是两个独立的对象,但 B 的初始值是由 A 对象确定的。在 Java 语言中,用简单的赋值语句是不能满足这种需求的。因为java中的赋值语句采用的是值传递,即多个栈空间(属性名)引...原创 2018-07-30 08:53:04 · 1663 阅读 · 0 评论 -
Java String,StringBuffer和StringBuilder之间的区别
在Java中,任何字符串的都是String的对象,而且不可变更,在前面的文章里,我们对这点已经分析的很透彻了,String主要存在的是问题在于它不可变以及很容易就造成的效率低下和空间浪费。所以为了弥补String的缺点,又提出了StringBuffer和StringBuilder两个类。// Stirng类public final class String implements...原创 2018-07-29 23:02:39 · 1246 阅读 · 0 评论 -
Java String 4- String类的方法
String类是我们使用频率非常非常高的一个类,JDK也为我们提供了很多它的方法。1. String与字符 字符串就是一个字符数组,所以在String类里面支持有字符数组转换为字符串以及字符串变为字符的操作方法。// 构造方法,将字符数组转为字符串public String(char value[])/** * 构造方法,将字符数组中部分内容(下标offset开始,长...原创 2018-07-29 22:18:16 · 1587 阅读 · 0 评论 -
Java String 3-字符串为什么不能修改
String 被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。但是我们可以看到这样的代码:String str = "hello" ;str = str + " world" ;str += "!!!";System.out.println(str); // hello world!!! 通过”+”操作,str字符串不就变成了”hello world”了..原创 2018-07-29 21:13:09 · 4374 阅读 · 3 评论 -
Java String 2-字符串的比较方式
如果现在有两个int型变量,判断其相等可以使用”==”完成。int x = 10;int y = 10;System.out.println(x==y); // true 但是对于字符串的比较,就不能使用”==”了。”==”本身是进行数值比较的,如果现在用于对象比较,那么所比较的就应该是两个对象所保存的内存地址数值比 较,而并没有比较对象的内容,例如:String str1...原创 2018-07-29 14:19:59 · 1518 阅读 · 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 · 2444 阅读 · 0 评论 -
Java 深入理解接口定义
抽象类与普通类相比最大的特点是约定了子类的实现要求,但是抽象类存在单继承局限。如果要约定子类的实现要求并且避免单继承局限就需要使用接口。1. 接口概念 接口就是一个抽象方法和全局常量的集合,使用interface关键字进行定义。 子类如果要想使用接口,那么就必须使用implements关键字来实现接口,同时,一个子类可以实现多个接口,可以使用接口来实现多继承的概念,这也是接口相较...原创 2018-07-25 20:57:53 · 1182 阅读 · 0 评论 -
Java 剖析抽象类
抽象类只是在普通类的基础上扩充了一些抽象方法而已,所谓的抽象方法指的是只声明而未实现的方法(即没有方法体)。 所有抽象方法要求使用abstract关键字来定义,并且抽象方法所在的类也一定要使用abstract关键字来定义,表示抽象类。 由于抽象方法没有具体的方法实现,所以其抽象类是不能直接实例化的,使用抽象类的唯一途径是使用它的实现子类。 抽象类使用原则:所有抽象类必须有其实现...原创 2018-07-25 19:57:54 · 1271 阅读 · 0 评论 -
Java 面向对象三大特征
面向对象三大特征:封装性继承性多态性1. 封装性 所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的属性和方法只给特定的对象或其他类进行访问,即使用不同的访问统治权限使类被不同的对象访问,类中的方法属性也可单独使用访问控制权限进行修饰。 简而言之就是,使类对外部保持整洁,只留有主要的接口进行类业务逻辑的使用。 没有进行封装的类,如下所示:clas...原创 2018-07-24 21:24:59 · 1597 阅读 · 0 评论 -
Java阻塞队列
1. 阻塞队列 Java阻塞队列也是一种队列,只不过是实现了阻塞接口的队列。public interface BlockingQueue<E> extends Queue<E> 在java.util.concurrent包中提供了五中实现阻塞接口的阻塞队列。它们实质上就是特殊一点的队列,各自如下所示:ArrayBlockingQueuepub...原创 2018-07-24 16:05:40 · 1445 阅读 · 0 评论 -
Executors创建线程池
java中线程池的创建除了使用ThreadPoolExecutor之外,还可以使用Executors的静态方法来获取不同的线程池。Executors类 Executors利用工厂模式向我们提供了4种线程池静态实现方式。创建无大小限制的线程池public static ExecutorService newCachedThreadPool() { return ...原创 2018-07-23 23:19:48 · 1379 阅读 · 0 评论 -
线程池由浅入深-手动创建线程池
JDK提供了一个ThreadPoolExecutor类供我们来手动创建线程池,类定义如下:public class ThreadPoolExecutor extends AbstractExecutorService1. 构造方法 想要通过ThreadPoolExecutor类来创建线程池,实质上就是向其构造方法传入不同参数来获取不同的线程池。 看具体的构造方法之前,我...原创 2018-07-23 22:26:56 · 6925 阅读 · 3 评论 -
Java JVM 8-java堆新生代,老年代的划分及回收算法
Java堆(Java Heap)是JVM所管理的最大内存区域,也是所有线程共享的一块区域,在JVM启动时创建。 此内存区域存放的都是对象的实例和数组。JVM规范中说到:”所有的对象实例以及数组都要在堆上分配”。 Java堆是垃圾回收器管理的主要区域,百分之九十九的垃圾回收发生在Java堆,另外百分之一发生在方法区,因此又称之为”GC堆”。根据JVM规范规定的内容,Java堆可以处于物理上...原创 2018-06-17 11:39:21 · 25647 阅读 · 9 评论 -
Java 集合类 1-Collection接口以及List子接口
在实际开发中,数组的出现频率并不高,因为数组有一个很大的缺陷:数组长度固定。所以从JDK1.2开始,为了解决Java数组长度的问题,提供了动态的数组实现框架——Java集合类框架。 Java集合类框架实际上就是针对于数据结构的一种实现。 在Java的集合类库里面(java.util)包含了两个核心接口,Collection与Map。本次我们介绍的是Collection接口。...原创 2018-05-27 12:39:12 · 2087 阅读 · 0 评论 -
Java 集合类 9-Properties类
在Java中有一种存放配置信息的属性文件(资源文件)格式为:*.properties。在这种格式的文件里存放的是”key=value”键值对形式的数据。 而Properties就是Java用于操作properties文件的类。 因为properties文件保存的是”key-value”形式的数据,所以我们很容易就想到Map集合,因为Map集合的元素就是”key-value”形式的。 ...原创 2018-06-03 12:15:22 · 1215 阅读 · 0 评论 -
Java 多线程操作方法
对于 Java线程 基本概念还不太明白可以参考一下这篇文章 Java实现多线程的三种方式1. 线程命名与获取1.1 创建线程的时候设定名称 public Therad(Runnable target, String name); class MyThread implements Runnable { public void run() {...原创 2018-04-28 08:52:29 · 1214 阅读 · 0 评论 -
Java 多线程同步方式synchronized与Lock
在Java多线程处理数据时,我们经常会遇到出现异常数据的情况,先看下面的一段程序。// 模拟三个黄牛同时进行火车票的售卖class MyThread implements Runnable { // 车票总数 private int ticket = 10; @Override public void run() { // 当还有余票...原创 2018-05-12 17:53:26 · 1614 阅读 · 0 评论 -
Java 多线程全局锁与对象锁
我们看一个例子:class Demo { public synchronized void test() { System.out.println("test方法开始执行,当前线程为:"+Thread.currentThread().getName()); try { Thread.sleep(1000); ...原创 2018-05-12 17:49:04 · 10842 阅读 · 5 评论 -
Java实现多线程的三板斧
Java一大特色就是支持多线程编程。 可以使用三种方式实现多线程,分别是:继承Thread类实现Runnable接口实现Callable接口 1. 继承 Thread 类 java.lang.Thread 是一个线程操作的核心类。1.1 创建线程 新建一个线程最简单的方法就是直接继承 Thread类,然后再覆写该类中的 run()方法,run方...原创 2018-04-27 10:47:20 · 1826 阅读 · 0 评论 -
Java泛型,通配符与泛型擦除
面向对象的一个重要目标是对代码重用的支持。支持这个目标的一个重要机制就是 JDK1.5 引入的泛型机制(JDK1.5 引入的另外两大常用新特性为注解与枚举)。 如果除去对象的基本类型外,实现方法是相同的,那么我们就可以用泛型实现来描述这种基本的功能。例如,可以编写一个方法,将由一些项组成的数组排序,方法的逻辑与被排序的对象的类型无关,此时我们就可以使用泛型方法。 而在 JDK1.5...原创 2018-04-26 18:17:15 · 1956 阅读 · 0 评论 -
Java 包装类是什么
包装类就是将基本的数据类型以及一些辅助方法封装到类中,例如class IntDemo { private int num; public IntDemo(int num) { this.num = num; } public int intValue() { return this.num; }}Java提...原创 2018-04-26 14:29:49 · 43204 阅读 · 2 评论