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<10if(n<10){System.out.println(n);}else { //如果n大于10prin(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 循环的另外一种使用方式 . 能够更方便的完成对数组的遍历 . 可以避免循环条件和更新语句写错 . 但是我们 拿不到数组下标