JAVA基础06
方法
使用方法的目的 : 将方法中的功能可以随时抽出来,方便多次使用,避免写代码时的重复性 .
方法的格式 : 修饰符 返回值 方法名 (参数列表) {
方法体 ;
}
修饰符 : public stiatic
返回值类型 : 分有返回值和无返回值 ; 有返回值时 , 可以是任意基本数据类型 , 包括引用. 无返回值 :void
方法名 : 以小驼峰法命名 , 做到见名知意即可 .
参数列表 : 格式 : 数据类型 变量名 ; 可以有一个 , 也可以有多个(多个参数之间用 , 隔开) , 也可以没有
方法体 : 表示要实现的功能
注意: 方法与方法之间是平级关系 , 不能嵌套定义
有返回值时要用return返回参数列表中设置的所对应的数据类型
方法不调用时不会执行
方法可以在main方法中调用 , 也可以在其他方法中调用
无返回值调用方法(静态)时 , 可直接使用方法名调用 , 在括号中传入对应的参数即可 . 有返回值要调用该方法时,要创建一个与返回值类型相同的变量来接受该返回值 . 并在括号中传入对应的参数 .
import java.util.Scanner;
//方法的调用
public class Demo1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数字");
int n = sc.nextInt();
getSum(n);
get2(100, 200, 300);
int sum = get3(1, 2, 3);
System.out.println(sum > 1 ? 10 : sum);
}
public static void getSum(int n) { // 单参数无返回值的方法
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += i;
}
System.out.println(sum);
get1(); //在一个方法中调用另一个方法
}
public static void get1() {
System.out.println("你好明天");
}
public static void get2(int a, int c, int b) {//多参数无返回值的方法
int d = a + b + c;
System.out.println(d);
}
public static int get3(int a, int b, int c) { //多参数有返回值的方法
int d = a + b + c;
System.out.println(d);
return d;
}
}
方法的重载
定义 : 在一个类中可以出现多个方法名相同 , 但必须保证参数个数及参数类型不同的方法 . 与返回值及方法名无关 .
好处:不需要定义过多的方法名 , 可根据带入的参数个数及参数类型来判断 .
//方法的重载
public class Demo2 {
public static void main(String[] args) {
test(12.4, 12.1);
test(4);
}
public static void test(double a, double b) {
double c = a - b;
System.out.println(c);
}
public static void test(double r) {
double b;
double a;
a = 2 * r * 3.14;
b = r * r * 3.14;
System.out.println("圆的周长:" + a + ",圆的面积:" + b);
}
public static void test1(double a, int b) {
}
public static void test1(int a, double b) {
}// 不同数据类型做参数时,放入的位置不同,是方法的重载, ******
public static void test2(int a, int b) {
}
public static void test2(int b, int a) {
}// 相同数据类型做参数,变量名不同,不是方法的重载 *******
}
数组
定义:用来储存一组相同数据类型的集合 , 可以是引用数据类型String
注意 : 数组中的元素必须保持统一 .
数组本身是引用数据类型 , 但是里面的元素本身即可以是基本数据类型, 也可以是引用数据类型 .
数组的长度一旦给定就无法改变
声明格式 : 数据类型[] 数组名 ;
数据类型 数组名[];
备注 : main方法中只有两个地方可以变动 . 一个是中括号[]的位置可以变动 , 另一个是args 可以变动
数组的初始化 :
动态初始化:给定数组的长度 , 由系统分配空间和初始化值 , 初始化值即每个数据类型所对应的默认值
格式: 数据类型[] 数组名 = new 数据类型[数组长度];
数组的索引值 : 表示数组中每个元素对应的序号 , 从0-数组长度-1 .
数组的赋值和取值 : 赋值 : 数组名[索引值] = 要赋的值;
取值 : 数组名[索引值] ;
静态初始化 : 给定数组中的元素 , 由系统分配长度并赋值 .
格式 : 数据类型[] 数组名 = new 数据类型[]{1,2,3};
简写 : 数据类型[] 数组名 = {1,2,3} ;
注意 : 简写形式 ,只有在定义第一次数组的时候才能使用 . 重写赋值的适合不能简写 .
不能在定义数组的时候又给定长度 , 又给定值 .
动态数组的赋值与取值:
String[] arr7=new String[4];
arr7[0]="春天";
arr7[1]="夏天";
arr7[2]="秋天";
arr7[3]="冬天";
System.out.println(arr7[0]);
System.out.println(arr7[1]);
System.out.println(arr7[2]);
System.out.println(arr7[3]);
数组长度的获取 : 数组名.length
数组的内存分析 :
栈 : 局部变量和方法的执行区 , 没有初始值 , 方法执行完毕后消失 , 局部变量也会跟着消失 .
堆 : new 出来的东西 , 有初始值 , 堆内存空间很大 , 每new一下就会开辟一块空间 , 栈内存空间很小 , 所有用完后就会消失 .
在堆内存中的初始值 : 基本数据类型就是他们的默认值 , 引用数量类型是null
注意 : 如果堆内存中new的那片空间没有变量指向它时,就会变成垃圾,会在一定时机内被gc自动回收
数组常见的异常:
1 . 空指针异常 : 产生原因为,使用null调用堆内存中的内容 , 要注意的是 , 如果一个变量的赋值为null , 直接打印那个变量整体是不会报错的 , 会打印出null , 但调用该数组中的的某一个值时 , 会报空指针异常 .
int[] arr = null ; //不会报错但不会在堆内存中开辟一块空间 .
syso (arr) ; // 打印结果为null
syso (arr[0]) ; //报空指针异常
空数组 : int [] arr ={} ; //直接打印数组名 ,为地址值
数组为null : int[] arr = null ; //直接打印数组名,为null
2.数组脚表越界 :产生原因为,调用数组时,填入的数组的索引值,超出了它本身索引值的最大范围 .
数组的案例
****重要案例 ******:
- ```
/*把一个数组赋值给另一个数组,会将它的地址值赋值过去,
- 如 : arr2=arr1会将arr2的地址值也变成arr1的地址值
- 即arr1和arr2的地址值一致,且共享arr1内存区的数组
- arr2原始内存区的数组就被抛弃了,会在一定时间被gc回收
*/
public class Demo4 {
public static void main(String[] args) {
int[] arr1=new int[3];
arr1[0]=10;
System.out.println(arr1[0]); //10
int[] arr2=new int[4];
arr2[0] = 20;
System.out.println(arr2[0]); //20
arr2=arr1;
System.out.println(arr2[0]); //20
System.out.println(arr2[3]); //报错,因为arr2已经变成了只有3个长度的arr1
}
}
点名系统:
import java.util.Random;
//点名系统
public class Demo5 {
public static void main(String[] args) {
String[] arr = new String[] { “a”, “b”, “c”, “d”, “e”, “f” };
Random r = new Random(); //调随机数
int i = r.nextInt(arr.length - 1); //将随机数赋值给i
System.out.println(arr[i]);
}
}
数组的遍历:
//将一个数组由中括号加逗号的形式打印出来,并封装成方法
public class ArrayUtil {
String[] arr = new String[] { “hello”, “world”, “hello”, “china” };
public static void arrpaixu(int arr[]) {
for (int i = 0; i < arr.length; i++) {
// 对一个元素的数组做单独处理
if (arr.length == 1) {
System.out.println("[" + arr[0] + “]”);
}
// 2. 如果是第一个元素:打印 [元素,
else if (i == 0) {
System.out.print("[" + arr[i] + “,”);// 注意不换行
} else if (i == arr.length - 1) {
// 3. 最后一个元素: 元素]
System.out.println(arr[i] + “]”);// 可以换行
} else {
// 4.其余元素: 元素,
System.out.print(arr[i] + “,”);// 不换行
}
}
}
}