Other

Object类

Object Java中存在最底层的类,所有类都直接或者间接的继承java.lang.Object。如果在代码中,没有明确声明该类有继承的父类,那这个类的父类就是Object。 Object可以作为任何类型的引用变量 Object obj = new Employee(); Object[] obj = new Object[10]; obj[0] = 1; obj[1] = 'a'; obj[2] = null; obj[3] = true; 当然Object也提供了许多方法供子类去继承使用,如 equals,用于检测对象是否等于另一个对象 hashCode,由对象导出的一个整型值,但这个值是没有规律的,用于确认唯一值 toString,返回表示对象的字符串 getClass,返回对象信息的类对象 clone()方法 protected native Object clone​()throws CloneNotSupportedException; 顾名思义就是复制,查阅API,clone就是复制对象,分配一个与源对象空间大小一样的对象。 new 与clone的区别 clone创建对象与new操作符不同,使用new,根据类型分配内存,调用构造,填充对象的各个域,再返回构造,对外发布引用,然后外部就可以操作这个对象。clone的第一步也是分配内存,但它是根据源对象分配内存,分配的内存与源对象相同,再根据源对象的各个域填充新对象的域,clone返回这个新对象,把新对象的引用发布到外部。 复制引用与复制对象 Employee alice = new Employee(); Employee alice2 = alice; 在程序中分别打印这两个对象的地址值会发现他们的输出是一模一样。 既然地址都是相同的,那两个对象是同一个对象,无论修改alice或alice2中的属性,最后获取的属性值都是一样的,这就是引用复制,任何一方的操作都会影响到另一方。他们指向的都是同一个地址,只是引用名不同,但对象是同一个。 Employee alice = new Employee(); Employee bob = alice.clone(); 从程序的打印结果可以看出,这两个不是同一个对象,因为他们打印的地址值不同,也就是clone是重新创建了一个与alice一模一样的内存空间,引用之间互不影响。指向不同的地址,对象也不同。

查找字符串中特殊字符的位置

案例代码:  说明:查找特俗字符串的位置,个数,以及每个位置的下标。并且对每个字符前后做固定长度的截图。这里截取的是字符串中的时间 s='09:16外勤盛元半导体11:07外勤盛元半导体18:50外勤佛山市蓝箭电子股份有限公司' qdsj=''qtsj=''xb_list=[] n=s.find(:)#find函数没找到字符返回-1 i=1#设置一个计数值while n!=-1: print('第'+str(i)+'个的下表为:'+str(n)) xb_list.append(n) if i==1:#第一个:的字符截取为签到时间 qdsj=s[n-2:n+3] print('签到时间为:'+str(qdsj)) i=i+1 #找到1个查找第二个下标,字符从第一个下标后面开始查找 n=s.find(:,n+1) if n==-1: print('字符为:的个数为'+str(i-1)) #print(xb_list[i-2]),最后一个:的下标 qtsj=s[xb_list[i-2]-2:xb_list[i-2]+3] print('签退时间为:'+str(qtsj)) 运行结果:   

输入法设置

双拼 微软设置小鹤双拼 win r regedit 找到计算机\HKEY_CURRENT_USER\Software\Microsoft\InputMethod\Settings\CHS 项 新建一个名为 UserDefinedDoublePinyinScheme0 的字符串值,值为: 小鹤双拼2*iuvdjhcwfgxmlnpbksqszxkrltvyovt (格式说明 : 名字 * 零声母模式 * 零声母 * 韵母的映射声母, 因为是模式3不用设置零声母,设为空。第二个^为er的映射声母,模式3也用不到,设为空。) 三种零声母模式区别: 双拼采用两个按键确定一个拼音,对于没有声母的处理有三种方法 (假设声母映射:an->j , er->r , ou->z , ang->h) 啊(a) 安(an) 昂(ang) 额(e) 而(er) 欧(ou) 固定零声母o oa oj oh oe or oz 韵母的第一个字母 aa aj ah ee er ez 韵母的第一个字母(两个字母的韵母为全拼) aa an ah ee er ou 可以看到第三种比较自然。自然码,小鹤都采用第三种

数据类型

