Java
call就不要ret
大菜鸡一个,致力于向各位师傅学习,喜爱二进制安全。热爱钻研技术
展开
-
JavaSE基础语法--接口
比如电脑的USB接口,插座的接口。这些接口我们发现都是一样的规范。比如插座的有双孔插,有三孔插。从这我们就能摸清楚规律:接口就是统一规范的提供服务。Java中接口可以看作多个类的公共规范,是一种引用数据类型。5.如果在接口中非要实现普通方法,可以加一个default关键字(java 8之后提供的)下面我们通过一个小例子来实现一个java接口:模拟实现一个电脑的USB接口服务。2.接口是建立在抽象类之上的,因此接口是无法实例化的。在java中如何定义接口的呢?类和接口是如何关联起来的?原创 2023-06-29 17:05:57 · 89 阅读 · 0 评论 -
ProtoBuf简介
介绍ProtoBuf之前,我们聊聊什么是JAVA序列化和反序列化。序列化可以理解为一种约定,现实生活中,我们的声音信号如果想通过网络传输必须转换成一种能够流通的这么一种信号,那就是光电信号。同理,在JAVA中,一切皆对象。因此如果我们借助PB,那么将大大简化我们的工作。我们只需要在message里定义一些属性,通过编译器自动帮我们完成我们上述那些步骤。现在我们知道PB是什么了,它是实现序列化和反序列化的一种手段。4.处理类对象的方法:序列化方法,反序列化方法。2.高效,相比XML更小更快更简单。原创 2023-06-27 21:32:46 · 118 阅读 · 0 评论 -
JavaSE基础语法--继承
比如小时候爸妈用旧的手机会被我们拿去使用,那么我们就继承了这个手机的使用权。在代码的世界里,有很多需要复用的东西,重复去写会觉得啰嗦和难以维护。我们可以对比两次代码量,是不是减少了很多而且显的不那么冗余了。如果还有第三个类第四个类都需要这个A模板的属性和方法,直接用就可以。此时A这个类叫做父类,而需要继承的类就是子类。现在我定义了一个猫类一个狗类,我们看到在两个类中有相同的属性和方法还有一些特有的方法。那么继承就想法就是把这些共有的属性和方法提取出来,放在一个类中,那么只需要一份就可以完成同样的任务。原创 2023-06-25 22:22:11 · 30 阅读 · 0 评论 -
JavaSE基础语法--static成员
这说明,我们的classroom_num成员变量,在加了static之后就不在堆上了。这种加了static关键字的变量我们称之为 静态成员变量。我们知道静态成员变量不属于对象,也就不在堆上,虽然可以用对象引用去得到。不报错但是会报警告。在静态方法内部是不能直接调用非静态的成员方法。普通成员方法内部,是可以使用静态成员方法。静态成员变量的一个很大特点是它不属于某个对象,是所有对象共享的。和静态成员变量一样,静态成员方法被static修饰后也不再属于对象。2.在静态方法内部,不能直接使用非静态的数据成员。原创 2023-06-22 17:27:25 · 545 阅读 · 0 评论 -
JavaSE基础语法--封装
拿到新电脑之后,我开机就能使用CPU,内存等功能,我插入键盘接口我就能使用键盘,我插入鼠标接口我就能使用我的鼠标。上面我们讲了封装的本质,那么我们一个在定义一个类的时候,类里有成员变量,成员方法。那么封装就是要讲数据和操作数据的方法进行有机的结合,隐藏对象的属性和细节,仅对外公开接口来和对象进行交互。那么Java中,包的概念是一样的。缺省的意思就是在不加权限说明的时候,是有一个默认的权限,也就是default,但default不是一个权限关键字。我们更改了name的权限,发现类外访问是报红的。原创 2023-06-22 16:24:27 · 182 阅读 · 0 评论 -
JavaSE基础语法--类和对象
(参考数组章节),我们并不关心它到底干了什么,我们关心的是它能完成什么任务,它的功能是什么。因为在存粹的C语言中,是没有类和对象这个概念的,只有函数的封装思想。当我想通过代码完成一件完整的功能的时候,我是需要通过调用这些函数一个个按步骤去完成的。都是通过地址来找到引用的那块内存,这块在堆上开辟的内存空间是属于对象的。而且 方法是不占用内存的。它是一个引用类型,我们前面讲数组的时候强调过什么是引用类型,说白了就是存的是地址。那么你也是人我也是人,如何把人给描述出来呢,这就靠类,其实我的理解是类就是一个模板。原创 2023-06-21 16:52:41 · 119 阅读 · 0 评论 -
JavaSE基础语法--数组的拷贝
这是copyOf的实现,其实他是调用了一个arraycopy方法。这个方法是一个本地方法,底层是由C/C++实现的,因此我们只能看到函数原型,看不到实现逻辑,但是我们可以直接使用它。这个copyOf方法不仅能拷贝原始数组,还能对数组进行扩容。它需要2个参数,一个是需要拷贝的数组,一个是拷贝的长度。这个函数的原型会返回一个数组,因此我们需要用一个数组去接受它。数组的拷贝方法有好几种,第一种是简单的for循环。因为数组下标是从0开始的,所以第二个位置也就是1,同时arr1.length要-1,不然会报错。原创 2023-06-20 15:44:35 · 81 阅读 · 1 评论 -
JavaSE基础语法--数组(2)引用类型剖析
从图示我们可以知道,arr1,arr2数组指向的其实是同一块内存,因此修改也是修改同一块地方,自然输出是一样的。这就是引用类型,通过地址找到同一块空间。此时我们看到两个引用同时指向一个对象,通过其中任何一个引用去修改这个对象的值,另一个引用去访问的时候,也会被改变。在上一篇数组中我们介绍了引用类型。这一篇通过几个简单的例子加深对引用类型的理解与体会。这段代码的输出结果会是什么呢?原创 2023-06-19 18:38:29 · 38 阅读 · 0 评论 -
JavaSE基础语法--数组(1)
上面是一个大概的内存布局图,我们知道数组是定义在一个方法内的,那么它是一个局部变量。为什么称之为引用类型呢,因为在栈上数组本身并不存储数据,数组开辟的空间存放的数据是在堆上的,而栈上存储了一个地址,这个地址是指向堆上开辟的数组空间的起始地址。在Java中,为了更好的区别变量和数据类型,将方括号放在了数组名的前面,这样的好处是能一眼看出这个变量的类型是什么。对比两种for循环遍历,我们发现第一种for循环是通过数组下标访问的,第二种for循环遍历数组和下标是没有关系的。因为Java数组是一个引用类型的变量。原创 2023-06-19 16:53:19 · 59 阅读 · 0 评论 -
JavaSE基础语法--方法重载
sum(int a,int b)和sum(double a,double b)编译器就可能在背后给它起名为sumii和sumdd来区别方法,我这里只是举个例子方便理解,真是编译器起名规则并不是这样的,但是大致的思想是一样的。但是如果两个方法名相同方法的参数顺序和个数以及类型都相同,编译器就无法区分调用哪个方法,因此编译器会报错来提示这种语法规范是错误的。那么Java提供了一种机制叫方法重载,与c++中的方法重载是一个思想的。方法重载是允许方法名相同,简化起名过多过杂的问题,也是一种重复利用的思想。原创 2023-06-01 16:16:44 · 47 阅读 · 0 评论 -
JavaSE基础语法--方法
定义好了方法,在主函数里调用并且传参就能实现我们的功能,这和C语言的函数是一模一样的,没什么大不同。1,定义方法,决定这个方法的功能,返回值的类型是什么,方法的名字叫什么。2,使用这个方法就需要调用这个方法=》方法名()->参数有几个,参数类型,参数顺序。首先我们知道在计算机的内存中有一块区域叫做栈,方法的执行是在栈上执行的。1,在传参的时候要和方法的参数的类型和个数以及传参顺序都要一一匹配。3,方法有返回值吗,要不要接收,拿什么类型接收?2,返回值要匹配,接收返回值的时候要和定义方法的返回值要一致。原创 2023-06-01 15:21:07 · 21 阅读 · 0 评论