
吃透Java基础
Java基础先关知识
吃透Java
专注Java技术,每天都要努力一点点
展开
-
吃透Java基础十五:强引用、软引用、弱引用、虚引用
前言在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及状态,程序才能使用它。而对于如何描述一些“食之无味,弃之可惜”的对象就显得无能为力。我们希望能描述这样一类对象:当内存空间还足够时,则能保留在内存之中,如果内存在进行垃圾收集后还是非常紧张,则可以抛弃这些对象。在JDK1.2之后,Java对引用的概念进行扩充,将引用分为强引用、...原创 2019-11-28 21:13:33 · 671 阅读 · 0 评论 -
吃透Java基础十四:继承引发的“血案”
在Java中,只允许单继承,也就是说一个类只能继承一个父类,但是可以实现多个接口。本文我们讨论一下子类和父类的构造方法调用顺序、代码块执行顺序、方法的重写与重载。一、构造方法调用顺序1、何为构造方法构造方法是类的一种特殊方法,用来初始化类的一个新的对象,每个类至少有一个构造方法,如果类中没有显式定义构造方法,编译器在编译的时候会生成一个默认的构造方法,默认的构造方法不包含任何参数,并且方法体...原创 2019-11-10 16:40:48 · 428 阅读 · 1 评论 -
吃透Java基础十三:String字符串
一、String基础1、创建字符串方式String test = “abc”;String test = new String(“abc”);2、String类是不可变的public final class String implements java.io.Serializable, Comparable<String>, CharSequence { ...原创 2019-11-09 21:45:58 · 518 阅读 · 5 评论 -
吃透Java基础十二:IO
一、什么是IO流Java中将输入输出抽象称为流,就好像水管,将两个容器连接起来。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流。按数据来源(去向)分类:文件:FileInputStream、FileOutputStream、FileReader、FileWriter数组:字节数组(byte[]):ByteArrayInputStream、...原创 2019-11-08 18:41:50 · 440 阅读 · 1 评论 -
吃透Java基础十一:枚举
一:初识枚举枚举是JDK1.5添加的,在枚举类型出来之前,我们都是以定义常量来代替,比如:public class Date { public static final int ONE = 0; public static final int TWO = 1; public static final int THREE = 2; public static fi...原创 2019-11-05 15:48:44 · 744 阅读 · 2 评论 -
吃透Java基础十:注解
一、什么是注解官方定义:注解是一系列元数据,它提供数据用来解释程序代码,但是注解并非是所解释的代码本身的一部分。注解对于代码的运行效果没有直接影响。注解有许多用处,主要如下:提供信息给编译器:编译器可以利用注解来探测错误和警告信息。编译阶段时的处理:软件工具可以用来利用注解信息来生成代码、Html文档或者做其它相应处理。运行时的处理:某些注解可以在程序运行的时候接受代码的提取值得...原创 2019-11-03 13:38:39 · 494 阅读 · 1 评论 -
吃透Java基础九:序列化
一:什么是序列化序列化是将Java对象相关的类信息、属性、属性值等信息以一定的格式转换为字节流,反序列化时再将字节流表示的信息来构建出Java对象。过程中涉及到其它对象的引用对象也要参与序列化。二:序列化的应用场景永久性保存对象,保存对象的字节序列到本地文件或者数据库中。通过序列化以字节流的形式使对象在网络中进行传递和接收。通过序列化在进程间传递对象。三:序列化的实现方式Java...原创 2019-11-02 17:46:58 · 2537 阅读 · 4 评论 -
吃透Java基础八:Throwable异常
一:关于异常JAVA异常是在java程序运行的时候遇到非正常的情况而创建的对,它封装了异常信息。java异常的根类为java.lang.Throwable,整个类有两个直接子类java.lang.Error和java.lang.Exception。Error是程序本身无法恢复的严重错误,一般是虚拟机或者系统运行出现错误,和程序无关。Exception则表示可以被程序捕获并处理的异常错误。JV...原创 2019-11-01 17:51:28 · 3166 阅读 · 2 评论 -
吃透Java基础七:浅拷贝与深拷贝
一:什么是浅拷贝和深拷贝浅拷贝:原型对象的成员变量是值类型,将复制一份给克隆对象;如果原型对象的成员变量是引用类型,则将引用对象的地址复制一份给克隆对象,也就是说原型对象和克隆对象的成员变量指向相同的内存地址。也就是说:在浅拷贝中,当对象被复制时只复制它本身和其中包含的值类型的成员变量,而引用类型的成员对象并没有复制。深拷贝:无论原型对象的成员变量是值类型还是引用类型,都将复制一份给克隆对象...原创 2019-10-29 20:30:29 · 519 阅读 · 1 评论 -
吃透Java基础六:反射
一:什么是反射Java 反射机制可以让我们在编译期(Compile Time)之外的运行期(Runtime)检查类,接口,变量以及方法的信息。反射还可以让我们在运行期实例化对象,调用方法,通过调用 get/set 方法获取变量的值。很多人都认为反射在实际的 Java 开发应用中并不广泛,其实不然。当我们在使用 IDE(如 Eclipse,IDEA)时,当我们输入一个对象或类并想调用它的属性或方...原创 2019-10-29 18:04:21 · 509 阅读 · 1 评论 -
吃透Java基础五:Class类和Object类
在Java的世界里,一切皆是对象,所有的对象都是继承于Object类,而记录对象的类型的信息是由Class类来完成的,下面就让我们来具体了解一下Class类和Object类。一:Class类每个类的运行时的类型信息就是用Class对象表示的,它包含了与类有关的信息,其实我们的实例对象就通过Class对象来创建的。Java使用Class对象执行其RTTI(运行时类型识别,Run-Time Typ...原创 2019-10-27 18:13:41 · 1841 阅读 · 1 评论 -
吃透Java基础四:内部类
一、什么是内部类内部类顾名思义就是在类的内部再定义一个类,内部类依赖于外部类而存在,内部类可以分为成员内部类、静态内部类、局部内部类、匿名内部类。内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号 。外部类的访问权限只能是public或包访问权限,而内部类的访问权限可以是public、private、protected、包访问权限都可...原创 2019-10-25 17:39:33 · 434 阅读 · 1 评论 -
吃透Java基础三:触发类初始化的五种方式
一:类的生命周期类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用、卸载七个阶段,其中验证、准备、解析这三个阶段统称为链接。加载、验证、准备、初始化和卸载这五个阶段的顺序是确定的,类加载过程必须按照这种顺序按部就班的开始。二:类加载时机什么情况下需要开始类加载过程的第一个阶段:加载 呢?Java虚拟机规范中并没有进行强制约束,这点可以交...原创 2019-10-23 16:57:33 · 1409 阅读 · 2 评论 -
吃透Java基础二:创建对象的五种方式
一:使用new关键字这是最常见也是最简单的创建对象的方式了。通过这种方式,我们可以调用任意的构造函数(无参的和带参数的)。public static void main(String[] args) { People people = new People(); }二:使用Class类的newInstance方法利用反射来获取class对象调用newInstanc...原创 2019-10-22 21:11:58 · 597 阅读 · 1 评论 -
吃透Java基础一:Java访问权限修饰符
同类同包同包子类不同包子类不同包public√√√√√protected√√√√friendly√√√private√下面看例子:base包下定义Father类,四种权限定义方法package base;public class Father { public void showPublic(...原创 2019-10-12 12:31:00 · 422 阅读 · 1 评论 -
JNI/NDK开发指南(开山篇)
相信很多做过Java或Android开发的朋友经常会接触到JNI方面的技术,由其做过Android的朋友,为了应用的安全性,会将一些复杂的逻辑和算法通过本地代码(C或C++)来实现,然后打包成so动态库文件,并提供Java接口供应用层调用,这么做的目的主要就是为了提供应用的安全性,防止被反编译后被不法分子分析应用的逻辑。当然打包成so也不能说完全安全了,只是相对反编译Java的class字节码文件...转载 2018-11-20 20:17:45 · 205 阅读 · 0 评论 -
Java基础知识之容器(八:HashMap在jdk8数据结构的改进)
原文地址:http://www.cnblogs.com/xiarongjin/p/8310135.html下面来看下HashMap的主要两种存储方式是示意图(图片来自网络): 这就是java8的HashMap的数据结构,跟之前版本不一样的是当table达到一定的阀值时,bucket就会由链表转换为红黑树的方式进行存储,下面会做具体的源码分析。一:HashMap的put方法实现原理...原创 2018-06-30 17:18:17 · 420 阅读 · 0 评论 -
Java基础知识之容器(七:HashMap详解)
一、HashMap的数据结构原文地址:https://www.cnblogs.com/xiarongjin/p/8310011.html数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。数组 数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;链表 链表存储区间离散,占用内存比...原创 2018-06-30 16:34:07 · 548 阅读 · 0 评论 -
Java基础知识之容器(六:TreeSet详解)
一:TreeSet简介public class TreeSet&amp;lt;E&amp;gt; extends AbstractSet&amp;lt;E&amp;gt; implements NavigableSet&amp;lt;E&amp;gt;, Cloneable, java.io.SerializableTreeSet继承于AbstractSet 该类提供了Set 接口的骨架实现原创 2018-05-25 20:22:11 · 674 阅读 · 0 评论 -
Java基础知识之容器(五:HashSet详解)
一:HashSet简介public class HashSet&lt;E&gt; extends AbstractSet&lt;E&gt; implements Set&lt;E&gt;, Cloneable, java.io.SerializableHashSet 继承于AbstractSet 该类提供了Set 接口的骨架实现,以最大限度地减少实现此接口所需的工作量...原创 2018-05-23 20:50:19 · 522 阅读 · 0 评论 -
Java基础知识之容器(四:Vector详解)
知识补充:Arrays.copyOf函数:public static int[] copyOf(int[] original, int newLength) { int[] copy = new int[newLength]; System.arraycopy(original, 0, copy, 0, ...原创 2018-05-19 17:32:47 · 757 阅读 · 0 评论 -
Java基础知识之容器(三:LinkedList详解)
上篇我们分析了ArrayList的底层实现,知道了ArrayList底层是基于数组实现的,因此具有查找修改快而插入删除慢的特点。本篇介绍的LinkedList是List接口的另一种实现,它的底层是基于双向链表实现的,因此它具有插入删除快而查找修改慢的特点,此外,通过对双向链表的操作还可以实现队列和栈的功能。LinkedList的底层结构如下图所示。 F表示头结点引用,L表示尾结点引用,链...原创 2018-05-12 16:48:31 · 762 阅读 · 0 评论 -
Java对象的比较:Comparable接口和Comparator接口
在实际应用中,我们往往有需要比较两个自定义对象大小的地方。而这些自定义对象的比较,就不像简单的整型数据那么简单,它们往往包含有许多的属性,我们一般都是根据这些属性对自定义对象进行比较的。所以Java中要比较对象的大小或者要对对象的集合进行排序,需要通过比较这些对象的某些属性的大小来确定它们之间的大小关系。一般,Java中通过接口实现两个对象的比较,比较常用就是Comparable接口和Compara原创 2018-05-08 18:13:50 · 395 阅读 · 0 评论 -
Java基础知识之容器(二:ArrayList详解)
我们先来看看ArrayList的实现关系: ArrayList继承于AbstractList,AbstractList实现了List接口,List接口继承于Collection接口。Collection是集合层次的根接口,List有三个常用的实现类,分别是ArrayList、LinkedList、Vector。这节我们重点介绍ArrayList。如果对容器整体框架还不清楚的请移步这里:Jav...原创 2018-05-02 20:33:04 · 553 阅读 · 0 评论 -
java编码问题
最近在狂补基础,俗话说“基础不牢,地动山摇” 关于java字符串编码问题一直不是很清楚,今天网上查了好多资料,找到一篇很好的文章,参考了一下,并加上自己的理解。点击进入我的博客主页为什么要编码不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言。由于人类的语言有太多,因而表示这些语言的原创 2017-12-27 10:15:10 · 472 阅读 · 0 评论 -
Java基础知识之数据类型
数据类型 java语言是一种强类型语言变量或常量必须有类型:声明变量或常量必须声明类型。赋值时类型必须一致:值的类型必须和变量或常量的类型完全一致。运算时类型必须一致:参与运算的数据类型必须一致才能运算。java中的数据类型分为基本数据类型和引用数据类型基本数据类型:基本数据类型共有8种,分别是:布尔型boolean, 字符型char和数值型byte/short/int/long/flo原创 2017-12-18 20:49:21 · 426 阅读 · 0 评论 -
Java基础知识之容器(一:容器整体框架探索)
本篇博客主要介绍Java容器的框架,我们根据框架重上向下的顺序一个个探究其源码,来达到掌握容器的骨架。至于容器的细节放到下一篇来探讨。一:基本概念Java容器类库的用途是保存对象,根据数据结构不同将其划分为两个不同的概念Collection,一个独立元素的序列,其中List按照元素的插入顺序保存元素,而set不能有重复元素,Queue按照先进先出(FIFO)的方式来管理数据Map,一组键值对(k原创 2017-09-01 14:59:06 · 757 阅读 · 0 评论 -
Java基础知识之数组
一:什么是数组:数组是相同类型的,用一个标识符名称封装到一起的一个对象序列或基本数据类型序列。 数组就是一个简单的线性序列,这使得元素访问非常快速,但是为这种速度所付出的代价是数组对象的大小被固定,并且在其生命周期中不可改变。 在Java中数组是一种效率最高的存储和随机访问对象引用序列的方式。二:数组和其它容器有什么区别:1. 数组可以存储基本数据类型,也可以存储引用数据类型,集合只能存储引用数原创 2017-08-19 15:04:22 · 454 阅读 · 0 评论 -
Java基础知识之泛型
一: 什么是 java 泛型?Java 泛型实质就是一种语法约束,泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。二:泛型的核心原理是什么?泛型的核心原理其实就是泛型的 T 类型参数的原理,Java 编译器在编译阶段会将泛型代码转换为普通的非泛型代码,实质就是擦除类原创 2017-08-14 21:26:32 · 775 阅读 · 3 评论 -
Java基础知识之字符串
一、理解内存了解字符串之前我们得先理解什么是内存? 通常我们所说的内存就是暂时存储程序以及数据的地方,包括随机存储器(RAM),只读存储器(ROM),以及高速缓存(CACHE)。只不过因为RAM是其中最重要的存储器。 我们来看RAM组成:寄存器:速度最快的存储场所,因为寄存器位于处理器内部,所以在程序中我们无法控制。栈(Stack) :存放基本类型的对象和引用,但是对象本身不存放在栈中,而是原创 2017-07-25 18:00:23 · 567 阅读 · 0 评论 -
java基础知识之(==与equals,try catch finally return ,装箱与拆箱)
一:==和equals区别在初学Java时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = new String("hello"); System.out.println(str1==str2); System.out.println(str1.equals(str2));为什么第4行和第5行的输出结果不一样?==和e原创 2017-07-19 10:21:03 · 1220 阅读 · 0 评论