JVM
一、垃圾回收1.1 如何判断对象是否可以回收1.1.1 引用计数法A、B对象循环引用,但是别的地方没有使用A、B了。由于A、B的引用计数都为1,所以无法回收,造成内存泄漏。 1.1.2 可达性分析算法JAVA使用这个算法 确定根对象GC Root(肯定不能被垃圾回收的对象)。判断每个对象是不是被根对象直接或间接的引用,如果是,则不能作为垃圾回收。 1.1.3 五种引用 引用本身也是一个对象,当软/弱引用的对象被回收后,可以将软引用/弱引用自己(对象)放入引用队列,然后通过引用队列进一步释放他们自己的对象所占的空间。 虚引用/终结器引用必须配合引用队列一起使用 (1) 强引用定义:Object obj = new Object(); 这种方式的赋值 特点:只要引用关系还存在,GC(垃圾回收器)就永远不回收被引用的对象。 (2) 软引用特点:当系统内存充足时不会回收软引用的对象;但当内存不足时,回收软引用的对象。 (3) 弱引用特点:只要发生了垃圾回收,不管内存是否充足,都会回收弱引用的对象。 (4)...
javase 单元测试
一、单元测试引入为什么需要单元测试,而不能自己在main方法中测试? 在main方法中测试,只能手动的规定要测试哪些方法,如果某一个方法出错,就无法再对后续的方法进行测试。 Junit单元测试框架优点 可以针对某个方法执行测试,也支持一键完成对全部方法的自动化测试,且各自独立。 会自动生成测试报告,不需要程序员自行分析测试结果。 步骤 举例 二、反射加载类,并以编程的方式去解剖类中的各种成分(成员变量、方法、构造器) 1、获取Class对象 2、获取类的构造器 举例: 3、获取类的成员变量 4、获取类的方法 反射的作用 基本作用:可以得到一个类的全部成分然后操作。 可以破坏封装性 可以绕过泛型的约束 适合做JAVA的框架,主流的框架基本都会基于反射设计出一些通用的功能 三、注解让其他程序根据注解信息来决定怎么执行该程序。 1、自定义注解 特殊属性名:value 如果注解中只有一个value属性,使用注解时,value名称可以不写。 2、注解的原理 3、元注解注解某个注解的注解 @Target 声明被修饰的注解只能在哪些位置使用 @Retention...
javase 多线程
一、多线程(一)创建多线程的三种方法1、继承Thread类,重写run()方法 注意:一定要调用线程对象的start方法,如果调用run方法,JAVA会把它看成一个普通的线程。 2、实现Runnable接口,重写run()方法 举例: 写法二、匿名内部类: 写法三、lambda表达式 3、实现Callable接口前两种方法主线程拿不到子线程的返回值。 而第三种方法可以。 举例: (省略MyCallable的定义代码,其中还写了MyCallable的有参构造函数,这样就可以对其进行传参了。) 那么,为什么不直接把FutureTask的功能给Callable呢?为什么还要多加一层? gemini的回答: 总结 (二)线程的常用方法 (三)线程同步1、同步代码块 synchronized()括号中的对象相当于是信号量 使用规范 2、同步方法 举例 同步代码块和同步方法的区别 同步代码块锁的范围更小,性能更好 同步方法的可读性更好,实现更简单 3、Lock锁相比前两种更加灵活。 12345// 创建锁对象private final Lock lk = new...
javase 集合、Strean流、函数式接口
一、集合(一)Collection集合 Collection集合的特点 1、ListArrayList数组、LinkedList链表 2、SetHashSetJDK8前:数组+链表 JDK8后:数组+链表+红黑树 LinkedHashSetHashSet中的每个元素都加上前后指针,变成双向链表 TreeSet自定义排序规则 Double.compare(a, b)默认是升序,即a-b>0则a在排在后面。 如果修改成Double.compare(b,...
灵茶山艾府 算法基础
一、相向双指针利用数组已经排序的性质,两数相加和target比较大小,可以知道整个数组和target的关系。 【一定要找到一个我们能明确知道大了是往哪移,小了是往哪移动的情况才能套用这个方法。即固定的那个数不能是随便固定的。】 1、两个数从两端开始,left=2, right=8。此时left + right=10 >...
javase 引入、基本语法
一、引入JAVA语言特性简单性:不像c++支持多继承,无指针。底层由c++实现。 面向对象 可移植性:一次编译,到处运行。在win上编译后可以在Linux上运行。 Java程序在Java虚拟机上运行,JVM : Java virtual machine JDK :Java开发工具包 多线程 健壮性:产生的垃圾是自动回收的,不需要像c++一样手动回收内存空间。 安全性 JAVA的加载与执行 注:.class文件是字节码文件,不是纯粹的二进制文件,否则操作系统就可以直接运行了。 编译:使用JDK中自带的javac.exe进行编译使用方法: 1javac java源文件的路径 一个源文件可能生成多个.class文件 .class文件生成后,删除.java文件不影响程序的运行,但最好不要删掉,以防后面要修改。 运行:使用java.exe运行使用方法: 磁盘上有一个A.class 1java A...
移动软件开发 实验6:推箱子游戏
一、实验目标1、综合所学知识创建完整的推箱子游戏; 2、能够在开发过程中熟练掌握真机预览、调试等操作。 二、实验步骤(一)创建页面文件在pages文件夹中创建index,game页面。 (二)创建images、utils文件夹将图片保存在images文件夹中,在utils中添加data.js (三)导航栏设计12345678910{ "pages": [ "pages/index/index", "pages/game/game" ], "window": { "navigationBarBackgroundColor": "#E64340", "navigationBarTitleText": "推箱子游戏" }} (四)页面设计1、公共样式设计 123456789101112.container{ height:...
移动软件开发 实验5:第一个 HarmonyOS 应用
一、实验目标1、掌握如何构建 HarmonyOS应用; 2、掌握应用程序包结构、资源文件的使用; 3、掌握ArkTS的核心功能和语法等基础知识,为后续的应用开发奠定基础。 二、实验步骤(一)创建ArkTS工程1、使用DevEco Studio,创建工程。选择Empty Ability。 (二)构建第一个页面1、将pages中的index.ets文件中的相对布局(RelativeContainer)改为线性布局(Row/Column) 12345678910111213141516@Entry@Componentstruct Index { @State message: string = 'Hello World'; build() { Row() { Column() { Text(this.message) .fontSize(50) .fontWeight(FontWeight.Bold) } ...
移动软件开发 实验4:口述校史
一、实验目标 1、掌握视频API的操作方法;2、掌握如何发送随机颜色的弹幕。 二、实验步骤(一)新建小程序项目并创建相关代码文件(二)页面元素的创建与排版1234567891011121314<!-- 视频播放器 --><video id='myVideo' controls></video><!-- 弹幕区域 --><view class='danmuArea'> <input type="text" placeholder="请输入弹幕内容"></input> <button>发送弹幕</button></view><!-- 视频列表 --><view class='videoList'> <view class='videoBar'> <image...
移动软件开发 实验3:微信小程序云开发
一、实验目标学习微信小程序云开发的基础知识。能够完成利用文本搜索的功能就好,图像识别、语音识别接口有时有问题,不强求。 二、实验步骤(一)注册百度智能云,创建图像识别应用,记录api key和secret key图像识别 - 百度智能云控制台 (二)导入小程序项目 (三)创建云开发环境 (四)将环境id,小程序appid,百度智能云api key和secret key分别填入相应位置环境id: 小程序appid: 百度智能云api key和secret...