JavaSE——方法以及方法重载,数组的初始化,数组初始化内存分配,数组遍历。
1.方法
假设有一个游戏程序,程序在运行过程中,要不断地发射炮弹(植物大战僵尸)。发射炮弹的动作需要编写100行的代码,在每次实现发射炮弹的地方都需要重复地编写这100行代码,这样程序会变得很臃肿,可读性也非常差。为了解决代码重复编写的问题,可以将发射炮弹的代码提取出来放在一个{}中,并为这段代码起个名字,这样在每次发射炮弹的地方通过这个名字来调用发射炮弹的代码就可以了。上述过程中,所提取出来的代码可以被看作是程序中定义的一个方法。
方法就是完成特定功能的代码块。
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2 ....){
方法体;
return 返回值;
}
格式说明:
(1): 修饰符 比较多,后面文章会有详细介绍,目前使用 public static
(2): 返回值类型 用于限定返回值的数据类型
(3): 方法名 就是一个名称,它的存在是为了方便我们调用方法
(4): 参数类型 限定调用方法时传入参数的数据类型
(5): 参数名 是一个变量,接收调用方法时传入的参数,这个参数其实有一个专业的名词,被称之为形式参数,它的作用是用来接收实际参数的.
(6): 方法体 完成功能的代码
(7): return 结束方法以及返回方法指定类型的值
(8): 返回值 就是功能的结果,由return带回,带回给调用者
// 输入n,求1-n之间所有偶数的和
package org.wetmo.demo1;
import java.util.Scanner;
public class demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入一个数n:");
int n = sc.nextInt();
int sum=add(n);
System.out.println("1-"+n+"之间所有偶数和为"+sum);
}
public static int add(int a){
int sum1=0;
for(int i=1;i<=a;i++){
if(i%2==0){
sum1=sum1+i;
}
}
return sum1;
}
}
/*输入行数,输出如下图像
*
**
***
...
*/
package org.wetmo.demo1;
import java.util.Scanner;
public class MyDemo6 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入行数:n");
int n = sc.nextInt();
show(n);
}
public static void show(int a){
for(int i=0;i<a;i++){
for(int j=0;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
}
}
2.方法重载
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同。
package org.wetmo.demo1;
public class MyDemo7 {
public static void main(String[] args) {
add(1,1);
add(1,2.2);
add(1,1,1);
}
public static int add(int a,int b){
return a+b;
}
public static double add(int a,double b){
return a+b;
}
public static int add(int a,int b,int c){
return a+b+c;
}
}
3.数组
3.1数组的概述和定义格式
-
数组概念
数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。数组既可以存储基本数据类型,也可以存储引用数据类型(后面讲解)。
-
数组的定义格式
格式1: 数据类型[] 数组名;
格式2: 数据类型 数组名[];
3.2数组的初始化
-
初始化的概念
就是为数组中的数组元素分配内存空间,并为每个数组元素赋值 -
初始化的分类
动态初始化: 只指定长度,由系统给出初始化值;
静态初始化: 给出初始化值,由系统决定长度;
注意事项: 这两种方式,只能使用一种,不能进行动静结合。
3.3 Java中内存配以及栈和堆的区别
-
概述
Java虚拟机在执行Java程序的过程中会把它管理的内存划分成若干个不同的数据区域。如图所示
- 栈: 存放的是局部变量
局部变量:在方法定义中或者方法声明上的变量都是局部变量。 - 堆: 存放的是所有new出来的东西
特点:
a: 每一个new出来的东西都会为其分配一个地制值。
b: 每一个变量都有一个默认的值
byte,short,int,long – 0
float,double – 0.0
char – ‘\u0000’
boolean – false
引用数据类型 – null
c: 使用完毕就变成了垃圾,等待垃圾回收器对其回收 - 方法区:(面向对象部分讲解)
- 本地方法区:(和系统相关)
- 寄存器:(cpu使用)
-
举例如下
//根据如下代码写出输出结果并画出内存图
package org.wetmo.demo1;
public class MyDemo8 {
public static void main(String[] args) {
int[] arr=new int[3];
arr[0]=11;
arr[1]=12;
arr[2]=13;
int[] arr1 = new int[3];
arr1[0]=20;
arr1[1]=30;
arr1[2]=40;
int[] arr3=arr;
arr[0]=100;
arr3[0]=1000;
arr3[1]=2000;
arr3[2]=3000;
System.out.println(arr[0]);//1000
System.out.println(arr[1]);//2000
System.out.println(arr[2]);//3000
System.out.println(arr3[0]);//1000
System.out.println(arr3[1]);//2000
System.out.println(arr3[2]);//3000
}
}
过程:编译MyDemo8.java,产生编译文件,运行MyDemo8.class调用主方法main(),在栈内存中定义一个int类型的数组,数组名,在堆内存中创建一个长度为3的内存空间(默认值为0),将此内存空间的地址给数组名,数组名通过这个地址访问到这个内存空间,然后赋值。
//将数组中的元素对调,然后输出
package org.wetmo.demo1;
public class MyDemo9 {
public static void main(String[] args) {
int[] arr ={112,34,57,1,90,123,23};
show(arr);
}
public static void show(int a[]){
for(int i=0;i<a.length/2;i++){
int t=a[i];
a[i]=a[a.length-1-i];
a[a.length-1-i]=t;
}
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
}
//将下列数组从小到大排序并输出
arr ={112,34,57,1,90,123,23,67};
package org.wetmo.demo1;
public class MyDemo9 {
public static void main(String[] args) {
int[] arr ={112,34,57,1,90,123,23,67};
show(arr);
}
public static void show(int a[]){
for(int i=0;i<a.length;i++){
for(int j=0;j<a.length-1-i;j++) {
if(a[j]>=a[j+1]) {
int t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
}
//此题采用的是冒泡排序,关于其他数组排序方式后面文章会有介绍