自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(74)
  • 收藏
  • 关注

原创 遇到Attempt to invoke virtual method ‘java.lang.Object android.content.Context.的解决方案

java.lang.NullPointerException:Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference今天遇到一个问题 ,在Fragment中使用Recyclerview设置空布局的时候出现如上问题:View view = LayoutInflater.fro.

2020-09-27 22:26:48 14812

原创 Android 如何屏蔽返回键和Home键

有时候需要一个功能在进入一个 Activity后暂时屏蔽掉home键和back键。一、屏蔽返回键Android Activity返回键监听的两种方式:1、覆写Activity的OnBackPressed方法@Overridepublic void onBackPressed() { // super.onBackPressed();  // 完全由自己控制返回键逻辑,系统不再控制,但是有个前提是:  // 不要在Activity的onKeyDown或者OnKeyUp中拦截掉返回键

2020-09-11 16:58:06 11196 2

原创 Android activity启动关闭时滑动出现消失(并解决activity跳转时出现的短暂黑屏)

Activity在切换或者是退出的时候可以使用渐入,滑动,缩放等动态效果。使用的就是方法overridePendingTransition,可以直在Activity当中直接调用。第一个参数为Activity进入时的动画,第二参数为Activity离开时的动画效果。此方法在startActivity()或者是finish()后调用,在切换或是退出时就会调用此动画。不过有时候overridePendingTransition 这个函数会不起作用,总结下,大概是以下几个方面的原因:1、andr..

2020-09-09 18:04:02 1974

原创 Android 各API对应Android版本以及使用

Android版本名称CodeName Android版本 版本发布时间 对应API (nocodename) 1.0 2008年9月23日 APIlevel1 (nocodename) 1.1 2009年2月2日 APIlevel2 ...

2020-09-08 14:57:56 1118

原创 JVM的常量池:String.intern()的理解以及字符串常量池解析

大致过程:在该类的class常量池中会存放一些符号引用,在类加载之后,会将class常量池中存放的符号引用加载到内存中的运行时常量池中,然后经过验证,准备阶段之后,会在堆中生成驻留字符串的实例对象(也就是””括起来的),然后将这个对象的引用存到全局String Pool中,也就是StringTable中,最后在解析阶段,要把运行时常量池中的符号引用替换成直接引用,通过直接查询Str...

2020-04-30 15:24:50 527 2

原创 JVM的常量池:什么是字符串常量池、运行时常量池、Class常量池

在 JAVA 语言中有8中基本类型和一种比较特殊的类型String。这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念。常量池就类似一个JAVA系统级别提供的缓存。首先,比较有名的常量池有两个,分别是运行时常量池和静态常量池,但是目前可以被称为常量池的有三个:字符串常量池、运行时常量池、静态常量池。这三个常量池的变动的关键时刻是在JDK1.7的时候:(1)...

2020-04-30 14:52:14 414

原创 Android:Handler消息机制(四)——为什么主线程不会因Looper.loop()里的死循环卡死

这个问题需要通过三方面来讲:1.为什么主线程不会因为Looper.loop()里的死循环卡死?2.为什么主线程一直在死循环却不会占用大量CPU消耗?3.那究竟是什么导致主线程卡死?一、为什么主线程不会因为Looper.loop()里的死循环卡死?首先理解“线程进入死循环”这个问题, 就是在循环体内具有一段可执行的子程序,由于for(; ;)的调度导致这段子程序持...

2020-04-29 22:35:27 2292

原创 Android:Handler消息机制(三)——Handler源码分析

一、处理者Handler类里的主要方法:Handler():构造方法sendMessage(Message msg):将消息发送到消息队列post(Runnable r):将消息发送到消息队列dispatchMessage(Message msg):将消息发送给对应的HandlerhandleMessage(Message msg):根据某一个消息进行相关的处理和操作...

2020-04-27 20:35:04 338

原创 java:JVM的内存结构和布局

class文件由JVM中的类加载器加载各个类的字节码文件,加载完毕之后会交由JVM执行引擎执行。在整个程序执行过程中,JVM会用一段内存空间来存储程序执行期间用到的数据和相关信息,这段内存空间被称作为运行时数据区,也就是JVM内存结构。java内存结构包括虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。方法区和堆是所有线程共享的内存区域;而java栈、本地方法栈和程序员计数器是运行是线程私有...

2020-04-27 14:23:05 278

原创 Android:Handler消息机制(二)——如何使用Handler消息机制

一、消息机制的工作步骤Handler的工作流程分为四个步骤异步通信准备、消息发送、消息循环、消息处理:1.异步通信准备:在主线程中创建处理器对象、消息队列对象、Handler对象,Looper和MessageQueue均属于主线程,在创建MessageQueue后Looper自动进入消息循环,此时Handler自动绑定主线程的Looper、MessageQuene,并且启动子线程2.消...

2020-04-26 15:53:55 379

原创 Android:Handler消息机制(一)——什么是Handler消息机制

一、什么是Android的消息机制Android的消息机制主要是指Handler的运行机制,handler是一套消息传递异步通信机制,Handler是Android的消息机制的上层接口,在开发过程中只需要和Handler交互即可,目的是将一个耗时任务切换到某个指定的线程中去执行。Handler的运行需要底层的MessageQueue和Lopper一起完成,这三者其实是一个整体。额外使用Mess...

2020-04-26 15:35:44 593

原创 什么是强引用、软引用、弱引用、虚引用以及四种引用的区别及其实现

在JDK1.2以前引用的传统定义: 如果引用类型的数据中存储的数值代表的是另一块内存的起始地址,就称这块内存代表着一个引用。但是这种定义有些狭隘,一个对象在这种定义下只有被引用或者没有被引用两种状态。不具备对于对象状态的描述。所以在之后Java对引用的概念做了扩充,将引用分为强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Referenc...

2020-04-08 18:27:53 1087

原创 什么是Java虚拟机?为什么可以被称作是“平台无关的编程语言”?

java虚拟机是整个java平台的基石,是实现平台无关性的基础,是用以实现硬件无关与系统无关的关键部分。 java作为编译代码的运行平台,Java虚拟机是一个执行class格式文件的虚拟机进程。拥有自己的指令集(字节码)和各种运行时内存区域,通过要求Class文件符合强制性语法以及特定的结构来保障用户机器不受恶意代码的侵害,只要符合class文件格式就可以在java虚...

2020-04-04 12:43:27 494

原创 java的泛型解析以及相关知识点

一、为何引入泛型 在java增加泛型之前,这种类似的功能是通过维护Object数组实现的,这种方法有两个问题,一是当获取的一个值的时候必须强制类型转换,二是没有错误检查可以向数组内添加任何类的对象。同时一般的类和方法,只能使用具体的类型:要么是基本类型,要么是自定义的类,如果要编写可以应用于多种类型的代码,这种限制对代码的束缚就会很大。但是编码者希望编写的是更加通用化的代码,使代码...

2020-02-02 17:54:49 407

原创 Android核心功能模块介绍

以下是Android的各个重要模块,从具体的功能模块了解Android,就可以知道Android具体可以做些什么 一、界面框架 Android界面框架最有特色的就是资源和布局体系,通过完善的控件库和简明的接口,可以快速搭建界面。 Android的每个交互界面都由一棵控件树构成,控件树上的控件皆派生自android.view.View类,非子节点的控...

2019-10-05 15:38:13 2996

原创 Android 中Scheme协议的使用详解

一、首先什么是Scheme? android中的scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面;通过scheme协议,服务器可以定制化告诉App跳转那个页面,可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转页面等。 客户端应用可以向系统注册一个 URL Scheme,该Scheme...

2019-09-29 10:31:43 5020

原创 JDK9新特性

JDK9新特性: 1.模块系统 2.JShell和Jlink 3.不可变集合类工厂方法 4.接口中的私有方法 5.一些改进的API 6.try-with-resources改进 7.HTTP2支持 8.平台日志API和服务 9.垃圾回收器 10.增加加密算法 一、Java 平台...

2019-05-16 18:12:21 572

原创 使用Git的常用命令汇总

一、新建代码库# 在当前目录新建一个Git代码库$ git init# 新建一个目录,将其初始化为Git代码库$ git init [project-name]# 下载一个项目和它的整个代码历史$ git clone [url]二、配置Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。# 显示当前...

2019-05-14 09:45:54 213

原创 java多线程什么时候释放锁

由于等待一个锁定线程只有在获得这把锁之后,才能恢复运行,所以让持有锁的线程在不需要锁的时候及时释放锁是很重要的。在以下情况下,持有锁的线程会释放锁: 1、当前线程的同步方法、代码块执行结束的时候释放 2、当前线程在同步方法、同步代码块中遇到break 、 return 终于该代码块或者方法的时候释放。 3、当前线程出现未处理的erro...

2019-05-12 20:52:47 3478

原创 java线程的各种状态

java线程在运行的生命周期中可能处于六种不同的状态,在给定的某一个时刻,线程只能处于其中的一个状态。在程序运行中线程状态的具体含义:线程在自身的生命周期中并不是固定的处于某个状态,而是随着代码的不断执行在不同的状态之间进行切换。 (1)NEW:初始状态,线程被创建但是还没有调用start()方法 (2)RUNNABLE:运行状态,java线程将操作系统中的就绪和运行两...

2019-05-11 15:12:38 465

原创 java在多线程情况下如何初始化Class对象

java在多线程情况下,初始化一个类或接口的处理过程如下,大致分为5个过程: (1)通过在Class对象上同步获得对象的初始化锁,来控制类或接口的初始化,这个获取锁的线程会一直等待直到当前线程能获得这个初始化锁。当一个Class对象还没有初始化,这个初始化状态被标记为noInitualization,假设有两个线程A和B同时初始化这个Class对象,A、B线程尝试获取Cl...

2019-05-07 21:07:23 971

原创 关于java内存模型的浅析

首先本篇介绍的是java内存模型而不是java的内存结构,这两个是不同的,很多人将这两个概念搞混。所以就先进行介绍一下java内存结构,这样可以和内存模型有一些区分: java内存结构 由Java虚拟机规范定义。描述的是Java程序执行过程中,由JVM管理的不同数据区域。各个区域有其特定的功能。如下: 1、以上是Java虚拟机规范...

2019-05-06 18:12:57 219

原创 java的双重检查锁定详解

双重检查锁定模式(也被称为"双重检查加锁优化","锁暗示"(Lock hint)) 是一种软件设计模式用来减少并发系统中竞争和同步的开销。有时候会在单例模式里遇到这个双重检查锁定,这个技术是单例模式的一种具体的实现,通过它来进行单例模式里的延迟初始化,保证在经过延迟初始化之后还是只有一个单例类的实例被创建。 java程序中可能需要推迟一些高开销的对象初始化操作,只有在使用这些对...

2019-05-04 20:23:02 1431

原创 Java版本:JDK8的十大新特性介绍

JDK8新特性: 1.Lambda表达式 2.新的日期API 3.引入Optional 4.使用Base64 5.接口的默认方法和静态方法 6.新增方法引用格式 7.新增Stream类 8.注解相关的改变 9.支持并行(parallel)数组 10.对并发类(Concurrency)的扩展。...

2019-04-30 21:11:28 47003 6

原创 java的Object里wait()实现原理

在进行wait()之前,就代表着需要争夺Synchorized,而Synchronized代码块通过javap生成的字节码中包含monitorenter和monitorexit两个指令。在进如锁的时候会执行monitorenter,执行monitorenter指令可以获取对象的monitor。同时在执行Lock.wait()的时候也必须持有monitor对象。 在多核环境下,多个...

2019-04-22 21:10:33 13539 5

原创 详解Android系统启动是如何启动的

首先对Android的系统启动流程进行一个介绍,这个启动流程是贯穿Android四层架构的过程: 一、启动电源以及系统启动:引导芯片代码从固化在ROM上的预定义地方开始执行,加载引导程序BootLoader到RAM然后执行 二、引导程序BootLoader:是在Android系统启动前的程序,其主要作用是把系统OS拉起来并运行 三、Linux内核启动:在启动时,设置缓...

2019-04-21 20:09:33 1577

原创 java的集合框架浅析:包含的基本接口以及常用类

java集合的根本是Iterator和Collection两个接口。Collection本身代表了集合,拥有最基本的方法:添加、删除、返回个数、清空集合等。而Iterator接口是Collection的父接口主要用来定义遍历集合的规则,被称作迭代器,里面有两个重要方法next()和hashnext()。 在java集合里大致可以分为Set、List、Queue、Map四种体系。S...

2019-04-14 20:28:53 488 2

原创 Android五层架构

之前写过一篇详细的Android四层架构,但是最近发现Android的架构变为了五层,所以在之前的基础上简单介绍一下五层架构。1.应用层:应用层为系统对用户所提供的应用程序,负责与用户进行直接交互。2.framework应用框架层:向应用开发层开发者提供了统一开发的api,这一层是由java代码编写的,有ActivityManger(活动管理器),LocationManger(位置管理器)...

2019-04-10 12:42:15 2307

原创 Android开发中的dp、px、dpi、sp区别和联系

px :像素,代表屏幕上的像素点。dp :一个基于屏幕密度的抽象单位,如果一个160dpi的屏幕即标准屏幕,那么1dp=1px。长度宽度的数值要使用dp作为单位放入dimens.xml文件中,当dp不能作为适配单位时,就需要使用px。dip :等同于dp。dpi :一英寸长的直线上的像素点的数量来评价屏幕的显示效果,即像素密度。不同的设备,dpi值不同,显示效果不同,dpi的值...

2019-04-02 20:25:14 843

原创 HashMap、Hashtable以及ConcurrentHashMap的区别及原理

HashTable产生于JDK 1.1,HashMap产生于JDK 1.2,主要的区别有:1.线程安全2.处理速度3.使用迭代器不同4.输入参数不同5.扩充容量的大小方式不同6.计算hash以及index的方式不同。1.线程安全之间的区别 HashMap是非synchronized的,所以不能保证随着时间的推移Map中的元素次序是不变的,因为采用链表的方式来解决的,在对...

2019-03-10 12:10:24 6983 3

原创 编译原理:词法分析

    在词法分析的过程中还有一个过称是不能少的,就是在分析的时候一次读入多少代码。编译一个程序的时候,往往需要进行大量的字符串读入。前人做了比较多的优化,其中一项就是采用来个交替读入的缓冲区。每个缓冲区大概能有4096的字节,读一句话是足够的。读入程序中维护了两个指针:分别是lexemeBegin 指针,顾名思义,就是当前词素的开始处。以及forward 指针,就是试图判断词素的结尾是什么。这个...

2019-02-02 00:06:59 638

原创 java8的流以及流和集合的区别

     集合是一种内存中的数据结构,包含数据结构中目前所有的值,也就是说集合中的值都要先计算好才能够放入集合中,但是流则不同,流是概念上固定的数据结构其元素是按需计算的不能添加或者删除元素,只有在需要的时候才将需要的流计算出来。集合需要提前将值全部准备好而流则是将值准备一部分。     集合和流的一个区别则是遍历数据的方式,使用Collection接口需要用户去进行迭代,也就是在集合...

2019-01-18 17:42:09 1983

原创 关于java内部类为什么能够访问外部类属性详解

    首先解释一下什么是内部类,内部类是定义在一个类内部的类。分为两种情况:一种是被static关键字修饰的, 叫做静态内部类, 另一种是不被static关键字修饰的, 即是普通内部类。 在下文中所提到的内部类都是指这种不被static关键字修饰的普通内部类。 静态内部类虽然也定义在外部类的里面, 但是它只是在形式上(写法上)和外部类有关系, 其实在逻辑上和外部类并没有直接的关系。而一般的内部类...

2018-12-24 18:38:34 4077 1

原创 HTML中的标签对照表

<!--...--> 定义注释 <!DOCTYPE> 定义文档类型 <a> 定义超文本链接 <abbr> 定义缩写 <acronym> 定义只...

2018-12-24 11:02:24 536

转载 使用IDEA创建java ee项目

 

2018-12-22 11:39:50 3801 1

原创 java的协变性、逆变性、不变性

    先看看官方的解释:协变和逆变都是术语,前者指能够使用比原始指定的派生类型的派生程度更大(更具体的)的类型,后者指能够使用比原始指定的派生类型的派生程度更小(不太具体的)的类型。协变和逆变是指宽类型和窄类型在某种情况下(如参数、泛 型、返回值)替换或交换的特性。     简单地说A和B是类型,f表示类型转换,≤表示子类型关系:    协变:你可以用一个子类对象去替换相应的一个父类...

2018-12-14 15:09:53 690

原创 关于魔法数值、魔法数字、魔法值

    其实这几个词代表的是一个意思,只是不同的叫法,所谓魔法数值是指在代码中直接出现的数值,只有在这个数值记述的那部分代码中才能明确了解其含义。而在编程领域指的是莫名其妙出现的数字,数字的意义必须通过详细阅读才能推断出来。一般魔法数字都是需要使用枚举变量来替换的    魔法数值使代码的可读性大大下降。而且,如果同样的数值多次出现时,到底这些数值是不是带有同样的含义呢,谁也说不清楚。另一方面,...

2018-12-13 17:15:17 9549 1

原创 什么是一方库、二方库、三方库

      条目        别称       说明    一方库    一方包    本工程中的各模块的相互依赖,是本项目中的依赖    二方库    二方包    公司内部的依赖库,一般指公司内部的其他项目发布的jar包    三方库    三方包    公司之外其他组织的开源库, 来自第三方的依赖比如apache、google等发布的jar包,如logging、log4j等   ...

2018-12-13 16:21:01 5399

原创 java的回调相关

    模块间的调用分为三种方式:同步调用、异步调用、回调。    1.同步调用:是最基本的调用方式,类A的方法调用类B的方法,一直等待类B的方法执行完毕,类A的方法才继续执行下去,这种调用方法适合类B方法执行的时间不长的情况,因为类B方法执行时间过长会导致类A方法的余下代码不能顺利执行导致整个流程的阻塞。是一种单向调用。    2.异步调用:为了解决同步调用可能出现的阻塞,而导致整个流程...

2018-12-10 18:30:35 213

原创 java隐式参数和显式参数

      隐式参数:是调用函数的对象,在类的方法中调用了类的实例域,这个被调用的实例域就是隐式参数。或者说是当前方法的对象, 一般我们会使用this关键字来使用隐式参数,this表示调用该方法的当前类的当前实例,使用this关键字可以很好的把显式参数和隐式参数分离开。    显示参数:是通常所说的参数在方法名括号中间的参数,就是所谓能看得见的参数。...

2018-11-29 12:49:56 2045

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除