- 博客(42)
- 收藏
- 关注
原创 java单例设计模式
一、什么是单例模式采取一定方法使类只有一个对象实例,设计一个方法才能获取该对象实例。一、饿汉模式特点:构造函数私有化,使外部不能随便实例化对象在类内部创建静态对象创建一个静态方法使外部可以获得实例对象示例:package com.hb.single_;public class SingleTon01 { public static void main(String[] args) { GirlFriend girlfriend=GirlFriend.getIns
2021-10-03 15:33:25 133
原创 java关键字final和抽象类
一、final关键字final可以修饰类,表示该类不可被继承final可以修饰属性,表示一个常量,并且必须赋值,可以直接赋值,或者在构造器和代码块中赋值如果修饰的是static属性,那么不能在构造器中赋值,因为静态final属性在类加载就要被赋值。final可以修饰方法,表示不可被重写,但是可以继承的,如果一个类是final类,他的方法...
2021-10-03 15:02:22 638 2
原创 java代码块
一、代码块的使用当一个类有多个构造函数,并且构造函数都有相同的语句,可以将这些语句放入一个代码块中,提高代码重用。代码块就相当于另一种构造器的形式。1、语法:【static】{语句};2、分类:代码块分为静态代码块和普通代码块二、静态代码块和普通代码块区别static代码块随着类的加载而执行,而且只会执行一次。普通代码块则随着对象的创建而执行,每创建一次对象,就执行一次。什么时候类会被加载:(可能不单单以下情况,其他情况还未去了解)创建对象实例时创建子类对象时,父类也会被加载使
2021-10-02 16:54:38 142 2
原创 java类变量和类方法
一、类变量(1)、定义类中用static关键字修饰的静态变量,为该类所有对象共享。(1)、类变量内存布局根据jdk版本不同,内存布局也是不一样的:以前静态变量放在方法区的静态域中,静态变量count由child1和child2共享现在静态变量放在堆中,类被加载后,会创建一个class对象在堆里,静态对象就存放在class对象内,由child1和child2对象共享(3)、细节说明:类变量被同一个类所有对象共享类变量在类加载的时候就被初始化好了,所以使用类变量可以用类名.变量名二、
2021-10-02 14:59:33 190
原创 java动态绑定机制
原理:(1)、当调用方法时,方法会跟对象的运行类型绑定。(2)、当调用属性时,没有对象绑定机制,哪里声明哪里使用。package com.hb.poly_;public class DynamicBinding { public static void main(String[] args) { A a=new B(); System.out.println(a.i); System.out.println(a.sum()); S
2021-10-01 14:50:07 124
原创 java多态:向上转型和向下转型
一、多态的向上转型package com.hb.poly_;public class PolyDetail { public static void main(String[] args) { Animal animal=new Cat(); animal.eat(); }}class Animal{ public void eat(){ System.out.println("吃"); }}class Cat e
2021-10-01 09:41:23 246
原创 java继承的本质分析
分析以下代码:Son类继承Father类,Father类继承Grandpa类,当创建son对象时,内存是怎么的package myworkspace01;public class FirstSample{ public static void main(String[] args) { Son son=new Son(); System.out.println(son.name); //System.out.println(son.age); System.out.println(so
2021-09-21 15:45:00 173
原创 java方法调用的机制
我们首先来看下面一段代码,创建一个Person类对象,调用它的getSum方法java方法调用过程java每个方法调用时会创建一个独立的栈空间1、main方法为程序入口,创建一个main方法栈2、在mian方法栈中执行程序,创建Person对象,执行System语句,语句中有对象a1的getSum方法,所以执行这个方法3、创建一个getSum方法独立栈,将实参传入后执行getSum里面语句,返回res,退出这个getSum方法栈,转而执行main方法栈,输出getSum的返回值,getSum方法
2021-09-13 21:53:26 187
原创 java方法的一些使用细节
一、方法重载java允许同一个类中,有多个同名方法,但是形参列表必须不一样构成方法重载的条件1、方法名相同2、形参列表不同:形参类型,顺序,数量这三个必须至少有一个不同。3、返回类型无要求比如void A()和int A()并没有构成方法重载二、可变参数java允许一个类中多个同名同功能但参数个数不同的方法封装成一个方法例子:使用细节:1、可变参数实参可以为数组,而且可变参数本质就是数组(由上面例子可知)2、可变参数可以和普通参数一起放在形参列表,但是可变参数必须放在最后3、一个
2021-09-12 15:34:06 115
原创 java数组的赋值机制
数组是引用类型,传值机制和基本数据类型的传值机制不一样,先看以下两段代码运行后得出这样的结论:(1)、基本数据类型赋值只是值的赋值,a2值改变,不会影响a1(2)、数组进行赋值,arr2数组元素改变,arr1数组元素也会改变基本数据类型赋值机制:赋值的只是值,互不影响数组赋值机制:数组是引用类型,存放的是地址,arr1赋值给arr2,所以arr2存放的就是arr1存放的地址,所以他们都指向同一个地址,arr2指向的地址的内容改变,arr1同样也会变化,他们这种赋值机制叫引用赋值或地址赋值..
2021-09-11 16:50:24 496
原创 java的一些运算符细节
一、算术运算符1、进行除法运算时,整数和小数做除法是不一样的,整数做除法,会舍弃小数部分,即10/3=32、进行模运算时,a%b等价于a-a/b*b二、
2021-09-11 15:19:07 139
原创 java基本数据类型的细节和转换
一、程序中加号的使用1、加号左右两边都是数值型时做数值运算2、加号左右两边有一边是字符串时做拼接运算二、整型和浮点型的细节三、基本数据类型的转换1、自动类型转换当精度小的类型转换为精度大的数据类型时可以自动转换注意事项(1)、多种数据类型进行运算时,系统先将各个数据类型转换成其中精度最大的数据类型再进行运算。(2)、(byte、short)不能与char进行类型转换。(3)、byte,short,char可以一起参加运算,在运算时首先自动转换成int类型。(4)、自动提升原则:表达式的
2021-09-11 14:52:08 119
原创 栈的顺序储存结构与操作
一、栈的定义栈是一种只能在一端(栈顶)进行操作的数据结构,具有后进先出的特点。二、栈的顺序储存结构1、储存结构在这里插入代码片
2021-09-01 16:27:02 628
原创 操作系统的启动过程
操作系统在开机前是储存在磁盘中的,以下会依次介绍操作系统从磁盘读入再到操作系统初始化的过程。(以X86为例)一、操作系统读入1、boot扇区的读入(一)、打开电源,CPU处于实模式(二)、CS:IP指向0xFFFF0(ROM BIOS映射区)(三)、BIOS执行自检,检查磁盘、显示器等设备(四)、将boot扇区也叫引导扇区读入0x7c00处(五)、CS:IP指向0x7c002、执行bootsect.s...
2021-08-19 09:52:29 452
原创 循环链表和双向链表
一、循环链表1、特点:从任意一个结点出发,可以访问到全部结点。2、与单链表的区别:单链表最后一个结点指针域的指针指向空,循环链表则是最后一个结点指针域的指针指向头结点,当然如果该链表无头结点,指针就指向第一个结点。下图为带有头结点的循环链表:二、循环链表的操作1、循环链表操作跟单链表操作类似,只是判断循环条件时,单链表是p->next是否为空,而循环链表则是p->next是否为头指针L。2、两循环链表合并...
2021-08-13 23:35:08 575
原创 线性表:顺序储存结构
一、定义一段地址连续的储存单元依次储存线性表的数据元素。二、特点1、插入删除时,当在尾部进行,时间复杂度为o(1),其他情况为o(n)2、存取容易,时间复杂度为o(1),故顺序结构又叫随机存取结构三、储存结构表示#define MAXSIZE 20typedef int ElemType;typedef struct{ ElemType data[MAXSIZE];//最大容量为MAXSIZE的数组 int length;//数据长度}SqList;三、其他操作1、
2021-08-03 16:55:48 114
原创 线性表:链式储存结构(单链表)
一、定义每个数据元素(结点)分为数据域和指针域,数据域储存本身信息,指针域储存指向后继元素的指针。所以不用把所有元素像顺序结构一样连续储存,只要有指针域,我们就能将数据链接在一起。二、特点...
2021-08-03 16:51:15 209
原创 开机与重启命令
shutdownshutdown -h now:立即关机shutdown -h 1:一分钟后关机shutdown -r now:立即重启halt立即关机reboot重启sync将内存数据同步到磁盘,关机前经常使用此命令保存数据
2021-07-29 16:20:09 139
原创 数组的声明
(1)、一维数组的声明int [ ]a=new int[100];声明并初始化了一个储存100个整数的一维数组int [ ]a=new int[n];声明并初始化了一个储存n个整数的一维数组int [ ]a={1,2,3,4,5};(2)、二维数组的声明int [ ][ ]a=new int[3][4];int [ ][ ]a=new int[m][n];int [ ][ ]a={{1,2,3},{4,5,6},{7,8,9}};...
2021-07-09 15:35:24 104
原创 for each循环遍历数组
利用for each循环可以不用考虑下标去遍历整个数组。使用方法:(1)、一维数组int [ ]a=new int[10]; for(int element:a) System.out.println(element);(2)、二维数组int [ ][ ]a=new int[3][4]; for(int row:a) for(int value:row)
2021-07-09 15:05:44 390
原创 CPU提供的栈的机制
一、栈的机制栈是一种后进先出(LIFO)的机制,8086CPU提供一些指令可以将一段内存当做栈来使用,提供了两个基本操作:入栈(push)和出栈(pop)。这两个操作是以字为单位进行的。例:push ax 是将ax里的数据送人栈中,pop ax是将栈顶数据送入ax。二、段寄存器SS和寄存器SP我们如何知道栈的位置在哪?故我们利用段寄存器SS和寄存器SP来指出栈的位置,栈的段地址储存在段寄存器SS中,偏移地址储存在sp中,SS:SP始终指向栈顶。三、入栈与出栈过程push ax的过程:(1)、SP
2021-07-06 10:19:36 508
原创 内存中数据的访问
一、内存中字的储存因为内存单元是字节单元,一个内存单元一个字节,而8086CPU是16位寄存器,所以内存中一个字要两个连续内存单元储存,一个字的低字节储存在低地址单元中,高字节储存在高地址单元中。例如从上图0地址单元读取一个字,那么读入到寄存器上数据为:4E20H二、段寄存器DS当CPU访问一个内存时,要先知道内存的物理地址,前面我们说过用指令段寄存器CS和指令指针寄存器IP可以...
2021-07-06 09:20:00 613
原创 寄存器CS和IP
讲述这两个寄存器前我们先来引入8086CPU是如何给出物理地址来访问内存的。一、物理地址的形成 8086CPU有20位地址总线,可以传送20位地址,寻址能力为1MB,但是它是16位结构,只能送出16位地址,寻址能力为64kb。故8086CPU的物理地址用两个16位地址来合成一个20位的物理地址。 &nbs
2021-07-05 16:45:24 1229
原创 四个通用寄存器:AX,BX,CX,DX
一、AX,BX,CX,DX寄存器作用 寄存器AX、BX、CX、DX是8086CPU中的四个通用寄存器,主要用来存放一般性的数据。二、AX,BX,CX,DX寄存器的结构 因为8086CPU寄存器是16位结构,所以一个寄存器可以存放两个字节,同时为了兼容性,这四个寄存器中每一个寄存器也可以单独分为两个独立的寄存器。即AX=AH(高八位)+AL(
2021-07-04 15:47:41 5402 1
原创 C++STL:vector和list
一、什么是vectorvector是C++STL(标准模板库)里的一种类模板,与普通数组不一样的是vector是可增长的,即大小不是固定的。二、vector的定义定义一个int型的vector则用vector<int>变量名定义一个string型的vector则用vector<string>变量名三、什么是listlist同样也是C++STL中的一种类模板,list是一种双向链表的实现。四、list的定义定义一个int型的list则用list变量名定义一个strin
2021-06-06 23:40:15 881 4
原创 C++:迭代器iterator
一、什么是迭代器在对表的一些插入和删除的一些操作,往往要有位置的表示,STL中有内嵌类型iterator来表示。二、如何表示例如:对于vector
2021-06-06 21:02:19 403
原创 C++:常成员函数
介绍常成员函数先引入以下代码:#include<iostream>using namespace std;class IntCell{public: explicit IntCell(int x):a(x) {} int read() const { return a; }private: int a;};int main(){ IntCell obj(3); cout<<obj.rea
2021-06-01 18:50:30 183
原创 C++:explicit构造函数
今天学习数据结构与算法学到了explicit构造函数,当类的构造函数是单参数时,最好加上explicit关键词。原因用以下代码解释:#include<iostream>using namespace std;class IntCell{public: explicit IntCell(int x):a(x) {}private: int a;};int main(){
2021-06-01 18:37:02 190
原创 计算机组成原理学习笔记:定点数与浮点数的表示方法
一、定点数 定点数就是数据中小数点位置是固定的,分为纯小数和纯整数。纯小数 用一个n+1位来表示一个定点纯小数,首位为符号位,1表示定点数为负数,0表示定点数为正数,小数点就位于符号位之后。纯小数的范围大小 纯小数绝对值最大计算:尾数都为1,2
2021-03-20 16:44:06 2013
原创 c++随机数
rand()函数rand()函数随机生成0-RAND_MAX范围内的整数,RAND_MAX至少为32767((2e+15)-1)。用法:int rand()头文件:#include<cstdlib>要点:rand()产生的其实是伪随机数,它是由数学公式计算出来的,每次执行随机数都一样,要想不同,就用srand()函数设置一个随机数种子。srand()函数为定义时,默认为srand(1).srand()函数srand函数为rand()函数设置一个随机数种子,srand函数里参数相同随机
2021-03-13 15:45:25 516
原创 算法学习笔记:C++STL之set(集合)
C++STL中的set与数学中的集合一样,每个元素最多出现一次,自定义类型也可构造set,但必须定义“小于”运算符。set的定义使用set必须要有头文件#include<set>set<string>dict;set<int>dict;安迪的第一个字典(set和stringstream的应用)输入一个文本,找出所有不同的单词(连续的字母序列),按字典序从小到大输出,单词不区分大小写。#include<iostream>#include<s
2021-03-05 17:10:18 186
原创 C++学习笔记:string流
头文件sstream定义了三个类型来支持string对象的IO流。istringstream从string中读取数据ostringstream向string中写入数据stringstream即可从string中读取数据也可写入数据下面有一例题对string流的运用:输入若干行以空格隔开的整数,计算每行整数的和在这里插入代码片...
2021-03-05 15:46:11 120
原创 C++string 对象的读取
一、使用IO操作符进行读取#include<iostream>#include<string>using namespace std;int main(){ string s; cin>>s; cout<<s<<endl; return 0;}进行读取时,string对象会自动忽略开头的空白(空格符、制表符、换行符等)从一个真正的字符开始,知道遇见下一个空白结束。二、使用getline()读取一整行
2021-03-02 15:59:54 1586
原创 C++获取数据类型字节数和范围
例如int型#include<iostream>#include<cstdio>#include<climits>using namespace std;int main(){ printf("%d\n",sizeof(int)); printf("%d\n",INT_MAX); printf("%d\n",INT_MIN);};有符号整数类型:char:CHAR_MIN、CHAR_MAXshort:SHRT_MIN、SHRT
2021-02-13 21:30:43 418
原创 C++中10的N次方如何表示
例如10的3次方第一种方法:1e+3,10的-3次方则后面添上负号即1e-3,e前面必须要有数字。第二种方法:利用函数pow(x,y);即pow(10,3);注意要加上头文件math.h。
2021-02-08 15:51:38 35104 9
原创 算法竞赛入门学习笔记:数组和字符串
一、逆序输出问题读入一些整数,逆序输出一行#include<iostream>#include<cstdio>using namespace std;#define MAXN 105int a[MAXN];int main(){ int x,n=0; while(scanf("%d",&x)==1) a[n++]=x; for(int i=n-1;i>=1;i--) printf("%d ",a[i
2021-02-05 11:17:55 74
原创 学习笔记:竞赛中的输入输出问题
一、输入一些整数,求出他们的最小值,最大值和平均值样例输入:2 8 3 5 1 7 3 6样例输出:1 8 4.375程序一:#include<iostream>#include<cstdio>using namespace std;int main(){ int x,n=0,min,max,s=0; while(scanf("%d",&x)==1) { if(x<min) min=x;
2021-01-28 10:35:43 148
原创 java学习笔记:基本数据类型与数组
一、基本数据类型Java有八种基本数据类型逻辑类型:boolean整数类型:byte、short、int、long字符类型:char浮点类型:float、double1、整数类型byte型变量分配一个字节,范围为-2的7次方到2的7次方。short型变量分配两个字节内存,范围为-2的15次方到2的15次方。int型变量分配四个字节内容,范围为-2的31次方到2的31次方。long型变量分配8个字节内存,范围为-2的63次方到2的63次方。注意:对于这些整数类型的常量表示,只有i
2021-01-27 21:15:26 326
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人