方法
1. 静态方法与非静态方法
静态方法:与静态成员变量一样,属于类本身,在类装载的时候被装载到内存中,不自动进行销毁,会一直存在内存中,直到JVM关闭。
非静态方法:又称实例化方法,属于实例对象,实例化之后才会分配内存,必须通过类的实例来引用,当实例对象被JVM回收之后,也跟着消失。
区别:
- 静态方法是在类中使用static修饰的方法,在类定义的时候已经被装载和分配。
非静态方法是不加static关键字的方法,在类定义时没有占用内存,只有在类被实例化成对象时,对象调用该方法才被分配内存。 - 静态方法中只能调用静态成员或者静态方法,不能调用非静态方法或者非静态成员。
非静态方法既可以调用静态成员或者方法又可以调用其他的非静态成员或者方法。
2. 方法调用
调用方法: 对象名.方法名(实参列表)
Java内部的传递都是值传递,即将实参传递到定义的方法中的形参。
3. 方法重载
重载:在一个类中,有相同的函数名称,但形参不同的函数。
方法重载规则:
- 方法名称必须相同
- 参数列表必须不同(个数不同、或类型不同、参数排列顺序不同等)
- 方法的返回类型可以相同也可以不同
- 仅仅返回类型不同不足以成为方法的重载
4. 可变参数
**可变参数:**在指定参数类型后加一个省略号(…),即可以传递任意个数的实参。
注:一个方法只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。
public class Demo{
public static void main(String[] args){
Demo demo = new Demo();
demo.test(1,2,3,4,56,78);
demo.test(new int[]{1,2,3,4}); //传数组也行
}
public void test(int... i){
System.out.println(i[0]);
}
}
数组和可变参数相比:(网上资源转载)
5. 递归
递归结构两个部分:
- 递归头:什么时候不调用自身方法。如果没有递归头,将陷入死循环。
- 递归体:什么时候需要调用自身方法。
递归实例:阶乘
public class Demo {
public static void main(String[] args) {
System.out.println(f(4));
}
public static int f(int n){
if(n==1){ //递归头
return 1;
}else{
return n*f(n-1); //递归体
}
}
}
循环
1. switch语句
switch语句中的变量类型可以是byte、short、int、char或String。
2. for语句
for(;;){
//死循环
}
增强for循环:主要用于数据或集合
for(声明语句:表达式){
//代码语句
}
示例:
int[] num={10,20,30,40};
for(int x:num){ //增强for循环
System.out.println(x); //遍历输出数组
}
- 打印三角形
public class Demo {
public static void main(String[] args) {
for(int i=1;i<=5;i++){
for(int j=5;j>i;j--){
System.out.print(" ");
}
for(int j=1;j<=i;j++){
System.out.print("*");
}
for(int j=1;j<i;j++){
System.out.print("*");
}
System.out.println();
}
}
}