- 博客(51)
- 收藏
- 关注
原创 Android学习笔记
Service学习定义:存在后台为我们执行一些耗时或者需要长时间执行的一些操作。Service两种启动模式,同样都有生命周期,启动模式不同对应的生命周期也不同。生命周期函数解析:onCreate():当Service第一次被创建后立即回调该方法,该方法在整个生命周期中只会调用一次onDestroy():当Service被关闭时回调该方法,该方法只会调用一次onStartCommand(intent,flag,startId):当客户端调用startService(Intent)方法时会回调,多
2021-09-30 17:21:35
157
原创 Activity生命周期
活动生命周期onCreate():活动一开始创建的时候,在这里面进行一些初始化操作onStart():活动由不可见变为可见的时候调用onResume():活动准备好和用户进行交互的时候调用,这个时候活动位于返回栈的栈顶,处于运行状态。onPause:这个时候系统准备去启动或者恢复另一个活动的时候调用,这个时候活动还是可见的onStop:活动由可见转为不可见的时候调用,它和onPause方法的区别就在于。如果启动的活动是一个对话框的时候,那么onPause会执行,而onStop不会执行onDes
2021-09-24 10:50:21
192
原创 仿豆瓣APP的本地缓存思路总结(一样作业的小伙伴可以参考下,学会才是自己的)
缓存思路:判断网络是否连接连接:请求资源,将数据传给recyclerView适配器未连接:判断缓存是否为空空:提示网络连接超时,请检查网络状态。非空:读取缓存内容,传给recyclerView适配器示例代码:// 网络连接判断public static boolean netWorkCheck(Context context){ ConnectivityManager cm = (ConnectivityManager)context.getSystemServic
2021-09-22 20:30:58
88
原创 Math.random()和Random类之间的联系
**Math.random()**是令系统随机产生大于等于0.0,小于1.0的伪随机double值。假设:产生一个1到4的变量,num = Math.random()*3+1;Random 类就是含有有参数和无参数两种的构造,其中不含参数的构造方法是每次将当前的系统时间作为种子,而含参数构造是使用一个固定值(参数)作为种子,种子也就是Random生成随机数时所使用的参数。每次使用时先创建一个Random对象,也叫随机数生成器,然后调用Random.next**()方法获取数值。Random类的注意事项:
2021-01-26 18:04:36
184
原创 next和nextLine的区别
next():1、一定要读取到有效字符后才可以结束输入。2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。next() 不能得到带有空格的字符串。nextLine():1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。2、可以获得空白。...
2021-01-26 09:14:09
569
原创 面向对象的理解
对于面向对象我的理解就是,如果要实现一个功能,我不需要去关心具体的实现步骤,只需要找到一个可以帮我实现此功能的人即可,让他来帮我去完成。package ifDome;import java.util.Arrays;public class Dome01 { public static void main(String[] args) { int[] array = {1,3,5,66,545,88,44}; /*要求打印格式为:[1,3,5,66,545,
2021-01-25 10:24:57
81
原创 如果希望一个方法的返回值中产生多个数据返回,怎么办?
解决方案:使用一个数组作为返回值类型即可。package dome01;public class Dome04 { public static void main(String[] args) { int[] result =calculate(1,2,3); System.out.println("总和是"+ result[0]); System.out.println("平均值是"+ result[1]); } publi
2021-01-25 10:05:59
150
原创 AS中导入新项目&手动配置gradle
首先是gradle构建工具的问题:大家都知道从国内访问国外的网站真是贼慢,但是项目构建没有gradle还是不行的。于是“手动导入gradle文件就会避免这个问题”创建一个新项目,查看gradle-wrapper.properties文件的最后一行的gradle版本例如:distributionUrl=https://services.gradle.org/distributions/gradle-6.5-all.zip在其下载此版本的时候关闭AndroidStudio,这时会在C:\U..
2020-12-24 00:19:18
3765
原创 Mybatis学习笔记
Mybatis框架1.三层架构界面层:和用户打交道的,接受用户的请求参数,显示处理结果的(jsp.html.servlet)业务逻辑层:接受了界面层传递的数据,计算逻辑,调用数据库,获取数据数据访问层:就是访问数据库,执行对数据的查询,修改,删除等MVC:M:数据层V:视图层C:控制层三层架构对应的包界面层:controller(servlet)业务逻辑层:Service 包 (XXXservice)数据访问层:dao包(XXXDao包)三层中类的交互用户使用界面层—
2020-12-17 12:35:54
175
原创 JDBC从入门到入门
JDBC是什么?java语言连接数据库(一套接口)JDBC的本质是什么?JDBC是SUN公司制定的一套接口(interface)接口都有调用者和实现者面向接口调用,面向接口写实现类,这都属于面向接口编程为什么要面向接口编程?解耦合:降低程序的耦合度,提高程序的扩展力多态机制就是非常典型的:面向抽象编程(不要面向具体编程) 建议:Animal a = new Cat(); 不建议:Cat a = new Cat();喂养的方法是Public void feed(Ani..
2020-12-11 22:59:16
95
原创 Spring框架学习(未完结)
定义:spring解决企业开发的难度,减轻对模块之间的管理,类与类之间的管理,帮助开发人员创建对象,管理对象之间的关系。spring的核心技术是 ICO (控制反转)和AOP(面向切面编程),能实现模块之间,类与类之间的解耦合。PDF下载:https://jfdsghhg.lanzous.com/itAYvizh39c**依赖:**类a中使用了类b中的属性和方法,叫做类a依赖类b。优点:轻量,占用资源少,运行效率高针对接口编程,解耦合AOP编程的支持方便继承各种优秀的框架IOC控制反
2020-12-02 16:34:10
70
原创 HTML5简单入门
我的第一个网页<!--DOCTYPE:告诉浏览器,我们使用的是什么规范--><!DOCTYPE html><html lang="en"><!--head标签代表网页的头部--><head><!-- 描述性标签,他们是描述我们网站的一些信息--><!-- meta一般来做seo--> <meta charset="UTF-8"> <meta name ="ke..
2020-11-25 11:06:12
137
原创 MySql数据库浅谈
数据库驱动应用程序和数据库是通过数据库驱动连接上的JDBCSUN公司为了简化开发人员对数据库操作的统一,提供了一个(java操作数据库的)规范,俗称JDBC这些规范的实现是由具体的厂商去实现对于开发人员来说,我们只需要掌握JDBC接口的操作即可java.sqljavax.sql先倒入这个jar包 mysql-connection-java.jar 可以去Maven仓库进行下载步骤:创建一个普通项目导入数据库驱动[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上
2020-11-21 22:53:43
137
原创 单元测试&反射机制(未完结)
单元测试单元测试是指程序猿写的测试代码给自己的类中的方法进行预期正确性的验证单元测试一旦写好了这些测试代码,就可以一直使用,可以实现一定程度上的自动化验证单元测试一般是要使用框架进行单元测试的经典框架:JunitJunit是什么?Junit是Java语言编写的第三方单元测试框架Junit框架的方案可以帮助我们方便且快速的测试我们代码的正确性单元测试概念单元:在Java,一个类就是一个单元单元测试:程序员用Junit编写的一小段代码,用来对某个方法进行功能测试或业务逻辑测试。Ju
2020-11-11 21:28:38
388
1
原创 Socket文件上传演示
目标:实现客户端上传图片给服务器端保存起来客户端常量包public class Constants { public static final String SRC_IMAGE = "E:\\默认\\图片\\证件照\\ZJZ.jpg"; public static final String SERVER_DIR = "D:\\资源\\美女\\"; public static final String SERVER_IP = "127.0.0.1"; public stat
2020-11-08 16:41:46
134
原创 实现一个服务端可以同时接收多个客户端的消息
实现一个服务端可以同时接收多个客户端的消息需要在服务端引入多线程在每接受一个客户端的Socket通道,就为他分配一个独立的线程来处理他的消息如此便可实现:一个服务端可以同时接受多个客户端的消息客户端代码public class ClientDemo01 { public static void main(String[] args) throws Exception { // 1.客户端要请求于服务端的socket管道连接。 // Socket(Stri
2020-11-08 15:53:59
2292
原创 并发包
并发包CountDownLatch的使用CountDownLatch允许一个或者多个线程等待其他线程完成操作,再执行自己例如;线程1要执行打印:A和C,线程2要执行打印B但线程1在打印A后要线程2打印B之后才能打印C所以:线程1在打印A后,必须等待线程2打印完B后才能继续执行构造器:public CountDownLatch(int count) //初始化唤醒需要的down几步方法:public void await() throws InterruptedException 让当前线程等待,
2020-11-04 22:45:58
91
原创 锁的相关知识(悲观锁、乐观锁)
死锁多个线程同时被阻塞,他们中的一个或者全部都在等待某个资源被释放。由于线程无限期的阻塞,因此程序不可能正常的终止。Java死锁产生的四个必要条件:互斥使用,当资源被一个线程使用时,别的线程不能使用不可抢占,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放请求和保持,当资源请求者在请求其他的资源的同时保持对原有资源的占有循环等待,存在一个等待循环队列:p1要p2的资源,p2要p1的资源,这样就形成了一个循环等待。上面的四个条件都成立的时候,就形成死锁。死锁情况下,打
2020-11-04 22:45:01
158
原创 线程池详解
线程池什么是线程池?其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁的创建和销毁线程对象的操作,无需反复的创建线程而消耗过多的资源为什么使用线程池?三个好处:降低资源消耗:减少创建和销毁线程的次数,每个工作线程都可以被重复使用,可执行多个任务提高响应速度:不需要频繁的创建线程,如果有线程可以直接用,不会出现系统僵死提高线程的可管理性(线程池可以约束系统最多只能有多少个线程,不会因为线程过多而死机)线程池的核心思想:线程复用,同一个线程可以被重复使用,来处理多个任务。目
2020-11-04 22:43:13
130
原创 广播接收机制
广播接收机制创建动态注册广播接收器新建一个类继承BroadcastReceiver,重写onReceive()方法,当有广播来到时,onReceive就会得到执行,那么就在其下面执行相应的逻辑创建intentFilter实例,为其添加action,我们的广播接收器想要接收什么样的广播 ,那么就添加什么样的action创建BroadcastReceiver子类的实例再调用registerReceiver()方法,将两个实例添加进去在onDestry()方法中添加取消注册的代码,调用方法unreg
2020-11-02 12:07:08
243
原创 动态申请权限 你真的了解吗
动态申请权限借助的是ContextCompat.checkSelfPermission()方法,此方法接收两个参数,参数一是Context,参数二是具体的权限名称,使用此方法的返回值和PackageManager.PERMISSION_GRANTED做比较,相等就说明用户已经授权,不等就说明用户没有授权。授权就直接执行相应逻辑未授权就调用ActivityCompat.requestPermission()方法向用户申请权限,三个参数,参数一是Activity实例,参数二是一个String数组,我们把要
2020-11-02 12:06:06
240
原创 内容提供者ContentResolver
内容和提供者contentResolver怎么获取到文件的保存路径呢?private void saveUsersinfo() { //获取文件的缓存路径,是由系统进行管理的,不够就进行清理 File cacheDir = getCacheDir(); Log.d(TAG, "cacheDir=="+cacheDir); //获取当前文件的保存路径 File fileDir = getFilesDir(); File file = new
2020-11-02 12:05:18
169
原创 广播的最佳实践——实现强制下线功能
广播的最佳实践——实现强制下线功能创建一个Activity管理类用于管理所有的活动创建BaseActivity作为所有活动的父类创建登录界面,创建LoginActivity,在里面实现一些界面控件的管理和跳转逻辑在跳转界面里面添加一个空间用于实现强制下线功能这个按钮的功能可以在MainActivity中进行添加,点击事件中发送一条广播新建广播接收器执行相应逻辑在BaseActivity中添加广播接收器注册和取消广播接收器应该在活动处于栈顶的时候,所以应该在onResume和onPause方
2020-11-02 12:03:51
302
原创 文件夹的复制(面试题,有一定难度)
文件夹的复制(面试题,有一定的难度)package com.fudao.digui;import java.io.*;import static com.sun.deploy.cache.Cache.copyFile;/*目标:复制文件夹(面试题 拓展) * 源文件:D:/*/public class CopyFile { public static void main(String[] args) { copyDir(new File("E:/fudao/JAVA
2020-11-01 15:47:47
163
原创 非规律化递归问题(啤酒问题)
众所周知,递归算法是在java学习中一定会遇到的问题。规律化递归问题可以总结为三要素来进行解决:终结点公式方向(递归算法的方向一定是指向终结点的)而非规律化递归问题是没有章法可寻的 只能靠自己来创建解决的逻辑代码演示package com.fudao.digui;/*目标:非规律化递归 * 啤酒问题 * 一个人有10元钱,一瓶啤酒2元,2个瓶子可以换一瓶酒,4个盖子可以换一瓶酒, * 问 喝酒总数 和剩余瓶子数 和剩余盖子数 15 1 3 * * 核心问题解决方式就是 将
2020-11-01 15:11:02
704
3
原创 字符流不同编码读取乱码问题的解决(转换流)
字符流不同编码读取乱码的问题/** 目标:字符流不同编码读取乱码的问题。 引入: 我们之前用的代码编码和文件编码都是UTF-8编码,字符流读取没有出现乱码!! 字符流读取: 代码编码 文件编码 中文情况。 UTF-8 UTF-8 不乱码! GBK GBK
2020-10-31 22:23:09
506
原创 IO流初步解析
字符集、编码集各个国家为自己国家的字符去了一套编号规则计算机的最小单位是字节B 1B = 8ba=97A=650=48这套编码是ASCII编码中国人:GBK,一般两个字节代表一个中文字符美国人:UTF-8,一个中文一般占三个字节注意:编码前与编码后的编码集必须一致才不会导致乱码英文和数字在任何编码集中都可以通用,不会乱码IO流File类只能操作文件对象本身,不能读写文件对象的内容读写数据内容,应该使用IO流io流就是水流模型,可以将io理解成水管,将数据理解成水流IO流的分类:
2020-10-31 19:33:05
155
原创 简单解析递归算法
递归算法核心三要素:终结点公式算法的走向(走向终结点)经典案例(猴子吃桃)/** 目标:递归的经典案例。 猴子吃桃: 猴子第一天摘了若干个桃子,当即吃了一半,觉得好不过瘾,然后又多吃了一个。 第二天又吃了前一天剩下的一半,觉得好不过瘾,然后又多吃了一个。 以后每天都是如此 等到第十天再吃的时候发现只有1个桃子,请问猴子第一天总共摘了多少个桃子。 公式: f(x+1) = f(x) -
2020-10-31 19:30:06
231
原创 File类
File类创建File类的格式File f = new File(相对路径/绝对路径)绝对路径:从磁盘的的盘符一路走到目的位置的路径。– 绝对路径依赖具体的环境,一旦脱离环境,代码可能出错!!– 一般是定位某个操作系统中的某个文件对象。相对路径:不带盘符的。(重点)– 默认是直接相对到工程目录下寻找文件的。– 相对路径只能用于寻找工程下的文件。– 能用相对路径就应该尽量使用,可以跨平台!小结:创建文件对象可以使用绝对路径也可以使用相对路径相对路径只能找到工程下的路径文件对象可以表
2020-10-31 19:28:43
71
原创 并发包
并发包(重点的重点)来历:在实际开发中如果不需要考虑线程安全问题,大家不需要做线程安全,因为如果做了反而性能不好!但是开发中在很多业务是需要考虑线程安全问题,此时就必须考虑了。否则业务出现问题java为很多业务场景提供了性能优异,且线程安全的并发包,程序员可以选择使用Map集合中的经典集合:Hashmap他是线程不安全的,性能好如果要求+线程安全的业务情况下就不能用这个集合做Map集合,否则业务会崩溃为了保证线程安全,可以使用Hashtable 注意:线程中加入了计时Hashtable是线程安
2020-10-31 19:28:05
232
原创 死锁 悲观锁 乐观锁
死锁多个线程同时被阻塞,他们中的一个或者全部都在等待某个资源被释放。由于线程无限期的阻塞,因此程序不可能正常的终止。Java死锁产生的四个必要条件:互斥使用,当资源被一个线程使用时,别的线程不能使用不可抢占,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放请求和保持,当资源请求者在请求其他的资源的同时保持对原有资源的占有循环等待,存在一个等待循环队列:p1要p2的资源,p2要p1的资源,这样就形成了一个循环等待。上面的四个条件都成立的时候,就形成死锁。死锁情况下,打
2020-10-31 19:27:22
118
原创 线程池
线程池什么是线程池?其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁的创建和销毁线程对象的操作,无需反复的创建线程而消耗过多的资源为什么使用线程池?三个好处:降低资源消耗:减少创建和销毁线程的次数,每个工作线程都可以被重复使用,可执行多个任务提高响应速度:不需要频繁的创建线程,如果有线程可以直接用,不会出现系统僵死提高线程的可管理性(线程池可以约束系统最多只能有多少个线程,不会因为线程过多而死机)线程池的核心思想:线程复用,同一个线程可以被重复使用,来处理多个任务。目
2020-10-31 19:25:10
106
原创 线程安全问题(同步)
线程安全问题多个线程同时操作同一个共享资源的时候可能出现线程安全线程安全问题的解决(线程同步)线程同步的方式有三种:同步代码块同步方法lock显示锁同步代码块作用:把出现线程安全问题的核心代码给上锁,每次只能一个线程进入执行完毕以后自动 解锁,其他线程才可以进来执行格式: synchronized(锁对象){//访问共享资源的核心代码}锁对象:理论上可以是任意的“唯一”对象即可原则上:锁对象建议使用共享资源。 在实例方法中建议用this作为锁对象。此时thi
2020-10-31 19:24:10
154
原创 多线程(并发编程)
多线程(并发编程)创建线程的三种方式运行中的程序就是进程进程的三个特征:动态性 : 进程是运行中的程序,要动态的占用内存,CPU和网络等资源。独立性 : 进程与进程之间是相互独立的,彼此有自己的独立内存区域。并发性 : 假如CPU是单核,同一个时刻其实内存中只有一个进程在被执行。CPU会分时轮询切换依次为每个进程服务,因为切换的速度非常快,给我们的感觉这些进程在同时执行,这就是并发性。并行:同一个时刻同时多个在执行什么是线程?线程是属于进程的,一个进程可以包含多个线程,这就是多线
2020-10-31 19:22:52
192
原创 异常
常见的运行时异常数组越界异常 ArrayIndexOutOfBoundException空指针异常NullPointerException类型转换异常ClassCastException数学操作异常ArithmeticException数字转换异常NumberFormatException迭代器遍历没有此元素异常编译时异常编译时异常必须马上处理,否则编译不通过编译时异常的处理方式一抛出异常格式:代表一切异常方法throws Exception{}方式一:出现编译时异常的地方层层
2020-10-31 19:19:49
100
2
原创 JAVA基础知识总结
关键字关键字的特点:完全小写的字母在开发环境中有特殊颜色标记标识符:是指在程序中,我们自己定义的内容,比如类的名字,方法的名字和变量的名字等,都是标识符命名规则:标识符可以包含字母(区分大小写),0-9数字、美元符号和下划线_标识符不能以数字开头标识符不能是关键字命名规范:类名规范:首字母大写,后面每个单词首字母大写(大驼峰式)变量名规范:首字母小写,后面每个单词首字母大写(小驼峰式)方法名字规范:同变量名常量(不可发生改变的量)常量的分类:字符串常量:凡使
2020-09-16 08:04:06
567
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人