宅家自学·day3

114 阅读5分钟

一、学习内容

1.Idea快捷键:

快速生成语句
    快速生成main()方法:psvm,回车
    快速生成输出语句:sout,回车
 内容辅助键
    Ctrl+Alt+space(空格)(内容提示,代码补全等)
  快捷键:
    注释:
        单行:选中代码,Ctrl+/,再来一次,就是取消
        多行:选中代码,Ctrl+Shift+/,再来一次,就是取消
     格式化:
        Ctrl+Alt+L 
 debug操作流程:
        F8----调试当前的方法 一步一步调试
        F9-----直接跳转到下一个断点
        F7----直接调试进入方法里面---查看到细节

2.数组的概述

1.1 数组初始化概述:Java中的数组必须先初始化,然后才能使用;初始化就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。
1.2 数组初始化方式:动态初始化、静态初始化
1.3 动态初始化:初始化时只指定数组长度,有系统为数组分配初始值
1.4 动态初始化格式:
数据类型[] 变量名 = new 数据类型[数组长度];


2.1 静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度
格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,...};
举例:int[] arr = new int[]{1,2,3};

简化格式:数据类型[] 数组名 = {元素1,元素2,元素3,...};
int[] arr = {1,2,3};

数组操作的两个常见小问题:
        ArrayIndexOutOfBoundsException:数组索引越界异常
            原因:你访问了不存在的索引。
        NullPointerException:空指针异常
            原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。

3.方法的概述

方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集

1.方法必须先创建才可以使用,该过程成为方法定义;

2.方法创建后并不是直接可以运行的,需要手动使用后才执行,该过程成为方法调用;

格式:
public static void 方法名 () {
// 方法体;
}
范例:
public static void mayikt () {
// 方法体;
}
方法调用:
格式:方法名称();
范例:mayikt();

3.1带返回值方法的定义和调用

1.带返回值方法定义格式:
public static 数据类型 方法名 (参数){
   	return 数据;
}
范例:
public static int getMax(int a){
   	return a;
}

1.方法不能嵌套定义:方法是平级关系,不能嵌套定义
2.void表示无返回值,可以省略return,也可以单独的书写return,一般方法体后面不写return
3.public static 修饰符
4.如果方法操作完毕,有数据返回,写对应的数据类型;明确参数的类型和数量,用于把数据返回给调用者

3.2方法的重载

方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法 相互构成重载
1.多个方法在同一个类中
2.多个方法具有相同的方法名
3.多个方法的参数类型不相同,类型不同或者数量不同


4.Java的栈中存储以下类型数据,栈对应的英文单词是Stack

image.png 栈Stack 取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量 (int, short, long, byte, float, double, boolean, char)和对象句柄。 栈有一个很重要的特殊性,就是存在栈中的数据可以共享。

栈的执行顺序是:"先进后出" 而最先进入栈的是程序主入口'mian()'方法->基本类型变量->引用类型变量->方法函数!

   函数中定义的一些**基本类型的变量(8种)**和**对象的引用变量**都是在函数的**栈Stack**内存中分配。
当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,
java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。

image.png 堆Heap用于存放由**new创建的对象和数组**。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。 在堆中产生了一个**数组或者对象后**,还可以在栈中定义一个特殊的变量, 这个变量的取值等于数组或者对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组或者对象的引用变量, 以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或者对象, 引用变量相当于为数组或者对象起的一个别名,

 引用变量是普通变量,定义时在栈中分配内存,引用变量在程序运行到作用域外释放。
 而数组&对象本身在堆中分配,即使程序运行到使用new产生数组和对象的语句所在地代码块之外,
 数组和对象本身占用的堆内存也不会被释放,数组和对象在没有引用变量指向它的时候,才变成垃圾,
 不能再被使用,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。
 这个也是java比较占内存的主要原因,实际上,栈中的变量指向堆内存中的变量,这就是 Java 中的指针!

Java栈堆原文章