⭐⭐⭐Java基础篇目录⭐⭐⭐
第一章 Java开发环境搭建
第二章 标识符与关键字
第三章 变量
第四章 数据类型
第五章 运算符
第六章 控制语句
第七章 方法
第八章 认识面向对象
第九章 对象的创建和使用
第十章 封装
第十一章 this和static
第十二章 继承
第十三章 方法的覆盖和多态
第十四章 super
Java中的方法即C中的函数,定义一个方法,下次使用该功能时直接调用该方法,提高了代码的复用性。
public class Function {
public static void main(String[] args) {
sum(100,200);
sum(200,300);
}
public static void sum(int x,int y){
int s=x+y;
System.out.println(x+"+"+y+"="+s);
}
}
小总结
-----------------
- 程序开始执行的时候先执行main方法,main方法是程序的入口
- main方法是JVM去调用的,不用我们去手动调
- 方法定义在类体中,方法定义的先后顺序无所谓
Java方法定义的格式:
[修饰符列表] 返回值类型 方法名(形式参数列表){
方法体;
}
小总结
- 返回值类型不是void,则方法体执行结束时必有return x;语句,且遇到return x;语句,当前方法的执行也必然结束。
- 返回值类型是void,则方法体语句中没有return x;但可以有return;来终结方法的执行。
- 形参列表中的变量都是局部变量,方法执行结束之后,其对应的内存释放。
- 方法体中就是实现逻辑业务和需求的代码。
调用(此处暂不涉及对象的概念)
类名.方法名(实参列表);
调用的方法若有返回值,则要用变量去接收,变量的类型看方法返回值的类型,也可不接收,也可直接println(sum(100,200));调用的方法若是void类型,这时接收就出错。
public class Function {
public static void main(String[] args) {
System.out.println("main begin");
m1();
System.out.println("main over");
}
public static void m1() {
System.out.println("m1 begin");
m2();
System.out.println("m1 over");
}
public static void m2(){
System.out.println("m2 begin");
m3();
System.out.println("m2 over");
}
public static void m3(){
System.out.println("m3 begin");
System.out.println("----->");
System.out.println("m3 over");
}
}
Tips:
main方法最先执行,也是最后一个结束。main方法的结束,也代表着整个程序就结束了。
break是终止循环,return是终结当前方法。所以在return语句后面再写语句是无意义的,编译也会报错:“无法访问的语句”。
小总结
- JVM内存主要有三大块:栈区、堆区、方法区(还有其他边角料空间)
- 方法在被调用的时候需要的内存空间在栈区分配
- 类加载的时候,字节码文件存方法区,方法区最先有数据
栈区存的是方法被调用时或执行时所需要的内存、方法的局部变量
方法调用----->压栈------>分配空间
方法结束----->弹栈------>释放空间
将方法的返回值直接扔给print
System.out.println(sum(100,200));
//等价于
int result = sum(100,200);
System.out.println(result);
分析思考解决一个问题的方法和逻辑,从而拆解问题,根据拆解的问题去提取方法、定义方法,最后填充代码。
eg:
求大于一个数的最小质数。得先实现一个数是不是质数的判定,再把输入的数每次加一,加一后调用之前的方法,判定是质数则输出,不是则继续加。
import java.util.Scanner;
public class Number {
public static void main(String[] args) {
minPrimeNumber();
}
/**
* 判断一个数是不是质数
* @param num
* @return
*/
public static int primeNumber(int num){
for(int i=2;i<num;i++){
if (num%i==0){
return 1;//不是质数
}
}
return 0;//是质数
}
/**
* 求大于一个数的最小质数
*/
public static void minPrimeNumber(){
Scanner s = new Scanner(System.in);
System.out.println("请输入你的数:");
int number = s.nextInt();
while (true){
number++;
if (primeNumber(number)==0){
System.out.println("大于它的最小质数是:"+number);
break;
}
}
}
}
发生重载的条件(同时满足):
- 在同一个类中
- 方法名相同
- 参数列表不同(如参数个数不同、参数类型不同、除法运算中的参数顺序不同)
注意:方法重载的重点是看方法名和形参列表,和是否有返回值、返回值类型、修饰符是否相同无关!!!
println就是一个经典的重载,输出不同的数据类型,均是println,若没有重载,则每种数据类型对应的方法名不同,使用不方便。
StackOverflow Error的排查思路:
- 查看递归结束的条件是否正确
- 若结束条件没问题,则手动调大JVM的栈内存的初始大小
//递归求和
public static int sum(int num){
if(num==1||num==0){
return num;
}
return num+sum(num-1);
}