大家好,又见面了,我是你们的朋友全栈君。...这个文件内有标签,标签内就是展示出来的内容。...Exception(srcFile.getPath() + "所指文件不存在"); } ZipFile zipFile = new ZipFile(srcFile);//创建压缩文件对象...mkdirs(); } targetFile.createNewFile(); // 将压缩文件内容写入到这个文件中...,也是和普通的文件压缩一样的,大家可以去看一下别人的,我就不写了,只要将后缀改成.odt就可以了。
我的原因是因为在webpack.config.js配置中多引入了一个 //下面这个插件会将页面中的变量解析为正常的html文件,如何要在页面中使用htmlwebpackplugin变量则需要注释这个插件...$/, // loader: "raw-loader" // }, 只需要注释掉这个Loader就可以正常显示htmlwebpackPlugin中变量的值了
前言 在上一篇文章我们学习了Java的ClassLoader,很多同学会把Java和Android的ClassLoader搞混,甚至会认为Android中的ClassLoader和Java中的ClassLoader...这一篇文章我们就来学习Android中的ClassLoader,来看看它和Java中的ClassLoader有何不同。...BootClassLoader是一个单例类,需要注意的是BootClassLoader的访问修饰符是默认的,只有在同一个包中才可以访问,因此我们在应用程序中是无法直接调用的。...从PathClassLoader的构造方法也可以看出它遵循了双亲委托模式,不了解双亲委托模式请查看 Android解析ClassLoader(一)Java中的ClassLoader 这篇文章。...这得先从Zygote进程开始说起,不了解Zygote进程的可以查看Android系统启动流程(二)解析Zygote进程启动过程这篇文章。 ZygoteInit的main方法如下所示。
当使用@vue/composition-api 去获取一个组件中的ref对象时如 setup() { const myref= ref(null)...}) return { myref, } }, 请一定谨记 const myref= ref(null) 这里的变量名myref 要与dom中ref的值对应 ref对象 myref一定要使用...return暴露出去, 使用ref对象内部的值或方法要使用myref.value.?...的方式 以上三点任何一点没有做对,程序都会报错。...如果是TS的写法 ref的对象这样声明 const alertFormRef: Ref = ref(null) ElForm为组件的装饰器 相关链接 https://composition-api.vuejs.org
一、VAR 是3.5新出的一个定义变量的类型,其实也就是弱化类型的定义,VAR可代替任何类型,编译器会根据上下文来判断你到底是想用什么类型的。...二、至于什么情况下用到VAR 我想就是你无法确定自己将用的是什么类型,就可以使用VAR 类似 OBJECT,但是效率比OBJECT高点。 三、使用var定义变量时有以下四个特点: 1....也就是必须是var s = “abcd”形式,而不能是如下形式: var s;...一但初始化完成,就不能再给变量赋与初始化值类型不同的值了。 3. var要求是局部变量。 4. 使用var定义变量和object不同,它在效率上和使用强类型方式定义变量完全一样。
: var_export ≈ print_r < var_dump 2、调试的时候,调用 var_export、print_r、var_dump 的时候, 不用 在前加 echo 。...3、var_export,print_r 的 第二个参数为true则返回值。var_dump 不支持 ,所以用 file_put_contents 输出调试的时候不要用 var_dump。...4、推荐开发环境的调试直接使用 var_dump,可以获得详细的调试信息和代码行数定位;生产环境的调试使用 var_export 或 print_r,第二个参数记得设置为 true 转为返回输出值,而不是直接输出到前端影响线上...总结 以上所述是小编给大家介绍的PHP 中 var_export、print_r、var_dump 调试中的区别,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。...在此也非常感谢大家对开源独尊的支持!
window的添加逻辑,在此分享给大家: 一、悬浮窗的概念 在android中,无论我们的app界面,还是系统桌面,再或者是手机下方的几个虚拟按键和最上方的状态栏,又或者是一个吐司。。。...但是说了这么半天,悬浮窗到底是个啥东西,可能这个名词听得很多,但是仔细想想android中用到的哪个控件还是哪个类叫悬浮窗?...没有吧,那么View总该知道吧(不知道别说你是做android的) 其实说白了悬浮窗就是一个被包裹的view。...在这里主要关注一下ViewRootImpl的这个实例对象root,接下来的会走进root的setView中。...那么我们可以一步步跳回层层调用的代码,最终在ViewRootImpl中,对没有添加成功的抛出异常。
概述 不管是Java虚拟机,还是Android中的Dalvik/ART虚拟机,都是使用ClassLoader来将Class加载到内存。...本文分析涉及的源码为Android API 28 Android中ClassLoader的类型 Java中的ClassLoader可以加载jar文件和class文件,这一点在Android中不适用,因为...BootClassLoader是一个单例类,并且其访问修饰符是默认的,只有在同一个包中才可以访问,因此在应用程序中是无法直接使用的。...InMemoryDexClassLoader是Android 8.0新增的类加载器,继承自BaseDexClassLoader,用于加载内存中的dex文件。...中类加载的过程 在Android中,ClassLoader用loadClass方法来加载我们需要的类: public abstract class ClassLoader { public Class
js声明变量的方式有两种: 没有声明关键字 这种情况下变量会被自动添加到全局环境。 var 用var声明变量是最经典的方式,变量的作用域是它所在的环境(函数或对象,全局则是window对象)。...但js中不存在块级作用域,花括号不会限制变量的环境,且可以重复声明。 这两种方式声明的变量会被变量提升(Hoisting),即任何函数声明都被预先放入到内存中,但仍在原来的位置初始化。...---- 而ES6通过const与let提供了块级作用域的支持。 const 声明常量,其余与let一致。...let 拥有块级作用域:let定义的变量只能在当前块中访问,同一块中也不能用let重复声明相同的变量。
以一次实际开发中的实例,将几种对象转数组的方法都试了一遍: // const errorList = Object.keys(error) // console.log('error...就是将一个类数组对象或者可遍历对象转换成一个真正的数组。...所满足的数组限制是: object中必须有length属性,返回的数组长度取决于length长度 .key 值必须是数值 所以这里输出的是空数组 2 .Object.values(object...)(ES8):返回键值的遍历器 tips:与第一种不同的是不需要length属性,返回一个对象所有可枚举属性值 3.Object.keys(object):返回键名的遍历器 tips:返回一个对象的自身可枚举属性组成的数组...,数组中属性名的排列顺序和使用 for…in 循环遍历该对象时返回的顺序一致 4.Object.entries(object)(ES8):返回键值对的遍历器 tips:返回一个给定对象自身可枚举属性的键值对数组
版本号:maven-resources-plugin:3.1.0 bootstrap.yml spring: application: name: ...
这里有一份XML文件,接下来我们用不同的解析方式来解析这份文件 <?xml version="1.0" encoding="UTF-8"?...pull解析与其它方式不同的是,它需要将xml文件存放在资源文件res下面的xml文件夹下,解析的过程如下: 1)首先拿到一个Pull资源解析器,有时如果通过网络上下载xml文件的话,则需要去构造一个...Pull解析器,再将流设置给pull解析器, 接下来就是一样的,一个标签一个标签的去解析 //拿到一个XMLResourceParser //XmlPullParser parser=Xml.newPullParser...,就new一个Object出来,中括号就new一个Array出来,再用一个for循环去读取数据: StringBuffer stringBuffer=new StringBuffer(); try...GSON解析相对来说简单一些,但也有一定的局限性,比如说,数据类的属性字段和key值必须是一一对应的 //拿GSON去解析数据时,数据类的属性值跟key值必须是对应的 Gson gson=new
Android中的任何一个布局、任何一个控件其实都是直接或间接继承自View实现的,当然也包括我们在平时开发中所写的各种炫酷的自定义控件了,所以学习View的工作原理对于我们来说显得格外重要,本篇博客,...我们将一起深入学习Android中View的工作原理。...在ActivityThread中,当Activity对象被创建完毕后,会将DecorView添加到Window中,同时会创建ViewRootImpl对象,并将ViewRootImpl对象和DecorView...,比较好的习惯是在onLayout中去获取View的测量宽高和最终宽高 在Activity中,在onCreate,onStart,onResume中均无法正确获得View的宽高信息,这是因为measure...6.只要是ViewGroup的子类就必须要求LayoutParams继承子MarginLayoutParams,否则无法使用layout_margin参数。
Android中的线程池 复用Java中的Executor接口,具体实现类为ThreadPoolExecutor,它有以下几个参数: 参数 说明 注释 corePoolSize 线程池中核心线程数量...,可以理解为无法存储元素的队列,因此线程池接收到任务就会创建线程去执行。...等于上面我们画的图: 在这里插入图片描述 结论:阅读源码可以适当看下类头说明,尤其是Android源码的类头。可以帮我们更好的理解源码 从线程池入口进入,理解前面提到ctl是什么?...当addWorker()方法调用 t.start() 就会执行Worker类中的run()方法。...,只能阻塞当前线程,和后续要执行的线程,已经在线程中开始执行的任务是无法暂停的。
Java中的类加载器主要有两种类型,系统类加载和自定义类加载器。...至于为何没有打印出ExtClassLoader的父加载器Bootstrap ClassLoader,这是因为Bootstrap ClassLoader是由C/C++编写的,并不是一个Java类,因此我们无法在...Java代码中获取它的引用。...更加安全,如果不使用双亲委托模式,就可以自定义一个String类来替代系统的String类,这显然会造成安全隐患,采用双亲委托模式会使得系统的String类在Java虚拟机启动时就被加载,也就无法自定义...,则无法执行 out.close()。
var与let、const 一、var声明的变量会挂载在window上,而let和const声明的变量不会: var a = 100; console.log(a,window.a); // 100...console.log(b,window.b); // 10 undefined const c = 1; console.log(c,window.c); // 1 undefined 二、var...可以 var a = 100; console.log(a); // 100 var a = 10; console.log(a); // 10 let a = 100; let a = 10;...五、暂存死区 var a = 100; if(1){ a = 10; //在当前块作用域中存在a使用let/const声明的情况下,给a赋值10时,只会在当前作用域找变量a, // 而这时...* * 2、声明后不能再修改 * * 3、如果声明的是复合类型数据,可以修改其属性 * * */ const a = 100; const list = []; list[0] = 10;
),算出来的值就是当前父View还剩的空间大小 判断父View中的SpecMode 如果specMode为MeasureSpec.EXACTLY:意味着父View强制设置了一个大小给子View a)...判断childDimension>=0,如果满足,则将size设置成childDimension,Mode设置成MeasureSpec.EXACTLY,意味着如果XML中设置了具体的大小的话,那么就使用...XML中具体的指定的大小 b) 判断childDimension是否为LayoutParams.MATCH_PARENT,则将size设置成父View的size,Mode设置为MeasureSpec.EXACTLY...View一个限定的大小,子View不能超过这个大小 a) 判断childDimension>=0,如果满足,则将子View的size设置成XML中配置的大小,并且将 Mode设置成MeasureSpec.EXACTLY...,意味着View的大小就是XML中设置的大小 b) 如果childDimension为LayoutParams.MATCH_PARENT,则子View的大小为父View的size,但是Mode则为MeasureSpec.AT_MOST
CSS中原生的变量定义语法是:--*,变量使用语法是:var(--*),其中*表示我们的变量名称。...关于命名这个东西,各种语言都有些显示,例如CSS选择器不能是数字开头,JS中的变量是不能直接数值的,但是,在CSS变量中,这些限制通通没有,例如: :root{ --main-bg-color:...预处理器劣势 预处理器变量不是实时的 也许令新手惊讶的是,预处理器局限性最常见的情况是Sass无法在媒体查询中定义变量或使用@extend。...由于无法在匹配@media规则的基础上改变变量,所以唯一的选择是为每个媒体查询分配一个唯一的变量,并单独编写每个变体。 预处理器变量不能级联 每当使用变量,作用域的问题就不可避免的出现。...是否应该限制在块中? 由于CSS最终目的是为HTML添加样式,事实证明还有另一种有效的方法给变量限定作用域:DOM元素。但由于预处理器不在浏览器中运行并且无法看到标记,它们不能这样做。
今天第一次遇到const定义的变量,查阅了相关资料整理了这篇文章。主要内容是:js中三种定义变量的方式const, var, let的区别。 1.const定义的变量不可以修改,而且必须初始化。...必须初始化 3 console.log('函数外const定义b:' + b);//有输出值 4 // b = 5; 5 // console.log('函数外修改const定义b:' + b);//无法输出...2.var定义的变量可以修改,如果不初始化会输出undefined,不会报错。...1 var a = 1; 2 // var a;//不会报错 3 console.log('函数外var定义a:' + a);//可以输出a=1 4 function change(){ 5 a = 4...; 6 console.log('函数内var定义a:' + a);//可以输出a=4 7 } 8 change(); 9 console.log('函数调用后var定义a为函数内部修改值:' + a
因为看见宝塔的docker管理面板使用方便,所以我就试试,我先pull了一个debian系统,然后直接开始运行这个docker,然后apt update不成功,提示了一堆东西 在网上寻解决办法,也是五花八门...然后各种尝试,最后找得一种 主要是centos的防火墙的原因 请依次执行以下命令即可去掉序号 ①firewall-cmd --zone=public --add-masquerade --permanent...②firewall-cmd --reload ③systemctl stop firewalld ④systemctl start firewalld 最后,重启你的docker服务
领取专属 10元无门槛券
手把手带您无忧上云