
Java基础
文章平均质量分 91
Java
余 一
人类的悲欢并不相通
展开
-
【Java基础】对象克隆(复制)
阅读目录前言前言假如说你想复制一个简单变量。很简单:int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,float,double.long)同样适用于该类情况。但是如果你复制的是一个对象,情况就有些复杂了。假设说我是一个beginner,我会这样写:class Student { private int number; public int ge.转载 2021-03-26 13:33:14 · 359 阅读 · 0 评论 -
【Java基础】详解Java中的checked异常和unchecked异常
阅读目录Java的异常层次结构unchecked异常和checked异常的区别为什么要对unchecked异常和checked异常进行区分?我们应该对哪些异常进行声明?Java的异常层次结构要想明白Java中checked Exception和unchecked Exception的区别,我们首先来看一下Java的异常层次结构。这是一个简化的Java异常层次结构示意图,需要注意的是所有的类都是从Throwable继承而来,下一层则分为两个结构,Error 和 Exception。其中Error类层次转载 2021-02-18 21:57:47 · 347 阅读 · 0 评论 -
Lambda 表达式有何用处?如何使用?
阅读目录什么是Lambda?Lambda表达式有什么作用?Lambda配合Optional可以使Java对于null的处理变的异常优雅答主对Java比较熟悉,就用Java来讲一讲吧。什么是Lambda?我们知道,对于一个Java变量,我们可以赋给其一个“值”。如果你想把“一块代码”赋给一个Java变量,应该怎么做呢?比如,我想把右边那块代码,赋给一个叫做aBlockOfCode的Ja...转载 2020-04-26 16:33:15 · 319 阅读 · 0 评论 -
JAVA 8 函数式接口 - Functional Interface
阅读目录什么是函数式接口(Functional Interface)函数式接口用途关于@FunctionalInterface注解函数式接口里允许定义默认方法函数式接口里允许定义静态方法函数式接口里允许定义java.lang.Object里的public方法JDK中的函数式接口举例参考资料什么是函数式接口(Functional Interface)其实之前在讲Lambda表达式的时候提到过,所...转载 2020-04-26 10:13:14 · 343 阅读 · 0 评论 -
动态语言和静态语言的区别
静态类型语言与动态类型语言有三个名词容易混淆:Dynamic Programming Language (动态语言或动态编程语言)Dynamically Typed Language (动态类型语言)Statically Typed Language (静态类型语言)FantasySoft在他文章中所提到的动态语言与静态语言实际上指的就是动态类型语言与静态类型语言。动态语言,准确地...转载 2020-04-21 20:57:02 · 1190 阅读 · 1 评论 -
Java中>>和>>>移位操作符的区别
大家都知道>是比较两个对象的大小,那>>和>>>的区别呢?>>和>>>都是移位操作;对正数的移位操作它们的功能都是一样的,如下:15 >> 2 = 315 >>> 2 = 3其实就是将15除于4,得到的商。转换为二进制可能更直观(为了方便,下面的二进制操作我们都是以八位进行的,而不是32位):...转载 2019-11-27 09:55:31 · 381 阅读 · 0 评论 -
Java中Calendar.DAY_OF_WEEK需要减1的原因
前言Java中对日期的处理需要用到Calendar类,其中有几个方法在使用时需要新手注意。1. 在获取当前日期在一年当中是第几月份时,Calendar.MONTH + 1 的原因Java中的月份遵循了罗马历中的规则:当时一年中的月份数量是不固定的,第一个月是JANUARY。而Java中Calendar.MONTH返回的数值其实是当前月距离第一个月有多少个月份的数值,JANUARY在Java中...转载 2019-11-25 14:46:04 · 2333 阅读 · 0 评论 -
JSON.parseObject 和 JSON.toJSONString 实例
JSON.parseObject,是将Json字符串转化为相应的对象;JSON.toJSONString则是将对象转化为Json字符串。在前后台的传输过程中,Json字符串是相当常用的,这里就不多介绍其功能了,直接举一下应用的小例子,帮助理解这两个方法的用法。...转载 2019-11-19 20:37:13 · 704 阅读 · 0 评论 -
BigDecimal 舍入模式(Rounding mode)介绍
1 RoundingMode介绍package java.math;public enum RoundingMode { UP(BigDecimal.ROUND_UP), DOWN(BigDecimal.ROUND_DOWN), CEILING(BigDecimal.ROUND_CEILING), FLOOR(BigDecimal.ROUND_FLOO...转载 2019-11-07 21:24:44 · 1272 阅读 · 1 评论 -
JAVA泛型通配符T,E,K,V区别
原文标题:JAVA泛型通配符T,E,K,V区别,T以及Class,Class<?>的区别1. 先解释下泛型概念泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。Java语言引入泛型的好处是安全简单。在Java SE 1.5之前,没有泛型的情况的下...转载 2019-11-07 10:04:27 · 249 阅读 · 0 评论 -
ReferenceQueue和Reference
1. ReferenceQueue含义及作用通常我们将其ReferenceQueue翻译为引用队列,换言之就是存放引用的队列,保存的是Reference对象。其作用在于Reference对象所引用的对象被GC回收时,该Reference对象将会被加入引用队列中(ReferenceQueue)的队列末尾,这相当于是一种通知机制.当关联的引用队列中有数据的时候,意味着引用指向的堆内存中的对象被回收。...转载 2019-10-26 09:12:34 · 1010 阅读 · 0 评论 -
Java的强引用、软引用、弱引用和虚引用
前言Java执行GC判断对象是否存活有两种方式其中一种是引用计数。引用计数:Java堆中每一个对象都有一个引用计数属性,引用每新增1次计数加1,引用每释放1次计数减1。在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于(reachable)可达状态,程序才能使用它。从JDK 1.2版本开始,对象的引用被划分为4种级别,从而使程...转载 2019-10-25 19:32:06 · 188 阅读 · 0 评论 -
Java Class类与反射机制学习笔记
类的加载当一个程序使用某一个类时,如果该类还未被加载到内存中,则系统会通过加载、连接、初始化三个步骤来实现对这个类的初始化。加载 就是指将该类的 .class文件读入内存中,并为之创建一个Class对象( java.lang.class对象 )。这个Class对象就是用来表示 .class文件内容的东西。(.class文件内容一般包括成员变量、构造方法、成员方法),任何类被使用时,系统都...原创 2018-10-03 10:51:24 · 390 阅读 · 0 评论 -
Java 集合类学习笔记
数组存储弊端在Java中存储对象可以使用数组或者集合,但使用数组存储可能会出现以下弊端:一旦数组创建完毕,它的长度将是不可变的,如果要修改长度,只能通过创建一个新的数组,将原数组拷贝过去,这样将会增加开销。 在数组中不能直接获得存放对象的个数Java 集合框架的基本接口Java集合框架的基本接口图将常用的Java 集合可分为Collecion 和 Map 两种体系Co...原创 2019-01-19 20:54:10 · 331 阅读 · 0 评论 -
Java注解 Annotation学习笔记
注:该篇文章会与我的个人博客同步更新。欢迎移步https://cqh-i.github.io/体验更好的阅读效果。什么是注解?Annotaion 是从JDK5.0开始引入的新技术.Annotaion的作用:它不是程序本身,可以对程序作出解释(这一点,跟注释没什么区别)可以被其他程序(比如:编译器等)读取(注释信息处理流程,是注解和注释的重大区别,如果没有注...原创 2019-08-03 16:28:35 · 389 阅读 · 1 评论 -
Java高并发编程基础
注:该篇文章已与我的个人博客同步更新。欢迎移步https://cqh-i.github.io/体验更好的阅读效果。进程进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。线程线程是指进程中的一个执行路径,一个进程中可以运行多个线程。同一类的线程共享代码和数据空间, 每个线程使用...原创 2019-08-12 17:38:53 · 416 阅读 · 0 评论 -
Java内存模型
注:该篇文章已与我的个人博客同步更新。欢迎移步https://cqh-i.github.io/体验更好的阅读效果。前言 多核并发缓存架构随着CPU技术的发展,CPU的执行速度越来越快。而由于内存的技术并没有太大的变化,所以从内存中读取和写入数据的过程和CPU的执行速度比起来差距就会越来越大,这就导致CPU每次操作内存都要耗费很多等待时间。(木桶效应)CPU的摩尔定律:当价格不变时[集...原创 2019-08-13 23:55:45 · 151 阅读 · 0 评论 -
(转载)Java中的自动装箱与拆箱
自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动地转换成对应的对象。自动装箱与拆箱的机制可以让我们在Java的变量赋值或者是方法调用等情况下使用原始类型或者对象类型更加简单直接。如果你在Java1.5下进行过编程的话,你一定不会陌生这一点,你不能直接地向集合(Collections)中放入原始类型值,因为集合只接收对象。通常这种情况下你的做法是,将这些原始类型的值转换成对象,然后将这些转换的对象放入集合中。使用Integer,Double,Boolean等这些类我们可以将原始类型值转换转载 2019-08-30 11:32:56 · 160 阅读 · 0 评论 -
(转载)双重检查锁与延迟初始化
双重检查锁的由来在Java程序中,有时候可能需要推迟一些高开销的对象初始化操作,并且只有在使用这些对象时才进行初始化。此时程序员可能会采用延迟初始化。但要正确实现线程安全的延迟初始化需要一些技巧,否则很容易出现问题。比如,下面是非线程安全的延迟初始化对象的示例代码:转载 2019-08-30 23:06:26 · 162 阅读 · 0 评论 -
一段Java小程序
注:该篇文章已与我的个人博客同步更新。欢迎移步https://cqh-i.github.io/体验更好的阅读效果。请写出如下代码运行后的结果class A { public A() { PrintFields(); } public void PrintFields() { }}class B extends A { int ...原创 2019-09-04 21:24:24 · 213 阅读 · 0 评论 -
(转载)如何优雅地停止Java进程
注:该篇文章已与我的个人博客同步更新。欢迎移步https://cqh-i.github.io/体验更好的阅读效果。理解停止Java进程的本质我们知道,Java程序的运行需要一个运行时环境,即:JVM,启动Java进程即启动了一个JVM。因此,所谓停止Java进程,本质上就是关闭JVM。那么,哪些情况会导致JVM关闭呢?应该如何正确地停止Java进程通常来讲,停止一个进程只需要杀...转载 2019-09-06 20:46:30 · 559 阅读 · 0 评论 -
(转载)Java泛型中的通配符
注:该篇文章已与我的个人博客同步更新。欢迎移步https://cqh-i.github.io/体验更好的阅读效果。Java泛型中用?来表示一个通配符。这通配符到底啥意思?这玩意儿设计来干啥?怎么用?有什么限制?在了解这些之前,我也是一副黑人问号脸。今天我就要扒一扒这泛型中的?。是什么Oracle官方上的Tutorial给的解释是:Type of unknown. 果然是命名自解释——一个...转载 2019-09-07 10:43:24 · 145 阅读 · 0 评论 -
(转载)Java 接口可以多继承
接口是常量值和方法定义的集合。接口是一种特殊的抽象类。java类是单继承的。classB Extends classAjava接口可以多继承。Interface3 Extends Interface0, Interface1, interface……以下是spring ApplicationContext 接口的代码,同时继承了多个接口public interface Applicati...转载 2019-09-12 00:28:48 · 144 阅读 · 0 评论 -
(转载)Java接口实例化问题
注:该篇文章已与我的个人博客同步更新。欢迎移步https://cqh-i.github.io体验更好的阅读效果。先说结论: 接口不可以实例化。但是接口对象可以指向它的实现类对象。我们都知道,在java中接口不能直接实例化。但是有的时候,我们会看到这种匿名内部类(假象的所谓内部类)实例化的代码。如下:绑定View对象的监听方法调用View.setOnClickListetener(new...转载 2019-09-12 00:33:37 · 296 阅读 · 0 评论 -
(转载)为什么Java中子类重写父类的方法时声明抛出异常不能比父类范围大
注:该篇文章已与我的个人博客同步更新。欢迎移步 https://cqh-i.github.io 体验更好的阅读效果。在Java中,当我们子类要重写父类中的方法,如果父类的方法有异常声明,那么子类重写这个方法时候,所要声明的异常不应该比父类的大, 只能是小等,或者可以没有。原因如下。假如我们自定意义一个异常:public class MyException extends Exceptio...转载 2019-09-12 20:07:21 · 1282 阅读 · 0 评论 -
(转载)Java中异常的捕获顺序(多个catch)
注:该篇文章已与我的个人博客同步更新。欢迎移步 https://cqh-i.github.io 体验更好的阅读效果。import java.io.IOException; public class ExceptionTryCatchTest { public void doSomething() throws IOException{ System.out...转载 2019-09-12 20:11:07 · 251 阅读 · 0 评论 -
(转载)Java父类异常与子类异常之间的捕获关系
注:该篇文章已与我的个人博客同步更新。欢迎移步 https://cqh-i.github.io 体验更好的阅读效果。今天看到这么一段代码,请问输出的内容是什么?class Annoyance extends Exception {}class Sneeze extends Annoyance {}class Human { public static void main...转载 2019-09-12 20:13:44 · 1077 阅读 · 1 评论 -
(转载)Java四种线程创建方式的实现与对比
注:该篇文章已与我的个人博客同步更新。欢迎移步 https://cqh-i.github.io 体验更好的阅读效果。线程创建的几种方式在并发编程中,最基本的就是创建线程了,那么一般的创建姿势是怎样的,又都有些什么区别一般来讲线程创建有四种方式:继承Thread实现Runnable接口实现Callable接口,结合 FutureTask使用利用该线程池ExecutorServ...转载 2019-09-13 09:41:06 · 145 阅读 · 0 评论 -
HashMap工作原理及实现
注:该篇文章已与我的个人博客同步更新。欢迎移步 https://cqh-i.github.io 体验更好的阅读效果。1. 概述从本文你可以学习到:1. 什么时候会使用HashMap?它有什么特点?2. 你知道HashMap的工作原理吗?3. 你知道get和put的原理吗?equals()和hashCode()的都有什么作用?4. 你知道hash的实现吗?为什么要这样实现?5....原创 2019-09-18 19:10:40 · 190 阅读 · 0 评论 -
(转载)GC算法和种类
注:该篇文章已与我的个人博客同步更新。欢迎移步 https://cqh-i.github.io 体验更好的阅读效果。文章目录一、GC的概念:二、引用计数算法:(老牌垃圾回收算法。无法处理循环引用,没有被Java采纳)一、GC的概念:GC:Garbage Collection 垃圾收集1960年 Lisp使用了GCJava中,GC的对象是Java堆和方法区(即永久区)我们接下来对...转载 2019-09-20 17:08:43 · 179 阅读 · 0 评论 -
(转载)JAVA并发编程--CAS操作
注:该篇文章已与我的个人博客同步更新。欢迎移步 https://cqh-i.github.io 体验更好的阅读效果。CAS操作CAS是单词compare and set的缩写,意思是指在set之前先比较该值有没有变化,只有在没变的情况下才对其赋值。我们常常做这样的操作if(a==b) { a++;}试想一下如果在做a++之前a的值被改变了怎么办?a++还执行吗?出现该问题...转载 2019-09-20 21:44:05 · 177 阅读 · 0 评论 -
(转载)【深入理解JVM】:类加载器与双亲委派模型
注:该篇文章已与我的个人博客同步更新。欢迎移步 https://cqh-i.github.io 体验更好的阅读效果。类加载器加载类的开放性类加载器(ClassLoader)是Java语言的一项创新,也是Java流行的一个重要原因。在类加载的第一阶段“加载”过程中,需要通过一个类的全限定名来获取定义此类的二进制字节流,完成这个动作的代码块就是类加载器。这一动作是放在Java虚拟机外部去实现...转载 2019-09-21 08:15:57 · 200 阅读 · 0 评论 -
(转载)彻底理解ReentrantLock
注:该篇文章已与我的个人博客同步更新。欢迎移步 https://cqh-i.github.io 体验更好的阅读效果。1. ReentrantLock的介绍ReentrantLock重入锁,是实现Lock接口的一个类,也是在实际编程中使用频率很高的一个锁,支持重入性,表示能够对共享资源能够重复加锁,即当前线程获取该锁再次获取不会被阻塞。在java关键字synchronized隐式支持重入性(...转载 2019-09-21 09:03:22 · 122 阅读 · 0 评论