静态方法:有static修饰的方法。
非静态方法:没有static修饰的方法。
- 方法调用:
一静态方法调用 静态方法/属性
1)一个类:直接调用。
2)不同类/不同文件:
a: 类名.属性名/方法名
b:实例化对象。 类名 对象名 = new类名();
对象名. 属性/方法
二静态调用 非静态方法/属性
都先实例化对象。 类名 对象名 = new类名();
对象名. 属性名/方法名
一非静态调用静态方法
二非静态调用非静态方法
1)同一类中:直接调用
2)不同类中:
a: 类名 . 方法(只能是静态属性)
b:实例化对象
总结:可直接调用的三种情况
1.一个类中 静态调静态 。
2. 一个类中 非静态调用 静态/非静态。
3. 静态 类名.静态属性/静态方法。
public class Demo03{ int age; public static void main(String []args){ System.out.println(Demo04.name);//静态调用静态1 Demo04.eat(); Demo04 d = new Demo04();//静态调用静态2 System.out.println(d.name); d.eat(); Demo03 d1 = new Demo03();//静态调用非静态 d1.method(); System.out.println(d1.age); } public void method(){ System.out.println("first method"); } }
1 public class Demo04{ 2 static String name = "张三"; 3 4 public static void eat(){ 5 System.out.println("肉夹馍"); 6 } 7 }
1 public class Demo05{ 2 static int age; 3 String name; 4 public static void main(String []args){ 5 6 Demo05 d1 = new Demo05();//静态调非静态 实例化 7 d1.method(); 8 } 9 10 public void method(){ 11 System.out.println(age); //非静态调静态 12 method1(); //非静态调静态 13 System.out.println(name);//非静态调非静态 14 method2(); //非静态调非静态 15 System.out.println("first method"); 16 } 17 public static void method1(){ 18 System.out.println("second method"); 19 } 20 public void method2(){ 21 System.out.println("third method"); 22 } 23 }
1 public class Demo06{ 2 3 public static void main(String []args){ 4 5 Demo06 d1 = new Demo06(); //静态调非静态 实例化 6 d1.method(); 7 } 8 public void method(){ 9 System.out.println(Person.name); //非静态调静态 10 Person.method1(); //非静态调静态 11 Person p = new Person(); //非静态调非静态 实例化 12 p.method2(); 13 System.out.println("first method"); 14 } 15 } 16 class Person{ 17 static String name; 18 int age; 19 public static void method1(){ 20 System.out.println("second method"); 21 } 22 public void method2(){ 23 System.out.println("third method"); 24 } 25 }
1 public class Demo09{ 2 //实参到形参是单向的,所以在传递过程中形参值发生改变不会影响实参 3 public static void main(String []args){ 4 int i =1; 5 String s = "ww"; 6 Demo09 d = new Demo09(); 7 d.method(i,s); 8 System.out.println(i); 9 System.out.println(s); 10 } 11 public void method(int i,String s){ 12 i = 100; 13 s = "asd"; 14 } 15 public void method1 16 }
public class ChuanDiZhi{ int x = 3; public static void main(String args[]){ ChuanDiZhi p = new ChuanDiZhi(); p.x = 9; show(p); System.out.println(p.x); } public static void show(ChuanDiZhi p){ p.x = 4; } }
有无返回值
有void修饰,无返回值
int------------------>return int 类型的值
string-------------->return String类型的值
数据类型-------->return 当前数据类型值
返回类、集合、流等
方法的返回值类型必须和return之后的值数据类型一样
方法传递参数
形参:形式参数,在定义方法时所携带的参数。
实参:实际参数,方法调用时所传入的参数。
形参和实参的区别:
1形参只有在被调用的时候,才分配内存单元,在调用结束时立即释放内存单元
形参只在当前方法内部有效
2实参可以是常量、变量、表达式、方法 等。但是在进行方法调用前,必须要有确定的值。
3形参和实参在顺序、类型、长度、必须一致。
4实参到形参是单向的,
参数的传值方式
1值传递:在运行函数时,形参和实参在不同的内存位置之中,形参将实参的值复制一份。在函数运行结束时,形参被释放,实参的值不会发生改变。
2地址传递:在运行函数时,传给形参的是实参的地址,那么形参被修改时,实参也会发生改变。