![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java-基础
四夕口鸟
Coding赚点奶粉钱
展开
-
Java基础(17) - 不可变对象
一、存在的意义1、让并发编程变得更简单线程安全问题的根本原因在于:多个线程需要同时访问同一个共享资源。假如没有共享资源,那么多线程安全问题就自然解决了,Java中ThreadLocal机制就是采取的这种思想。2、消除副作用防止在其他地方修改了对象属性,导致结果未按预期运行。(String设计成Final的原因之一)3、减少容器类使用过程出错的概率当使用Has...原创 2019-12-06 22:19:25 · 120 阅读 · 0 评论 -
Java基础 (1) - 面向对象特性
1.抽象现实生活中的事物被抽象成对象,把具有相同属性和行为的对象被抽象成类,再从具有相同属性和行为的类中抽象出父类。(找出共同部分抽出来)2.封装隐藏对象的属性和实现细节,仅仅对外公开接口。3.继承子类和父类之间的继承关系,子类可以获取到父类的属性和方法。注:关于子类能否继承父类的私有方法?从语言角度上说:JDK官方文档明确说明子类不能继承父类的私有方法...原创 2019-12-01 21:01:06 · 64 阅读 · 0 评论 -
Java基础 (2) - 基本数据类型及包装类
关键字位数、常量池、包装类(自动装拆箱)一、基本数据类型1、8种基本数据类型整数类型:byte,short,int,long浮点数类型:float(4B),double (8B)字符类型:char (2B)布尔类型:boolean (1B 或 4B)2、位数1、JVM规范中,boolean作为int处理,占4字节 ,boolean数组当做byte数组,占1...原创 2019-12-02 21:44:20 · 66 阅读 · 0 评论 -
Java基础 (3) - String
String StringBuilder/Buffer StringFormat一、可变与不可变 String -> private final char value[]; final 不可变的 StringBuilder/Buffer -> char value[] 可变的String设计成”不可变”对象是因为多个指引指向同一个内存空间,如任意指...原创 2019-12-02 21:42:11 · 119 阅读 · 0 评论 -
Java基础(4) - 引用类型
1、强引用虚拟机回收时,就算内存不足也不会回收。2、软引用虚拟机回收时,当内存不足时才回收。(使用时需判断是否为空)适合操作频率不高,想避免OutOfMemory异常的发生。(Bitmap)3、弱引用虚拟机回收时,只要发现有弱应用即回收。(使用时需判断是否为空)适合操作频率高,想应用有更好的性能。(handler)4、虚引用仅持有虚引用的对象,...原创 2019-12-03 20:13:42 · 49 阅读 · 0 评论 -
Java基础(17) - 不可变对象
一、存在的意义1、让并发编程变得更简单线程安全问题的根本原因在于:多个线程需要同时访问同一个共享资源。假如没有共享资源,那么多线程安全问题就自然解决了,Java中ThreadLocal机制就是采取的这种思想。2、消除副作用防止在其他地方修改了对象属性,导致结果未按预期运行。(String设计成Final的原因之一)3、减少容器类使用过程出错的概率当使用Has...原创 2019-12-03 20:20:38 · 79 阅读 · 0 评论 -
Java基础 (5) - 集合
一、分类Java集合大致分为 List、Set、Map 、Queue四种, List代表有序、重复的集合; Set代表无序、不可重复的集合; Map则代表具有映射关系的集合 Queue Java5增加,代表一种队列的集合二、List - 有序 | 重复常见的list有ArrayList、LinkedList、CopyOnWriteA...原创 2019-12-02 21:49:14 · 79 阅读 · 0 评论 -
Java基础 (6) - 枚举
能解决1.类或方法强制使用者传入预设的值2.性能相对常量更好 - (Android环境除外)使用办法public enum ColorEnum{ WHITE("0x000001"),BLACK("0x000002"),GREEN("0x000003"); private final String color; private ColorEnum...原创 2019-12-02 21:49:49 · 51 阅读 · 0 评论 -
Java基础 (7) - 泛型
能解决1.参数“模板”化适用于多种数据类型执行相同的代码 泛型中的类型在使用时指定 泛型归根到底就是“模版”2、使用泛型时,在实际使用之前类型就已经确定了,不需要强制类型转换,防止程序运行时出现转换异常3、接受宽泛的数据类型泛型主要在集合类中使用,eg:List<String> list = new ArrayList<String>();St...原创 2019-12-02 21:50:54 · 91 阅读 · 0 评论 -
Java基础(8) - 接口、抽象类
存在的意义接口 - 接口对维护和解耦代码有很很好的帮助 同时由于接口常用来约束对象的行为,可实现”多继承“。抽象类 - 抽象类对于代码的维护和重用有很好的帮助。参考:接口 - https://blog.csdn.net/googleoyyp/article/details/78912259抽象类 - https://blog.csdn.net/chenchaozzu/a...原创 2019-12-02 21:51:28 · 52 阅读 · 0 评论 -
Java基础(9) - 静态、代码块
关键字加载顺序 、类初始化 、方法区、进程一、存在作用变量 -> 全局共享 (跨线程,但不支持跨进程)方法 -> 不用类实例就能直接使用,避免New的消耗。(为什么静态方法不能访问非静态变量)代码块 -> 静态块在类初始化就运行 ,初始化顺序 静态代码块 -> 普通代码块 -> 构造方法 -> 普通方法,...原创 2019-12-02 21:53:12 · 73 阅读 · 0 评论 -
Java基础(10) - 内部类
一、存在意义1、内部类可以很好的实现隐藏一般的非内部类,是不允许有private与protected权限的,但内部类可以2、内部类拥有外部类所有元素的访问权限 ,private修饰也能访问。3、可实现多重继承 ,让多个内部类分别继承多个其他类,使外部类可以同时获取多个其他类的属性。4、可以避免修改接口而实现同一个类中两种同名方法的调用。(外部类继承,让内部类实现接口)参考:...原创 2019-12-02 21:54:04 · 83 阅读 · 0 评论 -
Java基础 (11) - 反射
一、能解决Java中编译分为静态编译和动态编译。静态编译:在编译时确定类型,绑定对象,即通过。动态编译:运行时确定类型,绑定对象。动态编译最大限度发挥了java的灵活性,体现了多 态的应用,从而降低类之间的藕合性。二、能得到实现Java反射机制的类都位于java.lang.reflect包中:1、Class类:代表一个类2、Field类:类的属性(成...原创 2019-12-02 21:55:17 · 56 阅读 · 0 评论 -
Java基础 (12) - 序列化
一、序列化是干什么的?内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。二、什么情况下序列化 a、对象需要持久化 (硬盘or数据库) b、网络传输 (套接字orRMI) c、在进程间传递对象三、序列化ID的作用java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本...原创 2019-12-03 20:14:01 · 49 阅读 · 0 评论 -
Java基础(13) - Error与Exception
一、Error(错误)是系统中的错误,程序员是不能改变的和处理的,是在程序编译时出现的错误,只能通过修改程序才能修正。一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。二、Exception异常 表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,...原创 2019-12-03 20:17:41 · 81 阅读 · 0 评论 -
Java基础 (14) - 多线程
多线程的方式有Thread、Runnable、Callable、ExecutorService四种方式1.Thread、Runnable区别(1) Thread是类,Runnable是接口(支持多继承)。Thread可以理解成实现了Runnable接口的类。(2) Runnable资源共享实现较简单。(3) 增加程序的健壮性,代码可以被多个线程共享,代码和数据独立(4) 线程池...原创 2019-12-03 20:16:29 · 84 阅读 · 0 评论 -
Java基础(15) - Object类
一、Object类9大方法是哪些1、Clone方法实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常Java里参数传递,除了8种基本类型是值传递。其他类对象都是引用传递。2、getClass方法final方法,获得运行时类型。3、toString方法该方法用得比较多,一般子类都...原创 2019-12-03 20:19:21 · 79 阅读 · 0 评论 -
Java基础(16) - Class类
一、存在的意义位于java.lang包下,和java.lang.reflect包下的类共同支持java反射功能jvm在类加载时,在堆中为每个类生成一个Class对象,用于记录每个类的属性、方法等信息,同时每个对象生成时都有特殊的标记位来指向堆中的Class对象。二、获取的三种方式1 、Class.forName("全路径名")2 、类名.Class3、实例对象...原创 2019-12-03 20:19:59 · 130 阅读 · 0 评论 -
Java基础(18) - JVM
JVM由类加载器、运行时数据区、执行引擎3部分组成一、类加载器有启动类、扩展类、系统类、自定义4种类型加载器(1)启动类加载器 (Bootstrap ClassLoader )-> 它用来加载Java的核心库,比如String、System这些类-> JRE/lib/rt.jar(2)扩展类加载器(Ext ClassLoader由Java语言实现,父类加载器为...原创 2019-12-03 20:24:27 · 119 阅读 · 0 评论 -
Java基础(19) - 网络编程
BIO、NIO、AIO待补充~NIO vs IO之间的理念上面的区别(NIO将阻塞交给了后台线程执行)IO是面向流的,NIO是面向缓冲区的 Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方; NIO则能前后移动流中的数据,因为是面向缓冲区的 IO流是阻塞的,NIO流是不阻塞的 Java IO的各种流是阻塞的。这意味着,当一个...原创 2019-12-04 22:20:49 · 72 阅读 · 0 评论 -
Java基础(20) - JDK各版本特性
一、Java71、switch中可以使用字符串2、泛型的自动判断List<String> tempList = new ArrayList<>();3、自定义自动关闭类(实现AutoCloseable接口)只要实现该接口,在该类对象销毁时自动调用close方法,你可以在close方法关闭你想关闭的资源4、新增一些取环境信息的工具方法(System中的...原创 2019-12-04 22:21:18 · 246 阅读 · 0 评论 -
并发(1) - JMM
一、主存储器与工作存储器JMM 分为主存储器(main memory)和工作存储器(working memory)两种。主存储器(main memory)类的实例所存在的区域(堆),为所有线程共享。工作存储器(working memory)每个线程各自独立所拥有的作业区,在working memory中,存有main memory中的部分拷贝,称之为工作拷贝(wor...原创 2019-12-04 22:13:50 · 66 阅读 · 0 评论 -
并发(2) - 锁分类
2种分类法一、一类8种1、乐观锁/悲观锁2、独享锁/共享锁3、互斥锁/读写锁4、可重入锁5、公平锁/非公平锁6、分段锁7、偏向锁/轻量级锁/重量级锁8、自旋锁参考:https://www.cnblogs.com/hustzzl/p/9343797.html二、一类有3类方法锁、对象锁、类锁。(方法锁也是对象锁的一种)1、对象锁对象锁...原创 2019-12-04 22:17:32 · 178 阅读 · 0 评论