JAVA初学笔记&宋红康JAVA小总篇(其六~其七)

数组

  • 数组名[数组大小也称下标]

  • 使用

    //初始化
    /*
    里面元素是整型(int):0
    里面元素是浮点型(float/double):0.0
    里面元素是char型:0或者'\u0000',不是'0'!
    里面元素是boolean型:False
    里面元素是引用数据类型(例如String):Null
    */
    //声明
    int[] ids;
    //静态初始化
    ids = new int[]{1,2,3,4};
    //动态初始化
    String[] names = new String[5];
    
    //错误示范
    int[] arr1 = new int[];  // 没有定义数组大小
    int[5] arr2 = new int[5];  // 重复
    int[] arr3 = new int[3]{1,2,3};  // 数组‘超载’
    
    //调用
    arr3[0];
    
    //获取数组长度
    arr_names,length;
    
    //遍历
    for(int i = 0; i<arr_names,length;i++){
        System.out.println(arr_names[i]);
    }
    

JAVA类与对象

由类和对象组成

public class PersonTest{
	public static void main(String[] args){
		//这里创建了一个Person类的对象
		Person p = new person();
		
		//调用属性 对象.属性
		p.name = "Sam";
		
		//调用方法 对象.方法
		p.eat();
	}
}
  • 类是一个抽象的概念,可以是各个方面,但建议是宏观概念
  • 对象是你写的(

JAVA基本算法

  • 数组的复制

  • 数组元素的反转

  • 线性查找

  • 二分法查找

    数组得先排好序,用所要比较的值从中间开始找,逐渐缩小范围,改变“中间”的位置,公式:(min+max)/2

  • 冒泡排序

  • 快速排序

    两边查询替换,冒泡的升级版

内存知识补充

堆与栈区别

堆与栈实际上是操作系统对进程占用的内存空间的两种管理方式,主要有如下几种区别:
(1)管理方式不同。栈由操作系统自动分配释放,无需我们手动控制;堆的申请和释放工作由程序员控制,容易产生内存泄漏;

(2)空间大小不同。每个进程拥有的栈的大小要远远小于堆的大小。理论上,程序员可申请的堆大小为虚拟内存的大小,进程栈的大小 64bits 的 Windows 默认 1MB,64bits 的 Linux 默认 10MB;

(3)生长方向不同。堆的生长方向向上,内存地址由低到高;栈的生长方向向下,内存地址由高到低。

(4)分配方式不同。堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配是由操作系统完成的,比如局部变量的分配。动态分配由alloca函数进行分配,但是栈的动态分配和堆是不同的,他的动态分配是由操作系统进行释放,无需我们手工实现。

(5)分配效率不同。栈由操作系统自动分配,会在硬件层级对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆则是由C/C++提供的库函数或运算符来完成申请与管理,实现机制较为复杂,频繁的内存申请容易产生内存碎片。显然,堆的效率比栈要低得多。

(6)存放内容不同。栈存放的内容,函数返回地址、相关参数、局部变量和寄存器内容等。当主函数调用另外一个函数的时候,要对当前函数执行断点进行保存,需要使用栈来实现,首先入栈的是主函数下一条语句的地址,即扩展指针寄存器的内容(EIP),然后是当前栈帧的底部地址,即扩展基址指针寄存器内容(EBP),再然后是被调函数的实参等,一般情况下是按照从右向左的顺序入栈,之后是被调函数的局部变量,注意静态变量是存放在数据段或者BSS段,是不入栈的。出栈的顺序正好相反,最终栈顶指向主函数下一条语句的地址,主程序又从该地址开始执行。堆,一般情况堆顶使用一个字节的空间来存放堆的大小,而堆中具体存放内容是由程序员来填充的。

从以上可以看到,堆和栈相比,由于大量malloc()/free()或new/delete的使用,容易造成大量的内存碎片,并且可能引发用户态和核心态的切换,效率较低。栈相比于堆,在程序中应用较为广泛,最常见的是函数的调用过程由栈来实现,函数返回地址、EBP、实参和局部变量都采用栈的方式存放。虽然栈有众多的好处,但是由于和堆相比不是那么灵活,有时候分配大量的内存空间,主要还是用堆。

无论是堆还是栈,在内存使用时都要防止非法越界,越界导致的非法内存访问可能会摧毁程序的堆、栈数据,轻则导致程序运行处于不确定状态,获取不到预期结果,重则导致程序异常崩溃,这些都是我们编程时与内存打交道时应该注意的问题。

摘抄于 -> https://blog.csdn.net/K346K346/article/details/80849966/

你可能感兴趣的:(教程,java)