静态方法与非静态方法之间是无法调用的
package oop;public class Demo2 {public static void main(String[] args) {Student.say();//静态方法可以直接通过类名加方法去调用//Student.say2(); 非静态方法无法直接调用,需要实例化//实例化这个类(new)//对象类型 对象名 = 对象值Student student = new Student();student.say2();}//和类一起加载的,属于类的范畴public void a() {b();}//非静态变量实例化之后才存在,无法被静态变量调用public void b() {}public static void c() {// b(); 无法调用b()}
}
形式参数与实际参数
package oop;public class Demo3 {public static void main(String[] args) {//实际参数与形式参数的类型要对应int add = Demo3.add(2,4);//返回值为int,需要itn add这个变量来接收System.out.println(add);}public static int add(int a,int b){return a+b;}
}
java中的值传递与引用传递,本质上都是值传递,在java中两者的主要区别在于他们都是值传递,但是由于数据类型的不同会导致传递之后的结果是否会改变,例如当传递基本数据类型时(int char boolean),修改副本不会影响原变量,即调用方法是不会改变原来变量的值,当传递引用数据时(类对象 数组 集合),由于其传递的是对象地址的副本,通过副本地址对象内部内容,但是如果单纯修改副本地址则不会对原变量造成影响
总结:所用数据类型都遵循值传递,,只是不同的数据类型导致其值传递的表现不同,本段第一句的值传递与引用传递实际是以这种传递后表现的不同做的区分
package oop;
//值传递
public class Demo4 {public static void main(String[] args) {int a = 1;System.out.println(a);Demo4.change(a);//返回值为空,无需像Demo3那样调用方法时创建一个变量来接受System.out.println(a);//1}//返回值为空public static void change(int a){a = 10;}
}
package oop;
//引用传递:对象,本质还是值传递
public class Demo5 {public static void main(String[] args) {Person person = new Person();System.out.println(person.name);//nullDemo5.change(person);System.out.println(person.name);//鹤望兰}public static void change(Person person ){//person是一个对象,指向的是---->Person person = new Person();具体的人,可以改变属性person.name = "鹤望兰";}
}
//定义一个Person类,有一个name属性
class Person{String name;//默认值为null
}
以上时java中值传递不同数据类型在传递时的不同表现,且大部分的引用类型需要通过new来创建对象