指针初始化

7.数组

荒凉一梦 提交于 2020-03-28 17:25:52
一、数组的概述 1.定义   多个相同数据类型的数据按照一定的顺序排列的集合,使用一个名字命名,并通过编号的方式对这些数据进行统一管理。 2.特点   ①数组是有序排列的;   ②数组本身是引用数据类型,数组中的元素既可以是基本数据类型,也可以是引用数据类型;   ③创建数组会在内存中开辟一整块连续的空间,而数组通过数组名引用的是这块连续空间的首地址;   ④数组一旦初始化完成,其长度就确定了;数组的长度一旦确定,就不能修改;   ⑤通过索引来访问数组中的元素,速度很快 3.分类 按照维数:一维数组、二维数组、多维数组 按照数组中元素的类型:基本数据类型元素的数组、引用数据类型元素的数组 二、一维数组 1.一维数组的声明和初始化 public class test { public static void main(String[] args) { //数组的声明 int[] arr1; String arr2[]; //数组的静态初始化 arr1 = new int[]{1, 2, 3}; //数组的动态初始化 arr2 = new String[4]; //声明+初始化 int[] arr3 = new int[3]; //类型推断 String[] arr4 = {"str1", "str2", "str3"}; } } 2.访问一维数组中的元素 public class

JVM史上最最最完整深入解析(12000字噢)

空扰寡人 提交于 2020-03-27 18:12:07
3 月,跳不动了?>>> 点点这个链接免费获取: 【推荐】2020年最新Java电子书集合.pdf(吐血整理) >>> 工作之余,总结一下JVM相关知识。 Java运行时数据区: Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁。Java虚拟机所管理的内存包括以下几个运行时数据区域,如图: 1、程序计数器:指向当前线程正在执行的字节码指令。线程私有的。 2、虚拟机栈:虚拟机栈是Java执行方法的内存模型。每个方法被执行的时候,都会创建一个栈帧,把栈帧压人栈,当方法正常返回或者抛出未捕获的异常时,栈帧就会出栈。(1)栈帧:栈帧存储方法的相关信息,包含局部变量数表、返回值、操作数栈、动态链接a、局部变量表:包含了方法执行过程中的所有变量。局部变量数组所需要的空间在编译期间完成分配,在方法运行期间不会改变局部变量数组的大小。b、返回值:如果有返回值的话,压入调用者栈帧中的操作数栈中,并且把PC的值指向 方法调用指令 后面的一条指令地址。c、操作数栈:操作变量的内存模型。操作数栈的最大深度在编译的时候已经确定(写入方法区code属性的max_stacks项中)。操作数栈的的元素可以是任意Java类型,包括long和double

刚从京东面试回来,我才知道这些JVM知识有多重要

百般思念 提交于 2020-03-25 17:24:55
刚从京东面试回来,我才知道这些JVM知识有多重要 面试题 关于JVM的知识之前也写过相关的文章整理,但是从京东面试后,才发现这些JVM的知识点尤为重要,所以特意整理出来以供大家参考。 1.什么是类的加载? 2.哪些情况会触发类的加载? 3.讲一下JVM加载一个类的过程 4.什么时候会为变量分配内存? 5.JVM的类加载机制是什么? 6.双亲委派机制可以打破吗?为什么 答案放在文章的最后,来不及看原理也可以直接跳到最后直接看答案。 深入原理 类的生命周期 类的生命周期相信大家已经耳熟能详,就像下面这样: 不过这东西总是背了就忘,忘了又背,就像马什么梅一样,对吧? 其实理解之后,基本上就不会再忘了。 加载 加载主要做三件事: 1.找到类文件(通过类的全限定名来获取定义此类的二进制字节流) 2.放入方法区(将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构) 3.开个入口(生成一个代表此类的java.lang.Class对象,作为访问方法区这些数据结构的入口) 总的来讲,这一步就是通过类加载器把类读入内存。需要注意的是,第三步虽然生成了对象,但并不在堆里,而是在方法区里。 连接 连接分为三步,一般面试都比较喜欢问准备这一步。 校验 顾名思义,检查Class文件的字节流中包含的信息是否符合当前虚拟机的要求。 准备 这一步中将为静态变量和静态常量分配内存,并赋值。 需要注意的是

Go语言调度器之创建main goroutine(13)

空扰寡人 提交于 2020-03-23 16:42:36
本文是《Go语言调度器源代码情景分析》系列的第13篇,也是第二章的第3小节。 上一节我们分析了调度器的初始化,这一节我们来看程序中的第一个goroutine是如何创建的。 创建main goroutine 接上一节,schedinit完成调度系统初始化后,返回到rt0_go函数中开始调用newproc() 创建一个新的goroutine用于执行mainPC所对应的runtime·main函数,看下面的代码: runtime/asm_amd64.s : 197 # create a new goroutine to start program MOVQ $runtime·mainPC(SB), AX# entry,mainPC是runtime.main # newproc的第二个参数入栈,也就是新的goroutine需要执行的函数 PUSHQ AX # AX = &funcval{runtime·main}, # newproc的第一个参数入栈,该参数表示runtime.main函数需要的参数大小,因为runtime.main没有参数,所以这里是0 PUSHQ $0 CALL runtime·newproc(SB) # 创建main goroutine POPQ AX POPQ AX # start this M CALL runtime·mstart(SB) # 主线程进入调度循环

C++标准模板库里面的容器

ぃ、小莉子 提交于 2020-03-23 13:32:09
1. 顺序容器 sequential container 单一类型 元素组成的 有序 集合 优:顺序访问元素快 不足:添加、删除元素性能相对低 非顺序访问元素性能相对低 vector、string、array都是连续的内存空间 容器选择:取决于执行访问的操作多还是插入删除的操作多     ①一般用vector     ②空间开销很重要时,不适用链表如list、forward_list     ③需要随机访问:vector、deque     ④要在中间进行插入、删除:链表类型如list、forwad_list     ⑤只要在头尾插入、删除:deque     ⑥读取输入时要在中间插入,之后要随机访问: 输入时用vector追加数据,在调用sort()函数,以避免在中间添加元素 若必须要在中间插入元素,输入时用list,输入完成后将list的内容保存到vector中 1.1 vector    https://zh.cppreference.com/w/cpp/container/vector (1)vector的增长 vector<int> ivec; cout<<"size:"<<ivec.size()<<endl; cout<<"capacity:"<<ivec.capacity()<<endl; for(int i=0;i<20;i++) { ivec.push_back

黑马程序员-----指针

爱⌒轻易说出口 提交于 2020-03-23 09:15:33
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ------- 第一讲 指针的基本概念 一、基本概念 内存单元的编号叫做地址。 //根据内存单元的编号或地址就可以找到所需的内存单元,所以通常把这个地址称为指针。 内存单元的指针和内存单元的内容是两个不同的概念。 总结:对于一个内存单元来说,单元的地址即为指针,其中存放的数据才是该单元的内容。 二、使用指针好处 a.为函数提供修改调用变量的灵活手段。 b.让函数有多个返回值。 //简易计算器 1 #include<stdio.h> //定义一个函数,有加,减,乘,除 2 void caculator(int x,int y, int *add , int *jian , int *cheng, float *chu){ 3 //在函数的内部访问了主调函数中的变量值 4 //加法指针变量表达式 5 *add = x + y; 6 7 //减法指针变量表达式 8 *jian = x - y; 9 10 //乘法指针变量表达式 11 *cheng = x * y; 12 13 //除法指针变量表达式 14 *chu = x /(float)y; 15 16 } 17 int main(int

c++ static

强颜欢笑 提交于 2020-03-23 05:07:07
静态全局变量 #include <iostream> using namespace std; static size_t ctr = 0; size_t count_calls() { return ++ctr; } int main() { for(size_t i=0; i < 10; ++i) { cout << "times:" << count_calls() << endl;; } } 特点 该 变量 在全局数据区分配内存 未经初始化的静态全局变量会被程序自动初始化为0 静态 全局变量 在声明它的整个文件都是可见的,而在文件之外是不可见的 结果 全局变量和全局静态变量的区别 1)全局变量是不显式用static修饰的全局变量,但全局变量默认是动态的,作用域是 整个工程 ,在一个文件内定义的全局变量,在另一个文件中,通过extern 全局变量名的声明,就可以使用全局变量。 2)全局静态变量是显式用static修饰的全局变量,作用域是声明此变量 所在的文件 ,其他的文件即使用extern声明也不能使用。 静态局部变量 #include <iostream> using namespace std; size_t count_calls() { static size_t ctr = 0; return ++ctr; } int main() { for(size_t i=0

【C#】C#语法基础---转

耗尽温柔 提交于 2020-03-22 16:42:57
一,注释语句 /*注释语句包含在"反斜杠* "和" *反斜杠"中, 或者两个反斜杠和换行符之中, 或者三个反斜杠和换行符之中(可以被VS自动识别为文件注释以提取) 要注意注释中的\,该续行符会把下一行连上来一起注释掉出错。*/ static void Main(string[] args)   {//语句块包含在{}中     int MyInterger;//语句以;结束     string MyString;///忽略空白字符(空格/回车/TAB)     MyInterger = 17;   } //要注意防止注释嵌套出错,可用#if,#endif预处理语句。 二,数据类型 1,基本型/内置型 用户自定义型 A,内置类型:CS使用.net FrameWork ? 库中的数据类型 sbyte = System.SByte,... 类型 字节数 解释 byte 1 无符号字节型 sbyte 1 有符号字节型 short 2 有符号短字节型 ushort 2 无符号短字节型 int 4 有符号整型 uint 4 无符号整型 long 8 有符号长整型 ulong 8 无符号长整型 float 4 浮点数 double 8 双精度数 decimal 8 固定精度数 string ? unicode字串型 char ? unicode字符型 bool ? 真假布尔型/

2018.6.13 Java语言基础复习总结

点点圈 提交于 2020-03-21 20:03:17
Java语言基础与面向对象编程实践 第一章 初识Java 1.1机器语言 机器语言是指一台计算机全部的指令集合。机器语言室友0和1组成的二进制数,是一串串由0和1组成的指令序列,可将这些指令序列交给计算机执行。 1.2汇编语言 负责把汇编语言翻译成二进制的机器语言,这种翻译程序就是汇编程序。 1.3高级语言 1954年第一个完全脱离机器硬件的高级语言FORTRAN诞生 1.3.1C语言 是一种计算机程序设计语言,它既有高级语言的特点,又具有汇编语言的特点。 1.3.2 C++语言 是具有面向对象特性的C语言,面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。通过面向对象的方式,将现实世界的事物抽象成类和对象,帮助我们实现对现实世界的抽象与建模。 1.3.3 C#语言 是一种面向对象的运行于.NET Framework之上的高级程序设计语言。C#与Java很相似(单一继承、接口、编译成中间代码在运行) 1.4 SQL语言 结构化查询语言(Structured Query Language,SQL)是一种数据库查询和编程的语言。用于存取数据库以及查询、更新和管理关系数据库系统 1.5 Java的诞生 ·1995年Sun推出的Java只是一种语言 ·JDK包括两个部分:运行环境(JRE)和开发环境(JDK)在运行环境包括了核心API、集成API、用户界面

C++的多态性

南楼画角 提交于 2020-03-21 06:53:17
1.静态多态 (1)函数重载 (2)操作符重载 2.动态多态 继承,虚函数 实现机制: 以下摘自于 http://blog.csdn.net/zyq0335/article/details/7657465 1 什么是多态? 多态性可以简单的概括为“1个接口,多种方法”,在程序运行的过程中才决定调用的机制 程序实现上是这样,通过父类指针调用子类的函数,可以让父类指针有多种形态。 2 实现机制 举一个例子: #include <iostream.h> class animal { public: void sleep() { cout<<"animal sleep"<<endl; } void breathe() { cout<<"animal breathe"<<endl; } }; class fish:public animal { public: void breathe() { cout<<"fish bubble"<<endl; } }; void main() { fish fh; animal *pAn=&fh; pAn->breathe(); } 答案是输出:animal breathe 结果分析: 1从编译的角度 C++编译器在编译的时候,要确定每个对象调用的函数的地址,这称为早期绑定(early binding),当我们将fish类的对象fh的地址赋给pAn时,C