break continue
break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句(break语句也在switch语句中使用)
continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。
package struct;public class BreakDemo {public static void main(String[] args) {int i=0;while(i<100){i++;System.out.println(i);if(i==30){break;}}System.out.println("123");}
}
package struct;public class ContinueDemo {public static void main(String[] args) {int i=0;while(i<100){i++;if (i%10==0){System.out.println();continue;}System.out.println(i);}}
}
质数是指在大于1的自然数中,处了1和它本身以外不在有其他因数的自然数
java的方法
java方法是语句的集合,它们在一起执行一个功能
方法是解决一类问题的步骤的有序组合
方法包含于类或对象中
方法在程序中被创建
一个方法只完成一个功能
System.out.println()的意思是调用系统类中的标准输出对象out中的方法println
package method;public class Demo01 {//main方法public static void main(String[] args) {//实际参数:实际调用传递给它的参数int sum=add(1,2);//方法在程序中被创建,在其他地方被引用System.out.println(sum);}//加法//形式参数,用来定义作用的public static int add(int a,int b){return a+b;}pubic static void test(){...}
}
java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段
方法包括一个方法头和一个方法体,下面是一个方法的所有部分:
修饰符:修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
返回值类型:方法可能会返回值。returnValueType是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType是关键字void。
方法名:是方法的实际名称。方法名和参数表共同高层方法签名
参数类型:参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为参数或者变量。参数方法是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数:
1.形式参数:在方法被调用时用于接收外界输入的数据
2.实参:调用方法时实际传给方法的数据
方法体:方法体包含具体的语句,定义该方法的功能。
修饰符 返回值类型 方法名(参数类型 参数名){...方法体...return 返回值;}
调用方法:对象名.方法名(实参列表)
java支持两种调用方法的方式,根据方法是否返回值来选择
当帆帆发返回一个值的时候,方法调用通常被当做一个值,例如:
int larger=max(30,40);
如果方法返回值是void,方法调用一定是一条语句,
System.out.println("Hello,qinqin!");
package method;public class Demo02 {public static void main(String[] args) {int max=max(10,20);System.out.println(max);}//比大小public static int max(int num1,int num2){int result=0;if(num1==num2){System.out.println("num1==num2");return 0;//终止方法}if(num1>num2){result=num1;}else {result=num2;}return result;}
}
值传递:把变量的值复制一份,传给方法参数
这个复制品和原件没有任何关系,你在方法里怎么改,也不会影响到原来的变量
引用传递:把变量的引用(也就是地址)传给方法参数
也就是说,方法参数和外面的变量其实是指向同一个内存的,改了一个就改了两个
这个行为像是共用同一个对象,一起哭一起笑
java只有值传递,不管是基本类型还是引用类型
如果是基本类型(int\double等),那值就是具体的数字,比如:5,7.1;
如果是引用类型(对象),那值其实是这个对象的地址
所以你传进方法里的,都是变量当前持有的值的复制品,只是引用类型这个值看起来像是引用,其实本质上也是地址的拷贝
面试推荐回答:java中其实只有值传递,区别在于基本类型传的是字面型,引用地址传的是对象的引用地址。像我们平时传个int,方法里怎么改都不会影响外面的变量;而传个对象,方法里能改对象的属性,是因为我们拿到了那份地址的拷贝,可以通过它改里面的内容。但如果在方法里new一个新对象再赋值给参数,这种改的是那份地址拷贝的本身,外面的引用就不会变了。所以严格来说,java的参数传递是值传递,只不过引用类型的“值”看起来有点像是“引用传递”。
方法的重载
重载就是在一个类中,有相同的函数名称,但形参不同的函数。
方法的重载的规则:
1.方法名称必须相同
2.参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)
3.方法的返回类型可以相同也可以不同
4.仅仅返回 类型不同不足以称为方法的重载
实现理论:方法名称相同时1,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错
命令行传参和可变参数
有时候你希望运行一个程序的时候再传递给它消息。这要靠传递命令行参数给main()函数实现
package method;public class Demo03 {public static void main(String[] args) {//args.Length数组长度for(int i=0;i< args.length;i++){System.out.println("args["+i+"]="+args[i]);}}
}
在方法申明中,在指定参数类型后加一个省略号(...)
一个方法只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明
递归(面试高频问点)
递归就是A方法调用A方法!就是自己调用自己
递归结构包括两个部分:
递归头:什么时候不调用自身方法。如果没有头将陷入死循环
递归体:什么时候需要调用自身方法
public class Demo05 {public static void main(String[] args) {Demo05 test=new Demo05();test.test();}public void test(){test();}
}
public class Demo06 {//2! 2*1//3! 3*2*1//5! 5*4*3*2*1public static void main(String[] args) {System.out.println(f(3));}//2 2*f(1)public static int f(int n){if(n==1){return 1;}else {return n*f(n-1);}}
}
边界条件:边界
前阶段:
返回阶段:n*(n-1)
递归思想:由于java栈机制大的计算能不用递归就不用递归
作业:写一个计算器,要求实现加减乘除功能,并且能够循环接收新的数据,通过用户交互实现
思路推荐:
1.写四个方法加减乘除
2.利用循环+switch进行用户交互
3.传递需要操作的两个数
4.输出结果
数组
数组的定义
数组是相同类型数据的有序集合
数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成
其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们,数组的下标是从0开始的