java中的方法
1、方法
-
1.1 什么是方法?
(method 在c语言中又被称为函数)就是可以重复利用完成某个特定功能的代码片段。 -
1.2 定义
- [] 中括号,里面的内容不是必须的,是可选的。
- 语法机制:[修饰符列表] 返回值类型 方法名(形参列表){
方法体;
} - 修饰符列表先统一写成:public static
- 返回值类型 :
- 1.基本数据类型
- 2.引用数据类型
- 什么叫返回值:
- 方法结束后的结果,一般会是一个数据。
方法就是为了完成某个特定的结果。
- 方法结束后的结果,一般会是一个数据。
-
1.3 当一个方法结束 不返回任何类型时,也不能为空,用void。
-
1.4 方法必须调用才能执行。
-
类名.方法名(实参列表);
-
//计算两个int类型的 商。 public static int Shang(int a,int b){ int jieguo = a/b; return jieguo;//或者直接 return a/b; } public static void divided(int x,int y){ System.out.println(x/y); } //当一个方法有返回值时,也可以不接收,但是没有意义。返回后内存马上释放, 因为没有接收。 public class PrintTest{ public static void main(String[] args){ print(); } public static void print(){ System.out.println("输出一个语句"); } }
-
//注意:调用程序 不一定得在main 方法中,其他方法也可以调用。 public class Test{ public static void main(String[] args){ m(); } public static void m(){ n(); } public static void n(){ m(); } public static void l(){ m(); n(); l(); return; } } 方法体中 代码执行顺序 依次执行,自上而下。main方法其实也只是一种普通的方法。 只不过main 方法是jvm中的,作为程序的入口。
-
-
2、break 和 return 的区别。
-
public class ForTest{ public static void main(String[] args){ for(int i = 1;i <= 10;i++){ if(i == 3){ break;//终止for循环 return ;// 终止的是方法,执行了的话程序结束,不会输出“cao”。 } System.out.println(i); } System.out.println("cao"); } } break 语句 只能使用在 switch 分支 还有循环中。
-
-
3、编译与运行
-
编译器只负责编译,编译器只知道 flag 是boolean 类型,不能确定flag是真是假,故而认为缺少返回语句。编译器不负责运行。
-
public static int m(){ boolean flag = true; if(flag){ return 1; } }
-
return 语句一旦执行 方法结束。所以在同一个作用域下 return 语句下方 不可以写代码。
-
-
**4、jvm 三块主要内存区:堆 栈 方法区 **
-
1.方法区:类加载器(classloader)将硬盘中的xxx.class字节码文件装载到jvm当中的时候,会将字节码文件存放到方法区中。也就是方法区存放的是 代码片段。因为类需要加载,所以方法区最先有数据。
-
2.方法:在调用时会在 栈(stack)内存中分配空间。
-
数据结构 通常 是指存储数据的容器。一种非常经典的数据结构(stack)。
-
压栈(push)
-
出栈(pop)
栈顶元素(栈帧 永远指向栈顶元素):处于栈顶部元素 具有活跃权。
先进后出
-
-
局部变量只在方法体中 有效。方法结束后 局部变量的内存就释放了。也就是弹栈。
-
注意:方法不调用是不会在栈内存中开辟空间的,调用就是压栈。
-
栈存储了方法运行所需要的空间,还会存储方法的局部变量。
-
-
5、方法重载
-
-
1.整齐 美观
-
2.功能相似,可以让方法名字相同
-
-
java 语言怎么进行方法区分?
- 答:先从方法名区分,再从参数类型进行区分。
-
3、什么时候使用重载?也就是功能相似,方法名相同,参数类型不同(注意要在同一个类中)
-
- 答:同一个类中,如果功能1和功能2 相似,可以考虑 方法名一致。
- 三个条件:1.同一个类
2.功能相似
3.参数列表不同
-
- 注意:方法的返回值类型和重载无关。与修饰符列表也没有关系,只与参数列表相关。
- 而且println 肯定重载了,参数类型随便传。
-
-
6、方法递归
-
-
递归没有结束条件的时候,会发生栈内存溢出。(stackoverflowerror)
-
假设结束条件是对的,因为可能递归太深了,依然会炸栈。
能用循环 尽量用循环,因为循环效率高,耗费内存小。可能会导致jvm退出。但极少情况下,有些程序不用递归无法实现。 -
//使用递归 方法 编写 1-n 的和。 public static int sum(int n){ if(n == 1){ return 1; } return n + sum(n-1); } //使用递归的方法计算n 的阶乘。 public static int result(int n){ if(n==1){ return 1; } return n * result(n-1); }
-
7、面向对象和面向过程的区别。
-
c 语言:完全面向过程(因果关系)。没有对象的概念,只有步骤。耦合度 :太高,
扩展性 :太低。(关注的是步骤) -
- java: 完全面向对象。
-
-
面向对象 就是将世界分成不同的单元,然后每一个单元都实现成对象,然后给个环境
驱动一下,让对象之间协作起来形成一个系统。 -
OOA:分析
OOD:设计
OOP:编程 OO:面向对象
-
扩展性 :太低。(关注的是步骤)
-
- java: 完全面向对象。
-
-
面向对象 就是将世界分成不同的单元,然后每一个单元都实现成对象,然后给个环境
驱动一下,让对象之间协作起来形成一个系统。 -
OOA:分析
OOD:设计
OOP:编程 OO:面向对象
-