java基础
鼾声鼾语
汽车行业研发,人工智能领域及汽车电气自动化工程师
展开
-
uml设计中用到的关联关系,组合>聚合>关联>依赖
UML定义的关系主要有六种:依赖、类属、关联、实现、聚合和组合。这些类间关系的理解和使用是掌握和应用UML的关键,而也就是这几种关系,往往会让初学者迷惑。这里给出这六种主要UML关系的说明和类图描述,一看之下,清晰明了;以下就分别介绍这几种关系:继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性;实现指的是一个class原创 2022-05-07 08:51:44 · 254 阅读 · 0 评论 -
wait等待和超时处理
1,目前我这个需求是需要做超时处理的,所有需要用timer进行定时器,超时直接退出。Timer tt=new Timer();tt.schedule(new TimerTask() {public void run() {System.out.println(“超时”);timeOut=true; } },1000);//等待1s,数据发送完毕,如果没有则超时 while (flag){//如果这个服务的数据帧接收完毕,则不循环,进行下一个原创 2021-04-27 11:41:49 · 1241 阅读 · 0 评论 -
wait线程同步异常,Java中线程出现Exception in thread “Thread-0“ java.lang.IllegalMonitorStateException异常
Java中线程出现Exception in thread “Thread-0” java.lang.IllegalMonitorStateException异常修饰变量和修饰this的区别:1,synchronized修饰的变量不能改变其值,2,其他的作用是一样的,所以如果这个变量需要改变,我们尽量使用this好一点。修改上边这个问题,我们需要注释掉result++;或则用另外一种方式来写,如下:synchronized(this);...原创 2021-04-26 17:34:25 · 565 阅读 · 0 评论 -
UDS的解包算法,网络层解包算法
测试代码:String str1="A55A2018DA10FA101862C88201050104"; String str2="A55A2018DA10FA21012C010082000005"; String str3="A55A2018DA10FA22B90000FA00012C06"; String str4="A55A2018DA10FA2364012C64FFFFFF07"; List<String> strList=new ArrayList(); str原创 2021-04-21 17:00:00 · 256 阅读 · 0 评论 -
synchronized关键字修饰方法和变量
如果一个代码块被synchronized关键字修饰,当一个线程获取了对应的锁,并执行该代码块时,其他线程便只能一直等待直至占有锁的线程释放锁。事实上,占有锁的线程释放锁一般会是以下三种情况之一: 1:占有锁的线程执行完了该代码块,然后释放对锁的占有; 2:占有锁线程执行发生异常,此时JVM会让线程自动释放锁; 3:占有锁线程进入 WAITING 状态从而释放锁,例如在该线程中调用wait()方法等Synchronized修饰静态变量和普通变量的区别这里主要涉及到类对象(static方法),对原创 2021-04-13 11:06:21 · 3621 阅读 · 0 评论 -
接口是什么?核心思想:用抽象构建框架,用实现扩展细节
核心思想:用抽象构建框架,用实现扩展细节,我们举个例子来看,比如这里有个蛋糕,蛋糕有三个属性,编号,价格,口味那么我们可以定义一个接口,interface ICake(){public void getId();public void getValue();public void getTaste();}class SnowCake implements ICake{private Integer id; private String taste; private Do原创 2021-04-12 08:30:40 · 172 阅读 · 0 评论 -
一种特殊的多态的写法
1,场景如下,如果我要调用一个类中的属性,那么我们就需要进行,将该类传递过去,但是这个时候传递的是类,但是这个时候就只单纯传递的这个类,不能多态了,如果我们单纯用接口的话,那么接口也只是提供方法,不提供属性,也是获取不到的,但是如果用父类的话,会存在如果这个类本身是继承了父类的话,就没有办法用父类了,所以通常的做法是,继承父类,在实现接口,用接口传递,然后接口中有方法,通过这个方法来获取父类的属性值类1:public class TestFragment extends Fragment类2:publi原创 2021-03-30 16:02:52 · 126 阅读 · 0 评论 -
类的设计,类应该怎么设计?
突然最近在设计类的时候,有所感悟,但是肯定不全,记录以下。类的设计具有包含性,怎么体会这个点举个例子,比如我们在开发的时候要定义一些状态量去设置看这个类的变化,其实从其他角度来看,我们设计这个类的时候,是不是应该考虑类里有这个状态量,作为它的属性呢?比如:机票作废这个功能,,作废这个状态呢怎么去设计呢?普通工程师设计:人去作废机票。高级工程师设计:机票有作废的这个属性。后期会继续补充自己的心得。...原创 2021-03-29 23:13:53 · 654 阅读 · 0 评论 -
android 如何读取csv文件,路径如何设置?
使用InputStream is = getAssets().open(“mock_gps_data.csv”);读取csv文件,csv文件要放在手机哪里啊只能放到 app/assets文件夹下面,如果是手机内存里面的文件就不是getAssets(),直接用new FileInputStream(“文件地址”)这个是当前路径Environment.getExternalStorageDirectory().getPath()这个可以得到存储卡的根目录...原创 2021-03-26 08:49:56 · 1342 阅读 · 0 评论 -
在建模设计的时候,设计模式的几种用法如何发挥作用的?(完整版)
java的设计模式大体上分为三大类:创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。设计模式遵循的原则6个:1、开闭原则(Open Close Principle)对扩展开放,对修改关闭。2、里氏代换原则(Liskov Su原创 2021-03-25 15:51:17 · 129 阅读 · 0 评论 -
变量类型,以及声明和它运行初始化的过程
static int val_a = 1 ; // 初始化的静态变量 int val_b = 2 ; // 全局变量 const int val_c = 3 ; // const 全局变量 static int val_d ; // 未初始化的静态变量 int val_e ; // 未初始化的全局变量 int main() { static int val_f = 5; // 初始化的局部静态变量原创 2021-03-25 08:53:30 · 101 阅读 · 0 评论 -
记一次出现的问题arraylist
在arrayList中添加对象,来更新出具出现的问题是在最后获取到的arrayList数据全部一样,原因是对象是通过参数传递进去来的,不管传递多少次,对象没有变化,所以添加到arraylist中,数据会被最后一个数据覆盖ArrayList arrayList=new ArrayList<>();public void addList(Model model){arrayList.add(model);}多次调用这个addList()方法会出现数据被最后一个数据覆盖。...原创 2021-02-26 16:57:44 · 95 阅读 · 0 评论 -
synchronized锁定的到底是什么?wait到底是什么?notify到底是什么?多线程处理的三元素。
synchronized介绍:synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的原创 2021-02-22 17:00:25 · 184 阅读 · 0 评论 -
tp.cm和tp.dt报文说明,为什么计算的pgn不对,1939里的GPN如何计算,什么时候的报文没有目标地址。
ISO 11989只规定了CAN总线的物理层和链路层协议,在实际应用中,为保障不同厂家设备的兼容性,需要统一CAN总线的应用层协议。常见的应用层协议有:SAE J1939、CANOpen和DeviceNet。SAE J1939SAE J1939基于CAN2.0B,通信速率250kbit/s,最多可带30个设备,最大总线长度可达40 m,节点线最长1米。SAE J1939定义了29位Indentifier和数据域的使用方法。定义协议数据单元(PDU = Indentifier+数据域),PDU格式:原创 2021-02-19 18:49:11 · 2141 阅读 · 3 评论 -
接口对比电脑的理解
1,电脑理解为本类2,电脑的U口理解为要实现接口的内部类,其中包含回调函数3,U盘理解为外部需要调用的类,及其方法。原创 2021-02-18 09:16:41 · 117 阅读 · 0 评论 -
UDS中非常好用的超时的一个类future,暂时发现的,UDS超时如何处理的方法
目前为止暂时发现的一个future类,可以做任务超时,以下是一个案例:任务超时处理是比较常见的需求,比如在进行一些比较耗时的操作(如网络请求)或者在占用一些比较宝贵的资源(如数据库连接)时,我们通常需要给这些操作设置一个超时时间,当执行时长超过设置的阈值的时候,就终止操作并回收资源。Java中对超时任务的处理有两种方式:一种是基于异步任务结果的超时获取,一种则是使用延时任务来终止超时操作。下文将详细说明。一、基于异步任务结果的超时获取基于异步任务结果的获取通常是跟线程池一起使用的,我们向线程池提交任务原创 2021-02-17 15:15:06 · 1344 阅读 · 1 评论 -
MVP 设计模式中, Service 属于什么层
1,一般思路是:a.通过绑定,将View示例传递给present,通过接口实例化进行进行presenter回调view形式的交互。b.让presenter运行在service中。参考代码:https://blog.csdn.net/martinsz/article/details/110419284原创 2021-02-15 16:55:31 · 498 阅读 · 0 评论 -
interface的成员属性默认必须是final类型的
interface不可实例化,如果是非static(静态)的成员,那必须是实例化才能使用该成员,这跟interface不可实例化相矛盾,因此interface的成员必须是static的;interface的成员要想让implement它的类能够使用该成员,那该成员的属性需要是public的;通过1的条件可以知道,interface的成员属性是static类型的,也就在该interface中只保存有一份static,但是interface可以被许多其他类所实现,那如果该成员不是final类型的,那要是其他原创 2021-02-09 08:19:16 · 904 阅读 · 1 评论 -
协议解析库,数据传输直接进行反序列化或者叫解包,很好用
1,protobuf//跨平台的库2,darkcode//java的库,试了下android用不了,不知道为什么3,hprose4,jprotobuf //java的库,待测原创 2021-02-04 10:18:21 · 178 阅读 · 0 评论 -
Service 与 Thread 的区别
很多时候,你可能会问,为什么要用 Service,而不用 Thread 呢,因为用 Thread 是很方便的,比起 Service 也方便多了,下面我详细的来解释一下。1). Thread:Thread 是程序执行的最小单元,它是分配CPU的基本单位。可以用 Thread 来执行一些异步的操作。2). Service:Service 是android的一种机制,当它运行的时候如果是Local Service,那么对应的 Service 是运行在主进程的 main 线程上的。如:onCreate,onSt原创 2021-02-03 08:42:31 · 568 阅读 · 0 评论 -
java中常用且非常重要的概念序列化和反序列化
序列化就是将对象序列化称为数据流,方便数据的传输。反序列化是将数据流对象化,方便操作或者解释为:Java 序列化就是指将对象转换为字节序列的过程,而反序列化则是只将字节序列转换成目标对象的过程。延伸出来有,对象数据JSON序列化,及就是将对象数据转换为JSON数据,方便再web服务器请求等需求中传输。举例如下:public class SerialDemo { public static void main(String[] args) throws IOException, Class原创 2021-01-26 09:10:30 · 89 阅读 · 1 评论 -
报文协议中的编码信息和解码信息,Encoding Message和Decoding Message
利用:darks-codec库来进行解析帧数据格式: FB FA [ID 32bits] [VERSION 8bits] [COMMAND] FF编码信息类:public class SimpleMsg{int id;byte version;String command;}配置:ObjectCoder coder = new ObjectCoder();coder.getCodecConfig().setEndianType(EndianType.LITTLE);coder.原创 2021-01-25 11:19:15 · 857 阅读 · 0 评论 -
大端和小端的解释:EndianType.LITTLE和EndianType.BIG
注意我们填格子的方式分为Intel和Motorola两种。如果你的Signals都没有跨字节的问题,那么Intel和Motorola格式出来的效果是一样的。当然这不可能,你无法确保不跨字节。Intel格式也即小端,MSB存放在高字节单元,反映到矩阵图中就是以起始位为原点,自上而下填充。Intel格式,MSB在LSB下面Motorola格式也即大端,MSB存放在低字节单元,反映到矩阵图中就是以起始位为原点,自下而上填充。...原创 2021-01-25 11:18:57 · 310 阅读 · 0 评论 -
matlab结合底层程序,生成hex程序文件
结合自己的工程,将matlab生成hex文件总结为以下三点:1,运行初始化工程2,运行模型3,运行配置工具生成的Hex在debug中原创 2021-01-22 17:10:00 · 1328 阅读 · 0 评论 -
接口的暴漏
面向接口设计bai 最大du的一个理由就是减少耦zhi合性。如果dao程序中的各个组件以接zhuan口而非具体的shu类相互衔接,那么对组件进行替换就轻而易举。这个特性可以使你简单的完成组件替换,而无需触及应用程序中的其他部分代码;当然,它还可以使得应用程序无需关心具体的组件实现而平滑运转。此的松耦合机制的最大好处,就是可以为测试提供更多的便捷。通过面向接口设计,我们可以用同一个接口的虚拟实现来替代真实实现,从而使得测试的灵活度得到提升低耦合,高内聚.好处:易于维护,可读性高,方便扩展,前人总结之经验原创 2021-01-07 16:16:36 · 331 阅读 · 0 评论 -
为什么需要内部类,这里做了很详细的解答
sun公司为什么要设计这个内部类呢?1,一般来说,内部类继承自某个类或者实现某个接口,内部类的代码操作创建它的外围类的对象。所以可以认为内部类提供了某种进入其他外围类的窗口。2,内部类必须要回答的一个问题是:a,如果只是需要一个接口的引用,为什么不通过外围类实现那个接口呢?答案是:“如果这能满足要求,那么就应该这样做。”那么内部类实现了一个接口与外围类实现这个接口有什么区别呢?b,那么内部类实现一个接口与外围类实现这个接口有什么区别呢?答案是:后者不是总能享用到接口带来的方便,有时需要用到接口的原创 2021-01-07 15:20:38 · 273 阅读 · 2 评论 -
java面向对象最新的理解
1,方法的理解:许多程序语言用函数这个术语来描述命名的子程序,而在java里却常用方法来表示:“做某些事情的方式”2,一切皆对象一切皆对象这句话要深入理解,一切事物都有自己的属性和方法,它就可以是一个对象,没有属性只有处理方法的类,我们可以把它当作方法类,最简单。3,接口接口确定了对某一特定对象所能发出的请求,只约束方法4,类如果一切都是对象,那么是什么决定了某一类对象的外观与行为呢?是什么确定了对象的类型?那就是class,class“我准备告诉你一种新类型的对象看来想什么样子”。。。.原创 2021-01-07 11:34:30 · 92 阅读 · 0 评论 -
java中的反射是什么?有什么作用?
思考:在讲反射之前,先思考一个问题,java中如何创建一个对象,有哪几种方式?Java中创建对象大概有这几种方式:1、使用new关键字:这是我们最常见的也是最简单的创建对象的方式2、使用Clone的方法:无论何时我们调用一个对象的clone方法,JVM就会创建一个新的对象,将前面的对象的内容全部拷贝进去3、使用反序列化:当我们序列化和反序列化一个对象,JVM会给我们创建一个单独的对象上边是Java中常见的创建对象的三种方式,其实除了上边的三种还有另外一种方式,就是接下来我们要讨论的 “反射”1、原创 2021-01-07 08:39:54 · 532 阅读 · 0 评论 -
对象方法的使用,回调的本质
回调的本质是自己不处理也也就是自己本身的对象引用不去直接调用方法,而是让另外一个对象的引用调用。这其中涉及到类方法的设计,主动式和被动式。小明看着教室外面撒欢儿的小伙伴,不禁悲从中来。再不出去玩,这个课间就要废了啊!!!! 看着小红再一次递上来的计算器,小明心生一计:让小红代劳。...原创 2021-01-04 14:19:09 · 468 阅读 · 0 评论 -
java中内存管理以及作用域
1,在java中变量的作用域在花括号之内,用花括号表示,作用域用花括号的位置决定2,对象的作用域java对象不具备和基本类型一样的声明周期,但用new创建一个java对象时,它可以存活于作用域之外,所以假如你采用代码:{String s=new String(a string);}end of scope引用s在作用域终点就消失了,然而,s指向的String对象仍然继续占据内存空间,在这一小段代码中,我们无法在这这个作用域之后访问这个对象,因为对它唯一的引用已经超出了作用域的范围,在以后,在程序原创 2020-12-31 15:43:26 · 121 阅读 · 0 评论 -
引用和指针的关系,引用在内存中是如何存储的
引用类型是指存储在内存堆上的数据类型,堆与栈是不一样的,存储在堆上的数据CPU不能直接读取,需要使用一个地址去查找。引用书面语中,引用指的是在说话或者写作中引用现成的话,在计算机语言中,引用就是某一变量或者目标的别名,对引用的操作与对变量直接操作完全一样,引用的声明方法:类型标识符&引用名=目标变量名(1)指针是实体,引用是别名,没有空间。(2)引用定义时必须初始化,指针不用。(3)指针可以改,引用不可以。(4)引用不能为空,指针可以。(5)Sizeof(引用)计算的是它引用的对象的大小原创 2020-12-31 14:42:30 · 1042 阅读 · 0 评论 -
找不到so的问题,in thread “main“ java.lang.UnsatisfiedLinkError: no xxlibrary in java.library.path
Exception in thread “main” java.lang.UnsatisfiedLinkError: no SecurityAccessRTDlibrary in java.library.path以上的报错是因为我在windows平台,运行了基础so库一般应该直接运行的android平台,拿个手机或者pad用的,哎呀,大意了!知识1,System.out.println(System.getProperty(“java.library.path”))打印出java.library原创 2020-12-21 14:44:36 · 338 阅读 · 0 评论 -
Android中接口(Interface)的简单使用
Java中的接口可以被看作是只包含常量和抽象方法的抽象类 。可以使用如下方式定义一个接口:public interface InterfaceDemo { int i = 10; void method1(); int method2();}使用1: 解决“多重继承”的问题Java语言本身是不支持类的多重继承(多重继承是指一个类从多个类继承而来,即一个类拥有多个超类)的,但一个类却可以实现多个接口。这样,我们可以将一些抽象方法定义在接口中,间接地达到多重继承的目的。例如原创 2020-12-08 09:01:55 · 812 阅读 · 0 评论 -
锁获取和锁释放的内存语义,线程同步块
我们接下来看看基于java内存抽象模型的Synchronized的内存语义。废话不多说依旧先上图。从上图可以看出,线程A会首先先从主内存中读取共享变量a=0的值然后将该变量拷贝到自己的本地内存,进行加一操作后,再将该值刷新到主内存,整个过程即为线程A 加锁–>执行临界区代码–>释放锁相对应的内存语义。线程B获取锁的时候同样会从主内存中共享变量a的值,这个时候就是最新的值1,然后将该值拷贝到线程B的工作内存中去,释放锁的时候同样会重写到主内存中。从整体上来看,线程A的执行结果(a=1)原创 2020-11-26 15:51:00 · 266 阅读 · 0 评论 -
线程锁synchronized,同步notify,实现多线程并发的案例代码
public class Test { private Integer result=0; private int numVlaue=9; private Integer num = 0; public static void main(String[] args) { // TODO Auto-generated method stub Test tt=new Test(); tt.A(); tt.B(); } public void B() { new Threa原创 2020-11-26 14:01:49 · 163 阅读 · 0 评论 -
android中文件选择器的库看了好几种,最后选择了materialfilepicker
按照步骤进行:步骤1:添加库repositories { jcenter()}dependencies { implementation 'com.nbsp:materialfilepicker:1.9.1'}步骤二,添加文件打开管理器代码更多打开方式可以进一步学习。private int REQUESTCODE_FROM_ACTIVITY=1; private void fileToHex() { new MaterialFilePicker()原创 2020-11-24 11:02:51 · 1568 阅读 · 2 评论 -
什么是提供接口?
提供接口的意思是,肯定要执行该方法,方法就是在接口中声明的方法,但是具体执行什么方法体内容,提供接口的类不需要知道。它只需要知道这个方法在自己类的方法中必须执行即可。原创 2020-11-03 08:28:12 · 1281 阅读 · 0 评论 -
Could not find any version that matches com.android.support:appcompat-v7:29.+.
Could not find any version that matches com.android.support:appcompat-v7:29.+.原因1:官方自28之后就不在更新,所以没有29+的版本,所以导入依赖的时候,(至于是开发工具的哪部分负责导入依赖不清楚),找不到29版本的依赖下载,就出错。原因2:官方后边都是androidx了,如果象用compileSdkVersion 29targetSdkVersion 29那么依赖库用这个androidx,就没有问题,如: impleme原创 2020-11-02 17:02:10 · 488 阅读 · 0 评论 -
java接口回调理解之小红的计算器
https://www.cnblogs.com/heshuchao/p/5376298.html最近学习java,接触到了回调机制(CallBack)。初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义。当然了,我在理解了回调之后,再去看网上的各种讲解,确实没什么问题。但是,对于初学的我来说,缺了一个循序渐进的过程。此处,将我对回调机制的个人理解,按照由浅到深的顺序描述一下,如有不妥之处,望不吝赐教!开始之前,先想象一个场景:幼稚园的小朋原创 2020-11-02 10:32:19 · 202 阅读 · 0 评论 -
为什么要用ASCII码,原因是屏幕显示的字符在数据传输的过程中需要转换为16进制或者10进制数据
为什么要用ASCII码,原因是屏幕显示的字符在数据传输的过程中需要转换为16进制或者10进制数据byte[] wifiMsg1 = {(byte) 0xA5, 0x5A, 0x50, 0x17, 2, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x2C, 0x31, 0x32, (byte) 0xB3};byte[] wifiMsg2 = {(byte) 0xA5, 0x5A, 0x51, 01, 0x33, 0x34, 0x35, 0x36, 0x37, 0x原创 2020-10-14 14:36:00 · 2386 阅读 · 0 评论