Thinking in java
文章平均质量分 75
oYeYuanXinZhiZhu1
这个作者很懒,什么都没留下…
展开
-
thinking in Java:5.1初始化与清理
1.重载:每个重载的方法必须有一个独一无二的参数类型列表。注意:无法以返回值区分方法重载方法重载要满足的条件:1.方法名相同。2.参数类型或参数列表顺序不同。3.返回值可以相同也可以不同。所以,不能使用返回值来区分方法重载下面看一段报错代码,体现了企图用返回值区分方法重载会产生的矛盾public class TestOverload { public static void main(...原创 2018-03-15 15:46:48 · 209 阅读 · 0 评论 -
java在调用System.out.println()打印一个新new的对象时,为什么会调用toString方法?
在Java中,所有的对象都是继承自Object,自然继承了toString方法,在当使用System.out.println()里面为一个对象的引用时,自动调用toString方法将对象打印出来。如果重写了tostring方法则调用重写的toString 方法。因为 1.System.out.println()的这个方法源码中调用了String.valueOf(Objec o),public...转载 2018-03-28 19:12:13 · 755 阅读 · 0 评论 -
Thinking in java : 16 数组
请优先使用高级容器集合,除非证明用数组确实效率高,否则当然优先使用容器集合。1. 数组是一种效率最高的存储和随机访问对象引用序列的方式,其代价就是固定大小。ArrayList的效率比数组低很多。不可越界否则产生RuntimeException。2. 无论使用哪种类型的数组,数组标识符其实只是一个引用,指向在堆中创建的一个真实对象,这个对象用以保存指向其他对象的引用。3. 对象数组:保存引用;所有...原创 2018-03-28 21:54:22 · 209 阅读 · 0 评论 -
Thinking in java:17 容器深入研究
1. Set和存储顺序2. 理解Map再次强调默认的Object.equal()只是比较对象的地址,所以如果要用自己的类作为HashMap的键,必须同时重载hashCode()和equal()方法。3. 理解hashCode() 使用散列的目的在于:想要使用一个对象来查找另一个对象。散列的价值在于速度(为什么使用散列):散列使得查询得以快速进行。我们知道存储一组元素最快的数据结构是数组,所以使用...原创 2018-04-18 22:05:25 · 236 阅读 · 0 评论 -
ArrayList源码分析
基于jdk 1.8的源码分析1.ArrayList底层使用java中的数组实现,类型为Object数组transient Object[] elementData; //ArrayList就存放在这个数组里面2.数组默认容量为10:private static final int DEFAULT_CAPACITY = 10;3.元素数量private int size;4.为了应对不同的构造函...原创 2018-04-24 21:51:59 · 183 阅读 · 0 评论 -
LinkedList源码分析
1.综述: LinkedList 是通过一个直线型的双向链表来实现的,它允许插入所有元素,包括null,同时,它是线程不同步的。下面是双向链表的结构:LinkedList构造方法有两个,一个是无参构造,一个是传入Collection对象的构造。2.属性://链表的节点个数transient int size = 0;//指向头节点的指针transient Node<E> fi...原创 2018-04-25 20:10:00 · 195 阅读 · 0 评论 -
LinkedHashSet源码分析
LinkedHashSet具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按照元素的插入次序显示。看LinkedHashSet的内容。public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneab...原创 2018-04-25 21:09:21 · 206 阅读 · 0 评论 -
TreeSet源码分析
TreeSet常用方法,都是调用Treemap中的方法,只是在添加的时候用静态常量PRESENT来填充map的value位置。iterator()迭代器方法,返回的就是map的keySet的迭代器。总结TreeSet底层实现严重依赖于TreeMap,所以弄清楚TreeMap是关键。...原创 2018-04-25 21:21:18 · 186 阅读 · 0 评论 -
java IO知识点
1.对于字节流InputStream和OutPutStream,当read()和writer()时,他们只接受byte[]型数组。对于字符流Reader和Writer,read()接受char[]类型,writer()可以接受字符串、char[]数组,int值等参数。为什么已经存在字节流还要引入字符流熟悉java的应该知道,字节流比字符流产生的更早,可以说jdk一面世,已经有字节流了。那么为什么后...转载 2018-05-04 16:40:33 · 717 阅读 · 0 评论 -
LinkedHashMap源码分析
1. 综述:LinkedHashMap继承了HashMap,HashMap是以散列表的形式存储数据的,所以,LinkedHashMap其实也是散列表的结构,但是“linked”是它对HashMap功能的进一步增强,LinkedHashMap用双向链表的结构,把所有存储在HashMap中的数据连接起来。那么,LinkedHashMap的双向链表与HashMap中的链表有什么不同呢?①桶中的链表是散列...转载 2018-04-26 20:35:58 · 184 阅读 · 0 评论 -
AOP概念与运行原理
转载于:https://blog.csdn.net/u012403290/article/details/64443021引言AOP指的就是面向切面编程,在实际的开发和工作中很多地方都深有体现,比如权限控制,控制全局状态等。接下来会详细阐述AOP的概念,给出对应的DEMO来深入学习实践,探讨AOP的意义。技术点: 1、反射(reflect)在运行状态中,对于任意一个类,都能够知道这个类的属性和方法...转载 2018-04-28 10:49:19 · 333 阅读 · 0 评论 -
Thinking in Java : 13、字符串
1. 不可变String String对象是不可变的。String类中每个看起来会修改String值的方法,实际上都是创建了一个全新的String对象,以包含修改后的字符串内容。而最初的String对象则丝毫未动。public class Welcome{ public static String upcase(String s) { return s.toUpper...原创 2018-03-28 15:44:54 · 181 阅读 · 0 评论 -
为什么Java里的Arrays.asList()返回的List不能使用add、remove方法?
我们从下面这段简单代码讲起,public class MainFacade { public static void main(String[] args) { List<Integer> list = Arrays.asList(1,2,3); list.add(5); System.out.print(list...原创 2018-04-15 20:52:34 · 8519 阅读 · 7 评论 -
thinking in java:5. 初始化与清理
1.例子:public class ArrayOfPrimitives{ public static void main(String[] args){ int[] a1={1,2,3,4,5}; int[] a2; a2=a1; for(int i=0;i<a2.length;i++) a2[i] = a2[i]+1...原创 2018-03-15 19:31:28 · 350 阅读 · 0 评论 -
关于继承中构造方法的知识
转载于:http://blog.csdn.net/wangyl_gain/article/details/49366505#replyjava中子类能继承父类的构造方法吗?带着这个疑问我们首先来看个例子://B类继承A类public class B extends A { public static void main(String[] args) { B...转载 2018-03-16 16:39:09 · 358 阅读 · 1 评论 -
thinking in java:接口和抽象类
写的不错的文章,转载一下:http://blog.csdn.net/fly_zxy/article/details/51113087抽象类和普通类的区别抽象类和接口的区别3.接口中能用到的设计模式 1.策略设计模式:创建一个能够根据所传递的参数对象的不同而具有不同行为。“策略”指传递进去的参数对象,它包含要执行的代码。 2.适配器设计模式 3.工厂方法设计模式4.类可...转载 2018-03-16 19:36:51 · 240 阅读 · 0 评论 -
Thinking in Java : 7.复用类
转载于:http://blog.csdn.net/ZJDWHD/article/details/52441298其他的就不想再贴过来了,就只写一下自己觉得重要的,详细的请去上面链接看。7. final关键字 根据上下文环境,关键字final的含义存在着细微的差别,但通常它指的是“这是无法改变的。”不想做改变可能处于两种原因:设计或效率。由于这两个原因相差很远,所以关键字final可能会被误...转载 2018-03-17 16:38:17 · 181 阅读 · 0 评论 -
Thinking in Java :关于初始化的总结
看了这么多,对初始化顺序做个总结:在含有 继承、静态变量、一般变量、构造函数的几个类里面,顺序如下:1.基类静态变量2.子类静态变量3.进入main函数: 若创建了一个子类对象, 4.基类一般变量 基类构造函数 5.子类一般变量 ...原创 2018-03-19 09:37:58 · 213 阅读 · 0 评论 -
Thinking in Java :8.多态
1. 动态绑定实现多态。Java中static方法和final方法(private方法属于final方法)不能使用动态绑定,不具有多态性!2. 向上转型: 例如: Father father = new Son(); 3.重要:向上转型后的实例变量与方法的访问 package cn.hdu.li;//import sun.tools.jconsole.Tab;class Useful{...原创 2018-03-19 21:52:45 · 202 阅读 · 0 评论 -
Thinking in java: 14类型信息
1. java识别对象和类的信息的两种方式: (1)RTTI,她假定我们在编译时已经知道了所有类型;名字含义:在运行时,识别一个对象的类型。 (2)反射机制,他允许我们运行时发现和使用类的信息。2. 类是程序的一部分,每个类都有一个Class对象。换言之,每当编写并且编译了一个新类,就会产生一个Class对象(更恰当的说是被保存在一个同名的.class文件中)。为了生成这个类的对象,ja...原创 2018-03-30 15:16:17 · 196 阅读 · 0 评论 -
Thinking in Java: 2.对象
1.java对象存储在什么地方?堆:用于存放所有Java对象,堆不同于堆栈的好处是:编译器不需要知道存储的数据在堆里存活多长时间。当需要对象时new一个就行,当然灵活性的代价是:存储分配和清理需要更多时间。2.基本类型boolean、char、byte、short、int、long、float、double,new将对象存放于堆里,但以上不用new来创建,而是创建一个并非是引用的自动变量,这个变量...原创 2018-03-14 15:30:35 · 172 阅读 · 0 评论 -
Thinking in Java : 11、持有对象(容器)
1. 集合类:List、Set、Queue、Map,我们称为容器。他们都可以自动调整大小。2. 向上转型,ArrayList、LinkedList具有List接口中未包含的额外方法,若你需要使用这些方法,就不能向上转型为更通用的接口。List<Apple> apples = new ArrayList<Apple>();List<Apple> apples =...原创 2018-03-24 14:01:58 · 237 阅读 · 0 评论 -
Thinking in Java 3.操作符
1.关系操作符==和!=也适用于所有对象。看代码:public class Equalsasd{ public static void main(String[] args){ Integer n1 = new Integer(); Integer n2 = new Integer(); System.out.println(n1==n2); ...原创 2018-03-14 16:56:56 · 239 阅读 · 0 评论 -
transient关键字详解
1,transient的用途及使用方法1,用途 我们知道,当一个对象实现了Serilizable接口,这个对象就可以被序列化,我们不关心其内在的原理,只需要了解这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化。而在开发过程中,我们可能要求:当对象被序列化时(写入字节序列到目标文件)时,有些属性需要序列化,而其他属性不需要被序列化,打个比方,如果一个用户有一些敏感信息(...转载 2018-05-14 11:35:51 · 261 阅读 · 0 评论