Java基础语法-方法与数组
2018-10-16 本文已影响2人
我叫吴智斌
1.通过分析,明确需求
2.整理相关的知识点
3.梳理实现流程
4.借助断点调试解决问题
方法
就是一个小功能.把一段代码存起来,以后可以重复使用.
相当于JavaScript 里的函数
static void printB() {//创建一个方法叫planB, 前面必须加入一个static
System.out.println("b");
System.out.println("b");
System.out.println("b");
System.out.println("b");
}
//main方法
public static void main(String[] args) {
printB();//调用方法
}
方法注意点
注意点:
1.方法-必须声明到类(class)当中
2.创建的方法必须要定义到其他方法之外(跟其他方法是兄弟关系)
3.定义方法不分先后顺序
4.如果一个方法前面有static,那么在该方法当中调用其他的方法前面也应该有static
5.一个类当中可以写多个方法
6.方法名称不能一样
7.方法必须要先定义再执行
与JavaScript相比较,明显强大和复杂很多,声明形参必须要声明它的类型
static void printB(int a ,int b)
static void printB() {
System.out.println("b");
System.out.println("b");
System.out.println("b");
System.out.println("b");
}
//main方法 功能:程序一进来,就会自动执行
public static void main(String[] args) {
printB();
}
方法的完整形式:
[修饰符] 返回值类型 方法名([形式参数...]){
方法体(要重复使用的代码)
[return 值;]
}
[ ]中可选
void 返回值为空,什么都不返回,如果有返回值,里面必须得要有return
/**
* 求两数之和
* @param n 第一个数
* @param m 第二个数
*/
static void sum(int n,int m) {//创建方法(形参:在定义方法是,自己起的名字)
int res= n+m;
System.out.println(res);
}
public static void main(String[] args) {
sum(1,2);//调用方法(实参:在调用方法时,传入的实际的值)
}
在此处声明的变量,只在方法当中有效.出了方法,就没有效果.外界的名称也不会影响里面
static String stringConcat(String str1,String str2) { //static 后面要定义String类型
// System.out.println(str1+str2);
return str1+str2;
}
return后面是什么类型,那么定义返回值时,在生命是,就要定义什么类型
public static void main(String[] args) {
String ziFuChuan = stringConcat("hello", "world");// ziFuChuan 接收了返回值
System.out.println(ziFuChuan);
}
定义方法时,返回什么类型,就必须得要使用什么类型接接收
定义了有返回值,接不接收返回值都可以
方法重载
调试的时候,F5是进入方法内部,F6是进入下一步
在同一个类中,允许方法名称相同,方法参数不同
方法的重载解决了,功能相同,参数不同,就不需要定义多个方法名称了
数组
作用:帮我们存放相同类型的东西
1.存放的东西必须是相同的数据类型
2.存放的东西都是有序的,可以通过脚标来获取存的内容
数组格式:
要存放的数据类型[] 数组的名称 = new 要存放的数据类型[] {存放指定数据类型的内容}
数组初始化:
静态初始化:在创建数组的时候,就已经确定了有多少个元素,并且把元素都放在数组当中
int ages[];//先定义
ages=new int[] {10,20,3,0,45};//再赋值,(初始化)
如果不初始化,数组是不能使用的;
动态初始化:一开始不知道要存哪些数据,所以先定义一个指定空间大小
String[] allPerson=new String[100];
allPerson[0]="张三";
allPerson[1]="ls";
allPerson[2]="ww";
allPerson[3]="wc";
//ArrayIndexOutOfBoundsException:数组越界
String person=allPerson[101];//超出100
System.out.println(person);
数组的遍历
获取数组元素的个数:数组名称.length
//打印所有同学
String[] names = new String[] {"fk","jkkd","kjsakd","ls","kksd"};
//遍历数组(把数组当中的每一个元素都给取出来)
for(int i=0;i<names.length;i++) {
System.out.println(names[i]);
}
数组练习题
String[] names = new String[] { "fk", "jkkd", "kjsakd", "ls", "kksd", "jksfj", "jdkfjksd" };
//打印 ["fk","jkkd","kjsakd","ls","kksd"] 出来
String res = "[";
// 1.遍历每一个元素,与res进行拼接
for (int i = 0; i < names.length; i++) {
res = res + names[i];
// 2.每遍历一个元素,res后面加一个","
if (i == names.length - 1) {
// 3.如果是最后一个元素,就不需要拼接","
// 4.所有元素遍历完毕,再王res之后拼接 "]"
res = res + "]";
} else {
res = res + ",";
}
}
System.out.println(res);
二维数组
在数组当中存放的每一个元素又是一个数组(数组中又存数组)
int[] classAge1=new int[] {18,19,20,17};//一维数组
int[] classAge2= {18,19,20};//可以简写成这样子
int[] classAge3= {18,19};
//整个年级的年龄
int[][] allClass= new int[][] {classAge1,classAge2,classAge3};//二维数组
int[][] allClass= new int[][] {
{18,19,20,17},
{18,19,20},
{18,19}
};
//把二维数组的值都打印出来
for(int i=0;i<allClass.length;i++) {
int[] array = allClass[i];//用一个定义数组来接收二维数组存放的值
for(int j=0;j<array.length;j++) {
System.out.println(array[j]);
}
}
变量的作用域
static void num() {
int b = 10;
}
public static void main(String[] args) {
/**
* 1.变量的作用域:生效(能使用)的范围
*
* 生效范围是:在创建变量的大括号当中生效.超过了大括号就不生效(不能再使用了)
* 2.在方法内部定义的变量,跟外界没有任何关系
*/
num();
{// 代码块
int b = 20;
System.out.println(b);
} // b过完大括号就没有了
int b = 30;//所以下面定义b是可以的,如果把b放在代码块上面就会报错,因为在上面定义了b,下面就不能在定义了
}
Foreach遍历数组
int[] ages = { 10, 20, 30 };
//遍历数组:foreach for (数据类型 遍历出来的元素 : 数组的名称)
//弊端:不能知道当前的脚标是多少
for (int i : ages) {//是一个语法糖,写的时候简单,编译的时候还是一样的
System.out.println(i);//10,20,30
}
用翻编译工具看Foreach语法糖内部的执行过程
public static void main(String args[])
{
int ages[] = {
10, 20, 30
};
int ai[];//定义一个新数组
int k = (ai = ages).length;//给k赋值ages数组的长度 //ai等于ages这个数组
for (int j = 0; j < k; j++) //int j = 0; j < ages.length; j++
{
int i = ai[j];//i=ages[j]
System.out.println(i);
}
}
方法的可变参数
// 方法的重载
/*
* static int sum(int a, int b) { int res = a + b; return res; } static int
* sum(int a, int b,int c) { int res = a + b +c; return res; }
*/
/*static int sum(int[] args) {//把数组当做参数进行传递
int res = 0;
for (int i = 0; i < args.length; i++) {
res += args[i];
}
System.out.println(res);
}*/
//可变参数(它是数组参数的一种简写,会自动把...转成数组)
static void sum(int...args) {//语法糖
int res = 0;
for (int i = 0; i < args.length; i++) {
res += args[i];
}
System.out.println(res);
}
public static void main(String[] args) {
// sum(1, 2);
int[] params={1,2,3};
sum(params);
sum(1,2,3,4);
}