文章目录
- 标题
- 数组
- 初始化
- Java内存分配
- 静态初始化
- 遍历
- 方法
- 方法的定义和调用![在这里插入图片描述](https://s2.51cto.com/images/blog/202411/27001622_6745f456b0fe938035.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
- 带返回值方法的定义和调用
- 方法的参数传递
- 数组遍历
- 易错点
标题
project module package class
新建module:
数组
数组array是一种容器,是存储同种数据类型的多个值
初始化
int[] arr=new int[3]
打印数组变量时,会打印出数组在内存中的地址
特征
- 索引从0开始
- 索引是连续的
- 索引逐一增加
数组在创建完毕后,即使没有赋值,也可以取出,但取出的元素都是默认初始值 0
arr[1]=1//给数组元素赋值
Java内存分配
栈内存
堆内存
方法区
本地方法栈
寄存器
静态初始化
int[] arr= new int[]{11,22,33};
int[] arr2={44,55,66}
问题2 空指针异常
遍历
arr.length 数组名.length
获取最值
public class Method {
public static void main(String[] args) {
int[] bArr=new int[]{2,3,4,5,6};
int max=bArr[0];
for(int i=0;i<bArr.length;i++){//必须是小于,不能等于
if (bArr[i]>max){
max=bArr[i];
}
}
System.out.println(max);
}
}
数组元素求和
import java.util.Scanner;
public class Method {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int[] arr=new int[6];
for (int i = 0; i < 6; i++) {
System.out.println("请输入第"+(i+1)+"个评委的打分");
int score=sc.nextInt();
if(score>0 && score<100){
//合法的分值
arr[i]=score;
}else{
//非法分值
System.out.println("请重新输入分值");
i--;//非常重要的一步
}
}
int min=arr[0];
for(int q=0;q<arr.length;q++){
if(min>arr[q]){
min=arr[q];
}
}
int max=arr[0];
for(int w=0;w<arr.length;w++){
if(max<arr[w]){
max=arr[w];
}
}
int sum=0;
for(int w=0;w<arr.length;w++){
sum+=arr[w];
}
int avg=0;
avg=(sum-max-min)/4;
System.out.println(avg);
}
}
方法
具有独立功能的代码块 method ,进而提高代码的复用性
方法必须先定义再调用
//方法定义格式
public static void 方法名(){
方法体
}
//方法调用格式
方法名();
public class Method {
public static void main(String[] args) {
eat();
study();
eat();
}
/*public static void 方法名() {
方法体
}
*/
public static void eat() {
System.out.println("eating");
}
public static void study() {
System.out.println("studying");
}
}
方法没被调用时,都在方法区中的字节码文件 .class中存储
方法被调用时,需要进入栈内存
方法的定义和调用
//方法定义格式
public static void 方法名(数据类型 变量名,数据类型 变量名){
方法体
}
//方法调用格式
方法名();
形参:形式上的参数,接触不到实际的参数
public class Method {
public static void main(String[] args) {
jiou(10);
}
public static void jiou(int num) {
if (num % 2 ==0){
System.out.println("oushu");
} else{
System.out.println("jishu");
}
}
}
public class Method {
public static void main(String[] args) {
print(10,20);
}
public static void print(int n, int m) {
System.out.println(n+"到"+"m之间的奇数");
for(int i = n; i <= m;i++){
if (i %2 ==1){
System.out.println(i);
}
}
}
带返回值方法的定义和调用
public class Method {
public static void main(String[] args) {
int num= add(10,20);
System.out.println(num);
}
public static int add(int n,int m) {
int c = n+m;
return c;
}
}
public class Method {
public static void main(String[] args) {
int b=getMax(10,20);
System.out.println(b);
//System.out.println(getMax(10,20)); 仅仅为输出调用,只能打印数据,无法进一步操作
}
public static int getMax(int n,int m){
if(n<=m){
return m;//直接return
}else{
return n;
}
}
}
public class Method {
public static void main(String[] args) {
int num= getMax(10,20);
System.out.println(num);
}
public static int getMax(int n,int m) {
if (n<=m){
return m;
}else {return n;
}
}
}
void方法体中一般不写return
- return后面的代码永远执行不到
//return,用于结束方法,也就是将方法从栈内存中弹出去,称之为方法的弹栈
方法重载:**同一个类中,**方法名相同,参数不同,导致方法重载(参数的个数不同,类型不同,顺序不同)
识别方法之间是否为重载,只看方法名和参数,不看返回值
为何能直接return a == b ?
方法的参数传递
- 基本类型
- 引用类型
数组是地址?
方法参数传递为引用数据类型,传入方法的是内存地址
数组遍历
遍历的结果在一行上展示,如[1,2,3,4]
public class Method {
public static void main(String[] args) {
int[] arr={10,20,30,40};
print(arr);
System.out.println("别的代码逻辑");
}
public static void print(int[] arr){
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
if(i==arr.length-1){
//如果满足条件, 即循环到最后一个元素了,在此处打印时要换行
System.out.println(arr[i]+"]");
}else{
System.out.print(arr[i]+", ");
}
}
}
}
代办
idea安装方式写word
11,12,13数组内存图请再学习下,18数组元素求和自己写吧
1-8方法 14、15, 方法参数传递基本数据类型 没懂,往后的练习
public class Method {
public static void main(String[] args) {
int number=100;
System.out.println(number);
change(number);
System.out.println(number);
}
public static void change(int n){
n=200;//此方法是void,无返回值,那该方法有什么用?换成打印语句后就能输出打印
}
}
引用数据类型,数组是地址?
带参数类型,是无法直接打印某个值的?
易错点
for(;;)
方法的调用过程