方法+数组
1. 方法
1. 什么是方法
方法定义:
// []表示可写可不写
[public] [static] type name ( [type formal , type formal , ...]){
方法体;
[return value ;]
}
[修饰符] 返回值类型 方法名称([参数类型 形参 , 参数类型 形参 ...]){
方法体代码;
[return 返回值 ;]
}
1. 修饰符:现阶段直接使用 public static 固定搭配2. 返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成 void3. 方法名字:采用小驼峰命名4. 参数列表:如果方法没有参数, () 中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开5. 方法体:方法内部要执行的语句6. 在 java 当中,方法必须写在类当中7. 在 java 当中,方法不能嵌套定义8. 在 java 当中,没有方法声明一说,方法定义放在函数调用前后都可以
调用方法
---
>
传递参数
---
>
找到方法地址
---
>
执行被调方法的方法体
---
>
被调方法结束返回
---
>
回到主调方法继续往下
执行
2. 方法重载
什么是方法重载:
1. 方法名必须相同2. 参数列表必须不同 ( 参数的个数不同、参数的类型不同、类型的次序必须不同 )3. 与返回值类型是否相同无关
3. 方法签名
经过编译器编译修改过之后方法最终的名字。具体方式:
方法全路径名
+
参数列表
+
返回值类型,构成
方法完整的名字。
public static int add(int x,int y){
return x+y;
}
public static double add(double x,double y){
return x+y;
}
public static void main(String[] args) {
System.out.println(add(1,2));
System.out.println(add(1.5,3.7));
}
上述代码经过编译之后,然后使用
JDK
自带的
javap
反汇编工具查看,具体操作:
1.
先对工程进行编译生成
.class
字节码文件
2.
在控制台中进入到要查看的
.class
所在的目录
3.
输入:
javap -v
字节码文件名字即可

javap
是 Java 提供的一个反编译工具,可以用来反编译生成字节码的 .class
文件,以查看该类的结构、方法、属性等信息。在使用 javap
命令时,可以加上不同的选项来输出不同的信息,其中包括 -c
和 -v
选项。
javap -c
:使用-c
选项会输出反编译的字节码指令。这个选项会列出每个方法的字节码指令,以及相应的操作数。这样可以更直观地查看编译后的 Java 代码实际运行时的指令流程,有利于分析代码运行时的具体逻辑。javap -v
:使用-v
选项会输出反编译的类文件的详细信息,包括常量池、字段表、方法表等。这个选项会将更多的信息以详细方式列出,有助于更深入地了解类的结构和属性。
综上所述,区别主要在于 -c
选项输出的是字节码指令,而 -v
选项输出的是类文件的结构信息。根据具体的需求可以选择使用不同的选项来进行查看和分析。
特殊字符 | 数据类型 |
---|---|
V | void |
Z | boolean |
B | byte |
C | char |
S | short |
I | int |
J | long |
F | float |
D | double |
[ |
数组
(
以
[
开头,配合其他的特殊字符,表述对应数据类型的数组,几个
[
表述几维数组
)
|
L |
引用类型,以
L
开头,以
;
结尾,中间是引用类型的全类名
|
//按顺序打印一个数字的每一位
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int n= scan.nextInt();
prin(n);//方法调用
}
//方法定义
public static void prin(int n){
//如果n<10
if(n<10){
System.out.println(n);
}else { //如果n大于10
prin(n/10);//递归调用prin函数
System.out.println(n%10);
}
}
2. 数组
1. 数组的创建
type[] name = new type[num] ;
// type 数组元素类型
// type[] 数组类型
// name 数组名
// num 数组元素个数
2. 数组的初始化
动态初始化:在创建数组时,直接指定数组中元素的个数
type[] name = new type[num] ; //num不可为空

静态初始化:在创建数组时不直接指定数据元素个数,而直接将具体的数据内容进行指定
type[] name = new type[]{ data1,data2,data3... ,datanum } ;
1. 静态初始化虽然没有指定数组的长度,编译器在编译时会根据 {} 中元素个数来确定数组的长度。2. 静态初始化时 , {} 中数据类型必须与 [] 前数据类型一致。3. 静态初始化可以简写,省去后面的 new T[] 。type[] name = { data1,data2,data3... ,datanum } ;

静态和动态初始化也可以分为两步去写,但动态初始化简写不可以
//动态初始化
type[] name ;
name = new type[num] ;
//静态初始化
type[] name ;
name = new type[]{ data1,data2,data3... ,datanum } ;
//name = { data1,data2,data3... ,datanum } ; //err 简写

注意:
虽然java中的数组也可以按照C语言的方法创建,但不推荐(type[] 可以表示数组类型)
如果没有对数组进行初始化,数组中元素有其默认值
1. 如果数组中存储元素类型为基类类型,默认值为基类类型对应的默认值:
类型 | 默认值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0 |
float | 0.0f |
double | 0.0 |
char | /u0000 |
boolean | false |
2. 如果数组中存储元素类型为引用类型,默认值为null
1.
数组是一段连续的内存空间,因此
支持随机访问,即通过下标访问快速访问数组中任意位置的元素
2.
下标从
0
开始,介于
[0, N
)之间不包含
N
,
N为元素个数,不能越界,否则会报出下标越界异常。( java.lang.ArrayIndexOutOfBoundsException )
3. 数组遍历
"遍历" 是指将数组中的所有元素都访问一遍, 访问是指对数组中的元素进行某种操作。
在数组中可以通过
数组对象
.length
来获取数组的长度

for-each
是
for
循环的另外一种使用方式
.
能够更方便的完成对数组的遍历
.
可以避免循环条件和更新语句写错
. 但是我们
拿不到数组下标