public class Demo1_2{ public static void main(String[] args){ int a=10; //整数有byte、short、int(默认)、long float b =1.1F; //小数有float、double(默认)float使用需要加后缀F double c=30.3D; char d='a'; //字符串char boolean e=true; //布尔类型(返回true、false) System.out.println(a); System.out.println(b); System.out.println(c); System.out.println(d); System.out.println(e); }}

隐式转换

public class Demo1_4{ public static void main(String[] args){ int a=10; double b=a; //隐式转换:小范围赋值给大范围,会先将小范围提升成大范围后,在赋值给大范围。可以直接给。 System.out.println(b); double c=4.3; int d=(int)c; //强制转换:大范围赋值给小范围,需要转换类型才能赋值。格式:目标数据格式 变量名=(目标数据格式)值或者变量。不能直接给。 System.out.println(d); byte e=3; byte f=4; byte g=(byte)(e + f); //变量和变量相加,如果(byte)e + (byte)f,又会变成转换成int,所以需要用括将相加的优先级提高,然后修改目标数据格式。 byte h=3 + 4; //java存在常量优化机制,会在编译的时候让3和4相加,然后判断结果是否在目标数据格式范围内。 System.out.println(g); System.out.println(h); }}

EB Tresos加载NXP S32K plugin

1. 安装完EB Tresos后,需要将 NXP S32K1XX AUTOSAR 4_3 MCAL RTM 1_0_4 放入EB安装路径里的 plugin 文件夹下面。否则会因为如下target为空,不能选择,导致建立工程失败。   2. 创建工程成功后,工程目录如下。   3. 点击生成代码,会生成epc文件。  

csv模块

1.csv是什么?模块的作用  csv是一种文件格式,可以理解为简易版的excel表格。  作用:学习完csv模块就能用程序处理简单的excel表格了 2.csv模块的使用  步骤:导入csv模块,用dir()函数查询里面封装了哪些内容    csv官方教程:https://docs.python.org/3.6/library/csv.html  csv中文教程:https://yiyibooks.cn/xx/python_352/library/csv.html#module-csv  读取案例:  说明:演示简单的excel文件的读写  数据中读取的每一行,是一个列表,每一列是一个列表字符元素。读取代码输出如下:      with open() as :open方法有两个参数,一个是文件名”“,一个是newline=''  写入案例:      

Blazor 封装JS组件使用 Json 转换器修正大小写以及名称冲突问题

类型化参数 我们已经看到我们可以将Options参数作为匿名对象传递给构造函数,但我们真的很想使用类型化对象来获得类型安全编程的优点。Options我们首先为仅定义placement字段的类型构造一个新类。 public class Options { [JsonPropertyName(placement)] public Placement Placement { get; set; } } public enum Placement { [Description(auto)] Auto, [Description(auto-start)] AutoStart, [Description(auto-end)] AutoEnd, [Description(top)] Top, [Description(top-start)] TopStart, [Description(top-end)] TopEnd, [Description(bottom)] Bottom, [Description(bottom-start)] BottomStart, [Description(bottom-end)] BottomEnd, [Description(right)] Right, [Description(right-start)] RightStart, [Description(right-end)] RightEnd, [Description(left)] Left, [Description(left-start)] LeftStart, [Description(left-end)] LeftEnd } 我们为类和枚举添加了许多属性,定义了放置的所有可能选项。JsonPropertyName告诉库System.Text.Json属性Placement名称应该被序列化为placement. 我们添加了Description属性,因为这是最接近实现的地方,我们可以在其中定义不同名称的 JSON 对应项。我们必须定义这些不同的 JSON 对应项的原因是您不能在枚举的选项中使用破折号,例如top-start. 我们可以选择只使用字符串而不是枚举,但是使用枚举会限制出错的可能性。System.Text.Json不使用Description属性开箱即用,但我们可以定义一个自定义转换器,它可以在序列化为 JSON 时获取属性。在我们制作它时,让我们尝试将泛型考虑在内,以便它可以使用任何带有Description属性的枚举。我们在一个名为EnumDescriptionConverter. class EnumDescriptionConverter<T> : JsonConverter<T> where T : IComparable, IFormattable, IConvertible { public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { throw new NotImplementedException(); } public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions options) { FieldInfo fi = value.

ARM体系结构与接口技术——ARM汇编伪操作与混合编程

伪操作的概念 伪操作与伪指令不同。 伪指令虽然不能生成与机器码映射的机器码,但是能被编译成相应的汇编指令,再编译成机器码。 伪操作不会生成任何指令,只在编译期起作用,用来控制编译器,告诉编译器怎么编译指令。所以不同的编译器,它的伪操作是不一样的。 伪操作的作用类似于C语言的条件编译。 C语言和汇编混合编程 @ 混合编程 .text .global _start _start: MOV R1,#1 MOV R2,#2 BL func_c @ 汇编语言调用C语言 MOV R3,#3 BL STOP .global FUNC_ASM @ global声明让C调用 FUNC_ASM: MOV R4,#4 MOV R5,#5 .global STOP STOP: B STOP .end void func_c() { int a = 0; a++; /*C语言内嵌汇编代码*/ asm ( MOV R6, #6\n MOV R7, #7\n ); /*C语言调用汇编*/ FUNC_ASM(); a--; } ATPCS协议 ATPCS,ARM-THUMB procedure call standard,ARM-Thumb过程调用标准。 规定了所有编译器对C编译成汇编需遵循以下标准: 栈的种类 使用满减栈 寄存器的使用 R15 只能用于程序计数器PC R14 只能用于链接寄存器LR R13 只能用于栈指针寄存器SP R0-R3 函数调用时,参数小于4个的时候,使用R0-R3传参,多于4个的部分用栈传递 R0 函数返回时,返回值使用R0传递 其余寄存器主要用于存储局部变量  END

轻量应用服务器使用记录-楔子

大家好呀,我回来了,从今天会开始一个新的随笔系列,是关于我几个月前花了0.0038W租了一年的轻量应用服务器的使用记录。   更多的还是看到一些有意思的内容,自己就学着做一遍......  希望大家多多指教,谢谢。 相关链接 系列地址:轻量应用服务器 - 随笔分类 - N4TK - 博客园 (cnblogs.com)