函数
Java基础(函数-定义 -格式)
是定义在类中的具有特定动能的一段独立小程序。
函数也称为方法
格式:
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,……){
执行语句;
return 返回值;
}
Java中对每一种数据都进行了具体的划分,因此每个数据都有它的数据类型
函数名的规格是通过看名字大概了解该函数的功能
Java基础(函数-细节-void)
函数功能没有具体的返回值,这种情况下我们可用return后面直接分号。或者,使用用关键字void来表示这种情况。
如果返回值是void,return可以不写。
Java基础(函数-细节-错误格式 -定义思想错误)
函数中只能调用函数,不可以在函数内部定义函数。定义函数时,函数结果应该返回给调用者,交给调用者处理。
定义函数时,首先要明确该函数的结果。
public static void add(int a,int b){
System.out.println(a+b)
return;
}
上面加法代码就是属于定义错误,虽然可通过编译,也能运行,但他的功能应该时将加法结果返回。
Java基础(函数-两个明确)
一:这个功能的结果是什么
二:这个功能实现过程是否需要未知内容参与运算
Java基础(函数-内存加载过程)
FunctionDemo.java
class Function {
public static int add(int a,int b){
return a+b;
}
public static void main(String[] args) {
int x = add(3,5);
System.out.println(x);
}
}
javac 命令将java----->Function.java
java functiom 执行程序,开辟空间。
栈
add函数进栈
返回结果后add函数出栈
主函数赋值玩成后也出栈,执行完毕。
Java基础(函数-重载)
数组
01-Java基础(数组-概述)
02-Java基础(数组-定义)
容器是一个实体,它需要在内存中开辟空间存储,,用关键字new。
例:int []arr=new int[3 ];左边声明一个int类型的数组名称为arr,右边开辟一个int类型的数组空间长度为3,并且有默认值0
需要对数组的第i个数据操作时可以直接在中括号里输入第i-1。
03-Java基础(数组-内存空间的划分)
内存的划分:
1寄存器(cpu)
2本地方法区(所在系统相关的)
3方法区(类加载)
4栈内存
5堆内存
04-Java基础(数组-栈内存)
存储的都是局部变量,方法中定义的变量都是局部变量。
栈内存处理数据的特点:变量所属作用域一旦结束,该变量就自动释放。
05-Java基础(数组-堆内存)
存储的是数组和对象(其实数组就是对象),凡是new建立的,都在堆中,这也就是说我们数组就存放在堆内存中。
再说说堆内存处理数据的特点:
1、每一个实体都有一个首地址值;
2、堆内存中的每一个变量都有默认初始化值,根据类型的不同而不同.整数是0,小数0.0或者0.0f,boolean是false,char是’\u0000’
3、垃圾回收机制//自动回收垃圾;
数组都是引用数据类型,java里的引用跟c++的指针指向是一回事/
几乎所有的对象和数组都是在堆中分配空间的,堆是线程共享的。堆分为新生代和老年代两部分,新生代用于存放刚刚产生的对象和年轻的对象,新生代又可以细分为eden,s0和s1区。eden表示对象的出生地,大部分刚刚出生的对象会存放在这里,s0和s1区空间,称为幸存者,其中存放的对象至少经历了一次垃圾回收,并得以幸存。如果在幸存区的对象到了指定年龄还没有被回收,则有机会进入老年代。
堆里有一块空间,空间的地址拷贝一份保存到栈里面一个变量里,栈引用了堆中的内存地址赋值是把内存地址付给了栈 。
操作这个变量就能操作堆的那一块空间。
06-Java基础(数组-内存图解)
用y给x赋值的过程。x=y
多个应用变量是可以同时引用一个实体的,并且在此时执行y=null;语句,不会将0x0087地址的内存回收,因为x还在引用。只要还有引用变量在引用的实体都不会被回收。
07-Java基础(数组-常见问题)
ArrayIndaxOutofBoundException(数组索引超出范围)
当访问到数组中不存在的角标时,就会发生该异常。
这种问题可以通过编译,但运行时出错。
NullPointerException(控制在异常)
当引用变量没有任何实体指向时,还在用其操作,然后发生异常。
windows直接打印数组变量名时如:
int arr = new int[3];
System.out.println(arr);
打印结果:[I@c171674
这是个哈希值,可以简单理解为内存地址,这个值要在哈希算法中运算后才得到内存地址,而开辟空间的工作其实是windows的工作。