第三章_Java基础语法
(一)、方法//掌握
1、定义:就是完成特定功能的代码块(在很多语言里面都有函数的定义,函数在Java里被称为方法)
2、格式:
(1)
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) {
方法体语句;
return 返回值;
}
//举例:求和
public static int sum(int a,int b) {
return a + b;
}
(2)详细解释:
修饰符:目前就用“public”、“static”。后面再详细讲解其他修饰符
返回值类型:就是功能结果的数据类型
方法名:就是起了一个名字,方便我们调用该方法
参数类型:就是参数的数据类型
参数名:就是变量
参数分类:
实参:实际参与运算的数据
形参:方法上定义的,用于接受实际参数的变量
方法体语句(函数体):就是完成功能的代码块
return:结束方法的
返回值:就是功能的结果,由return带回给调用者
3、两个明确:
(1)返回值:类型结果的数据类型
(2)参数列表:要传递几个参数,以及结果的数据类型
实参、形参
4、方法的调用
(1)有明确返回值的调用:
①单独调用(一般来说没有意义,所以不推荐)
sum(x,y);
②输出调用(不够好,因为我们可能需要针对结果进行进一步的操作)
System.out.println(sum(x,y));
③赋值调用(推荐方案)
int result = sum(x,y);
//result在这里可以进行操作
System.out.println(result);
(2)void(空的)类型返回值的方法调用:
①单独调用
pringXing(3,4);
System.out.println("--------------");
pringXing(6,7);
System.out.println("--------------");
pringXing(8,9);
public static void pringXing(int m,int n) {
for(int x=0; x<m; x++) {
for(int y=0; y<n; y++) {
System.out.print("*");
}
System.out.println();
}
}
②输出调用
//输出调用
//此处不允许使用 '空' 类型
//System.out.println(pringXing(3,4));
③赋值调用
//赋值调用
//非法的表达式开始
//void v = pringXing(3,4);
6、注意事项:
(1)方法不调用,不执行。main方法是被虚拟机调用的
(2)方法与方法是平级关系,不能嵌套定义
(3)方法定义的时候,参数之间用逗号隔开
(4)方法调用的时候,不用再传递数据类型
int x = 10;
int y = 20;
//错误
//sum(int x,int y);
public static int sum(int a,int b){
return a + b;
}
(5)如果方法有明确的返回值类型,就必须有return语句返回
7、方法重载(在同一个类中,方法名相同,参数列表不同(参数的个数不同,参数的对应的数据类型不同)。与返回值类型无关):
class FunctionDemo4 {
public static void main(String[] args) {
System.out.println(sum(10,20));
System.out.println(sum(10,20,30));
System.out.println(sum(10,20,30,40));
public static int sum(int a,int b) {
return a + b;
}
public static int sum(int a,int b,int c) {
return a + b + c;
}
public static int sum(int a,int b,int c,int d) {
return a + b + c + d;
}
}
}
(二)、数组//掌握
1、定义:存储同一种数据类型、多个元素的容器。
2、特点: 每一个元素都有编号,从0开始,最大编号是长度-1。编号的专业叫法:索引。
3、格式:
(1)数据类型[] 数组名;定义一个int类型的数组a变量
//注意:效果可以认为是一样的,都是定义一个int数组,但是念法上有点小区别。推荐这个。
int[] a;
(2)数据类型 数组名[];定义一个int类型的a数组变量
int a[];
4、初始化:就是为数组开辟内存空间,并为每个数组元素赋予值
(1)动态初始化:只给长度,系统给出默认值
//举例
int[] arr = new int[3];
System.out.println(arr); //[I@175078b 地址值
(2)静态初始化:给出值,系统决定长度
//举例
int[] arr = new int[]{1,2,3};
//简化版
int[] arr = {1,2,3};
(3)注意:
①不要同时动态和静态进行
int[] arr = new int[3]{1,2,3};//错误
②ArrayIndexOutOfBoundsException:数组索引越界异常
int[] arr = {1,2,3};
System.out.println(arr[3]);
③NullPointerException:空指针异常(原因:数组已经不在指向堆内存了。而你还用数组名去访问元素)
int[] arr = {1,2,3};
arr = null;
System.out.println(arr[0]);
(4)案例:
①遍历:
int[] arr = {11,22,33,44,55};
for(int x=0; x<5; x++) {
System.out.println(arr[x]);
}
②获取最值:
int[] arr = {34,98,10,25,67};
int max = arr[0];
for(int x=1; x<arr.length; x++) {
if(arr[x] > max) {
max = arr[x];
}
}
System.out.println("max:"+max);
③逆序(就是把元素对调):
for(int x=0; x<arr.length/2; x++) {
int temp = arr[x];
arr[x] = arr[arr.length-1-x];
arr[arr.length-1-x] = temp;
}
④查表法:
String[] strArray = {"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
⑥基本查找:
//方法一
for(int x=0; x<arr.length; x++) {
if(arr[x] == value) {
return x;
}
}
//如果找不到数据,我们一般返回一个负数即可,而且是返回-1
return -1;
//方法二
//定义一个索引
int index = -1;//有就修改索引值
for(int x=0; x<arr.length; x++) {
if(arr[x] == value) {
index = x;
break;
}
}
//返回index
return index;
5、Java中的内存分配
(1)栈:存储局部变量
(2)堆:存储所有new出来的
(3)方法区(面向对象部分详细讲解)
(4)本地方法区(系统相关)//了解
(5)寄存器(CPU使用)//了解
(6)注意:
局部变量:在方法定义中或方法声明上定义的变量
栈:数据使用完毕,就消失。
堆:每一个new出来的东西都有地址
每一个变量都有默认值:
byte,short,int,long:0
float,double:0.0char:'\u0000'
boolean:false
引用类型(基本数据类类型存的是数值本身,而引用类型变量在内存放的是数据的引用,并不是数据的本身,引用类型变量是以间接方式去获取数据。引用类型变量都属于对象类型,如:数组、类、字符串等都属于引用类型变量。所以,引用类型变量里面存放的是数据的地址):null
数据使用完毕后,在垃圾回收器空闲的时候回收。