随笔分类 -  java学习笔记

记录一些在java学习过程中总结的一些笔记。
摘要:所谓的线程死锁,是指在多线程运行的过程中,线程1拥有锁a,而需要锁b来继续执行, 而此时,线程2拥有锁b而需要锁a来继续执行,那么此时会形成死锁,两个线程会同时等待。 在编程的过程中应尽量的避免线程死锁。 关于线程锁可以查看:线程锁详解 有时在面试中会要求写出一个死锁的程序演示,如下: 1 //写一 阅读全文
posted @ 2017-09-01 21:30 赵安之 阅读(174) 评论(0) 推荐(0)
摘要:首先回顾一下单利设计模式: 单利设计模式是通过某种方式使某个类只能创建一个对象实例供外界使用。 单利设计模式分为懒汉式和饿汉式: 饿汉式是线程安全的: 1 //饿汉式单利设计模式: 2 class Single{ 3 private static final Single single = new 阅读全文
posted @ 2017-09-01 21:29 赵安之 阅读(925) 评论(1) 推荐(0)
摘要:线程在执行的过程中,容易出现安全问题,除了线程死锁外,所谓的安全问题就是: 对需要同步的变量进行多线程操作时,会使变量的判定发生问题,比如卖票的问题可能出现0票或者-1,-2的情况, 那么我们就需要一个锁来对需要同步的变量或者方法进行标记,指示: 该变量或方法在某个时刻或时间段只能被一个线程所执行 阅读全文
posted @ 2017-09-01 21:28 赵安之 阅读(229) 评论(0) 推荐(0)
摘要:创建线程有两种方法: 1、继承Thread类 2、实现Runnable接口 为什么还有第二种方法? 因为有的时候某个类已经有了父类就不能在继承线程类,那么为了解决单继承的局限性 就可以在实现Runnable接口来被线程调用。 创建线程的第一种方法:继承Thread类: 步骤: 1、创建类继承Thre 阅读全文
posted @ 2017-09-01 21:26 赵安之 阅读(167) 评论(0) 推荐(0)
摘要:java语言中,数组对象并不是从某个类实例化出来的,而是JVM动态创建的.对数组对象使用如下操作,可看到数组对应的Class对象.通过RTTI(Run-Time Type Information)可直接检查数组的运行时类型,以及它的签名.下方的 “[L”就是int[]/Integer[] 的运行类型 阅读全文
posted @ 2017-09-01 21:24 赵安之 阅读(1158) 评论(1) 推荐(0)
摘要:反射: 1.获取对应的class对象 方式1:★ Class clazz=Class.forName("全限定名"); 方式2: Class clazz=类名.class; 方式3: Class clazz==对象.getClass(); 方式4: Class c1 = Integer.TYPE; 阅读全文
posted @ 2017-09-01 21:22 赵安之 阅读(200) 评论(0) 推荐(0)
摘要:缓冲流一共分为四种:字节缓冲输入(输出)流,字符缓冲输入(输出)流; 1- 字节缓冲输出流BufferedOutputStream 继承结构: 构造方法: 代码演示: /* * 写数据到文件的方法 * 1,创建流 * 2,写数据 * 3,关闭流 */ private static void writ 阅读全文
posted @ 2017-08-28 14:20 赵安之 阅读(229) 评论(0) 推荐(0)
摘要:1.1 - OutputStreamWriter类 OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节。 它的作用的就是,将字符串按照指定的编码表转成字节,在使用字节流将这些字节写出去。 - 代码演示: public static v 阅读全文
posted @ 2017-08-28 14:17 赵安之 阅读(237) 评论(0) 推荐(0)
摘要:用字节流读取一个含有字符的文件时,我们并没有看到具体的中文,而是看到一些数字,这是什么原因呢? 既然看不到中文,那么我们如何对其中的中文做处理呢?要解决这个问题,我们必须研究下字符的编码过程。 用字节流读取一个含有字符的文件时,我们并没有看到具体的中文,而是看到一些数字,这是什么原因呢? 既然看不到 阅读全文
posted @ 2017-08-28 14:15 赵安之 阅读(693) 评论(0) 推荐(0)
摘要:字符流和字节流在写出的时候,如果文件不存在是会自动创建的,不需要手动创建文件。 并且,在写入文件时,是具有缓存的,如果没有关闭流,那么需要手动刷新。 1.1 字节输出流 OutputStream OutputStream 此抽象类,是表示输出字节流的所有类的超类。操作的数据都是字节,定义了输出字节流 阅读全文
posted @ 2017-08-28 14:12 赵安之 阅读(211) 评论(0) 推荐(0)
摘要:File的一些常用方法 1、File.listRoots() 返回一个File[]数组,里面存储了根目录的File对象 2、boolean exists() 判断是否存在这个文件 3、long lastModify() 返回最后一次修改的时间,毫秒数值 文件不存在返回0 4、boolean isFi 阅读全文
posted @ 2017-08-28 14:00 赵安之 阅读(259) 评论(0) 推荐(0)
摘要:Arrays常见的是对数组的操作 1.void fill(Object[] objs,Object obj)方法 对指定的数组用指定的元素进行填充 会将该元素装满这个数组 2.void fill(Object[] objs,int start,int end,Object obj) 填充元素到指定的 阅读全文
posted @ 2017-08-28 13:59 赵安之 阅读(144) 评论(0) 推荐(0)
摘要:泛型:JDK1.5版本以后出现新特性。用于解决安全问题,是一个类型安全机制。 在jdk1.7之后定义泛型可以不用写后面的<>中的内容 比如: People<Dog> people = new People<不用写>("李德华", new Dog()); 好处 1.将运行时期出现问题ClassCast 阅读全文
posted @ 2017-08-28 13:58 赵安之 阅读(165) 评论(0) 推荐(0)
摘要:Collections的常用方法 1. sort(list,comparator) sort(list) 在使用时,集合中的对象要可序列化,即实现comparable方法或者传入一个已知类型的比较器对象, 默认调用的是compareTo()方法 2. shuffle(list) 将元素进行随机排列, 阅读全文
posted @ 2017-08-28 13:58 赵安之 阅读(180) 评论(0) 推荐(0)
摘要:Map集合遍历有两种方法 第一:mapEntry方式 第二:keySet方式 HashMap 和Hashtable 的区别 - HashMap允许键和值是null,而Hashtable不允许键或者值是null。 - Hashtable是同步的,而HashMap不是。因此,HashMap更适合于单线程 阅读全文
posted @ 2017-08-28 13:56 赵安之 阅读(277) 评论(0) 推荐(0)
摘要:在此以TreeSet集合为例: TreeSet排序的第一种方式:让元素自身具备比较性。 元素需要实现Comparable接口,覆盖compareTo方法。 这种方式也成为元素的自然顺序,或者叫做默认顺序。 TreeSet的第二种排序方式。 当元素自身不具备比较性时,或者具备的比较性不是所需要的。 这 阅读全文
posted @ 2017-08-28 13:55 赵安之 阅读(388) 评论(0) 推荐(0)
摘要:判断集合元素唯一的原理 3.1 ArrayList 的 contains 方法判断元素是否重复原理 ArrayList 的 contains 方法会使用调用方法时,传入的元素的 equals 方法依次与集合中的旧元素 所比较,从而根据返回的布尔值判断是否有重复元素。此时,当 ArrayList 存放 阅读全文
posted @ 2017-08-28 13:53 赵安之 阅读(346) 评论(0) 推荐(0)
摘要:Set:无序,不可以重复元素。 |--HashSet:数据结构是哈希表。线程是非同步的。 保证元素唯一性的原理:判断元素的hashCode值是否相同。 如果相同,还会继续判断元素的equals方法,是否为true。 链接: 关于HashSet详解(hashcode方法和equals方法的覆盖问题) 阅读全文
posted @ 2017-08-28 13:52 赵安之 阅读(107) 评论(0) 推荐(0)
摘要:Collection接口 |--List:元素是有序的,元素可以重复。因为该集合体系有索引。 |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。 |--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。 |- 阅读全文
posted @ 2017-08-28 13:51 赵安之 阅读(161) 评论(0) 推荐(0)
摘要: 阅读全文
posted @ 2017-08-28 13:48 赵安之 阅读(248) 评论(0) 推荐(0)