![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 59
金陵张大炮
有趣的灵魂!
展开
-
理解AOP / IOC /DI
理解Spring的AOP和Ioc/DI就这么简单_浮晓悠羡-CSDN博客_aop ioc原创 2021-10-18 20:03:15 · 92 阅读 · 0 评论 -
Java之什么是JIT (Just In Time)?
JIT概念JIT:Just In Time Compiler,一般翻译为即时编译器,这是是针对解释型语言而言的,而且并非虚拟机必须,是一种优化手段,Java的商用虚拟机HotSpot就有这种技术手段,Java虚拟机标准对JIT的存在没有作出任何规范,所以这是虚拟机实现的自定义优化技术。HotSpot虚拟机的执行引擎在执行Java代码是可以采用【解释执行】和【编译执行】两种方式的,如果采用的是编译执行方式,那么就会使用到JIT,而解释执行就不会使用到JIT,所以,早期说Java是解释型语言,是没有任何问题转载 2021-08-03 10:46:51 · 1781 阅读 · 0 评论 -
java +““拼接成字符串 和 String.valueOf()的区别
使用 + “” 拼接方式,本质上是先将字符串转换为StringBuffer 后在使用append ()方法,而append()方法也是使用的String.valueOf()使用String.valueOf(),本质上则是使用Object.toString()方法原创 2021-06-16 16:22:27 · 484 阅读 · 0 评论 -
null.equals引起的空指针
当我们比较两个参数值是否相等的时候,经常用到equals,但是 偶尔我们会忘记判断非空,例如写出这样的代码:这样就会引起空指针,正确的写法是,我们知道java中对equals的定义: 对于任何非空引用值 x,x.equals(null) 都应返回 false。关于null的理解:1.null是任何引用类型的默认值,不严格的说是所有object类型的默认值。这对所有变量都是适用的,如成员变量、局部变量、实例变量、静态变量2.null是任何一个引用类型变量的默认值,在java中你不能使用null引用转载 2021-06-01 11:27:01 · 374 阅读 · 0 评论 -
面试题积累
Java篇基础1. 深拷贝和浅拷贝;2. String 、StringBuffer和StringBuilder;3. Java 的四大引用方式;4. 面向对象的特性;5. 重写和重载;6. 抽象类和接口;提高1. String 长度有限制吗?是多少?原创 2021-05-10 10:09:30 · 114 阅读 · 0 评论 -
String长度有限制吗?是多少?
前言话说Java中String是有长度限制的,听到这里很多人不禁要问,String还有长度限制?是的有,而且在JVM编译中还有规范,而且有的家人们在面试的时候也遇到了,本人就遇到过面试的时候问这个的,而且在之前开发的中也真实地遇到过这个String长度限制的场景(将某固定文件转码成Base64的形式用字符串存储,在运行时需要的时候在转回来,当时文件比较大),那这个规范限制到底是怎么样的,咱们话不多说先䁖䁖去。String首先要知道String的长度限制我们就需要知道String是怎么存储字符串的,St转载 2021-05-10 09:51:50 · 854 阅读 · 0 评论 -
Java 枚举类的基本使用
枚举(enum)类型是Java 5新增的特性,它是一种新的类型,允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示。所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类(可以实现接口)。1、常量的使用在JDK1.5之前,我们定义常量都是:public static fianl…。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。package com; public enum Color转载 2021-04-13 15:02:45 · 115 阅读 · 0 评论 -
华为JDK镜像地址
https://mirrors.huaweicloud.com/java/jdk/原创 2021-04-08 16:09:50 · 4478 阅读 · 0 评论 -
多线程并发变量问题
背景 在Gnss功耗优化的项目中我们需要给其他模块提供一个接口,即我们Imp类中的功耗信息,但是我们功耗信息会在每次上传之后就进行了删除操作,因此就出现了多线程并发操作变量的情况,至此记录如下;情景再现 我模拟了一下项目中会出现的情况代码如下:public static List<Integer> list = new ArrayList(); public static void main(String[] args) { for (int i = 0;转载 2021-04-01 11:33:18 · 307 阅读 · 0 评论 -
Java多线程并发去调用一个类的静态方法,会有问题吗?
总的结论:java是线程安全的,即对任何方法(包括静态方法)都可以不考虑线程冲突,但有一个前提,就是不能存在全局变量。如果存在全局变量,则需要使用同步机制。如下通过一组对比例子从头讲解:在多线程中使用静态方法会发生什么事?也就是说多线程访问同一个类的static静态方法会发生什么事?是否会发生线程安全问题?public class Test { public static void operation(){ // ... do something }}事实证明只要转载 2021-04-01 10:00:50 · 4648 阅读 · 0 评论 -
Java内部类
一、什么是内部类?可以将一个类的定义放在里另一个类的内部,这就是内部类。广义上我们将内部类分为四种:成员内部类、静态内部类、局部(方法)内部类、匿名内部类。/*** 我是一个外部类(外部是相对内部而言)*/public class Outer{ /** * 我是一个内部类 */ class Inner{ //... }}二、为什么要用内部类?使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都原创 2021-03-19 17:49:53 · 171 阅读 · 0 评论 -
JDK1.7和JDK1.8中HashMap为什么是线程不安全的?
https://blog.csdn.net/swpu_ocean/article/details/88917958总结HashMap的线程不安全主要体现在下面两个方面:在JDK1.7中,当并发执行扩容操作时会造成环形链和数据丢失的情况。JDK1.8中,在并发执行put操作时会发生数据覆盖的情况。...原创 2021-03-17 09:43:54 · 222 阅读 · 0 评论 -
单例模式
双重检查懒加载双重检查懒加载需要控制单例的可见性,多线程情况下可能出现空指针问题双重检查锁模式解决了单例、性能、线程安全问题,但是这种写法同样存在问题:在多线程的情况下,可能会出现空指针问题,出现问题的原因是JVM在实例化对象的时候会进行优化和指令重排序操作。public class DoubleCheckLockMode { private static DoubleCheckLockMode instance; /** * 私有化构造函数 */原创 2021-03-10 17:09:15 · 114 阅读 · 0 评论 -
Java 并发
一、使用线程有三种使用线程的方法:实现 Runnable 接口;实现 Callable 接口;继承 Thread 类。实现 Runnable 和 Callable 接口的类只能当做一个可以在线程中运行的任务,不是真正意义上的线程,因此最后还需要通过 Thread 来调用。可以理解为任务是通过线程驱动从而执行的。实现 Runnable 接口需要实现接口中的 run() 方法。public class MyRunnable implements Runnable { @Overrid原创 2021-03-04 14:39:52 · 179 阅读 · 1 评论 -
Java 容器
一、概览容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表。Collection1. SetTreeSet:基于红黑树实现,支持有序性操作,例如根据一个范围查找元素的操作。但是查找效率不如 HashSet,HashSet 查找的时间复杂度为 O(1),TreeSet 则为 O(logN)。HashSet:基于哈希表实现,支持快速查找,但不支持有序性操作。并且失去了元素的插入顺序信息,也就是说使用 Itera原创 2021-03-04 10:45:01 · 126 阅读 · 1 评论 -
Java 基础
一、数据类型基本类型byte/8char/16short/16int/32float/32long/64double/64boolean/~boolean 只有两个值:true、false,可以使用 1 bit 来存储,但是具体大小没有明确规定。JVM 会在编译时期将 boolean 类型的数据转换为 int,使用 1 来表示 true,0 表示 false。JVM 支持 boolean 数组,但是是通过读写 byte 数组来实现的。Primitive Data TypesTh原创 2021-03-03 11:35:40 · 180 阅读 · 0 评论 -
Java类加载机制
背景项目中需要调用到一个apk内的class方法,因此用了反射,为了彻底搞清楚反射,则再来学习一下Java的类加载机制。注: 不同进程间是不可以用反射互调的,可以参考:https://blog.csdn.net/Grekit_Sun/article/details/114284107类加载的基本原理在完成代码的编写之后,编译器会将我们的java文件编译成对应的class文件(二进制字节码文件),而类加载器的作用便是在用到这些class的时候将其加载到JVM中,生成对应的class对象。让我们来看看原创 2021-03-02 14:57:49 · 107 阅读 · 0 评论 -
Java进程之间以及和JVM关系
先提出两个问题:1、命令启动了两个java程序,它们之间是什么关系?2、java程序又和JVM之间是什么关系,它们是共用一个JVM,还是每个java程序,都有一个JVM?演示1、用命令启动两个一样的java程序。2、用jvisual观察到有两个WhileTrue程序的进程。进程的概念在多道程序工作的环境下,操作系统必须能够实现资源的共享和程序的并发执行,从而使程序的执行出现了并行、动态和相互制约的新特征。为了能反映程序活动的这些新特点, UNIX 引入了进程( process)这个概念。原创 2021-03-02 14:15:33 · 643 阅读 · 0 评论 -
Java 反射详详详详详解
反射是框架设计的灵魂使用的前提条件: 必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码))一.反射概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的原创 2021-03-01 15:58:58 · 213 阅读 · 3 评论 -
Java中wait和sleep的区别
1.概述在这篇简短的文章中,我们将看一下核心Java 中的标准sleep()和wait()方法,并了解它们之间的差异和相似之处。2. wait和sleep之间的一般差异简单地说,wait()是一个用于线程同步的实例方法。它可以在任何对象上调用,因为它在java.lang.Object上定义,但它只能从synchronized块中调用。它释放对象的锁定,以便另一个线程可以跳入并获取锁。另一方面,Thread.sleep()是一个可以从任何上下文调用的静态方法。Thread.sleep()暂停当前原创 2021-02-23 17:40:24 · 143 阅读 · 0 评论 -
深拷贝和浅拷贝的区别
深拷贝和浅拷贝最根本的区别在于是否真正获取一个对象的复制实体,而不是引用。假设B复制了A,修改A的时候,看B是否发生变化:如果B跟着也变了,说明是浅拷贝,拿人手短!(修改堆内存中的同一个值)如果B没有改变,说明是深拷贝,自食其力!(修改堆内存中的不同的值)浅拷贝(shallowCopy)只是增加了一个指针指向已存在的内存地址,深拷贝(deepCopy)是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存,使用深拷贝的情况下,释放内存的时候不会因为出现浅拷贝时释放同一个内存的错原创 2021-02-23 15:13:29 · 110 阅读 · 0 评论 -
JAVA内存模型
程序计数器:代码的行号,记录程序执行到的行号;局部变量表:存放局部变量;操作数栈:加、减、乘、除;动态连接:局部变量指向堆内的内存;返回地址:返回代码地址内存栈:存放局部变量不可以被多个线程共享空间连续,速度快堆:存放对象可以被多个线程共享空间不连续,速度慢,但是灵活方法区:存放类的信息:代码、静态变量、字符串常量等等可以被多个线程共享空间不连续,速度慢,但是灵活一、局部变量存储在方法栈中在方法中声明的变量,即该变量是局部变量,每当程序调用..原创 2021-02-04 14:51:53 · 84 阅读 · 0 评论 -
GC 过程
背景 功耗大数据打点的过程中,我定义了一个静态全局变量如下:private static IMiCharge mIMiCharge = IMiCharge.getInstance();同事提了一句当对象被GC回收之后就会为空,这边先说一下结果此对象是不会被GC回收的,那么接下来我们就一起来看下GC的过程。判断是否要被GC回收的标准——GCROOT什么是GC Root首先我们知道标记算法,JVM的标记算法我们可以了解为一个可达性算法,所以所有的可达性算法都会有起点,那么这个起点就是GC Roo原创 2021-02-04 14:50:45 · 320 阅读 · 0 评论 -
OutputStream和InputStream的区别
我们所说的流,都是针对内存说的,比如为什么打印到屏幕上就是System.out.println();而从屏幕等待用户输入的却是System.in呢?因为对于内存来说,把字符串打印到屏幕上是从内存流向屏幕这个显示器的,也就是输出,而从屏幕等待用户输入呢?就是等待键盘将字符输入到内存中。所以,你根本就不用死记硬背,当你遇到IO的时候,就想两件事,第一,我的内存是中心,第二看看流的方向(矢量)!好吧,那么往硬盘上写文件是out还是in呢?别一看到“写”文件你就说in,那是望文生义,你看,写文件的流向,是原创 2020-12-03 14:50:45 · 320 阅读 · 0 评论 -
Java中判断String不为空的问题
Java中判断String不为空的问题一、判断一个字符串str不为空的方法有:str!=null;“”.equals(str);str.length()!=0;( 注意:length是属性,一般集合类对象拥有的属性,取得集合的大小。 例如:数组.length就是取得数组的长度。 length()是方法,一般字符串类对象有该方法,也是取得字符串长度。 例如:字符串.length();)说明:null表示这个字符串不指向任何的东西,如果原创 2020-12-03 14:48:40 · 2166 阅读 · 0 评论