方法引用java
1. java中方法之间是如何调用的
1.与其他语言不同,Java语言不允许编程人员选择采用值传递还是引用传递来传递参数。基本数据类型总是采用值传递。不能把对象传递给方法,而只能传递对象的引用。引用本身也是采用值传递将引用的拷贝传递给方法。当方法收到对象的应用后,他就可以直接操作这个对象。
2.当通过return语句从方法返回信息时,基本数据类型的变量总是以值的形式返回(即返回拷贝),而对象总是以应用的方式返回。
方法调用过程:
1.为调用方法的内存中开辟空间。
2.将实参传递给形参。
3.程序流程跳转到方法里,并执行方法。
4.执行完方法,程序流程跳转到main方法,带回返回值如果有的话,为方法开辟的空间被销毁。
列如:
publicclassTest{
publicstaticvoidmain(Stringargs[]){
inta=10,b=20;
Stringstr1="abc";
Stringstr2="def";
swap(a,b);
swap(str1,str2);
System.out.println(a+"/t"+b);
System.out.println(str1+"/t"+str2);
}
publicstaticvoidswap(inta,intb){
inttemp=a;
a=b;
b=temp;
}
publicstaticvoidswap(Stringstr1,Stringstr2){
Stringtemp=str1;
str1=str2;
str2=temp;
}
}
结果:
1020
abcdef
注意结果中整型和字符串都没有交换。
2. Java如何调用内部类的方法
在其他类中创建内部类的对象时,必须要使用外部类的实例来创建。比如类B是类A的内部类,则语句A.B=new A.B()将是错误的。正确的方法是先创建一个类A的对象,比如A ma=new ma();然后再用这个对象来创建内部类的实例,比如A.B mab=ma.new B();这里要注意后面的语法ma.new B()。也可以把这两步合为一步,比如A.B mab=new A().new B();注意,这里使用了两个new运算符,如果只有一个将是错误的,比如A.B mab=new A().B();是错误的,new A().B()语句JAVA会理解为创建一个无名的引用,然后由这个引用调用类A中的B()函数。如果需要调用的构造函数不是默认的,则可以这样创建比如A.B mab=new A(2).new B();或者分为两步A ma=new A(2); A.B mab=ma.new B();
而且我也怕是不是会重新建个棋盘,那就不行了!
这个你可以放心,不会创建两个棋盘,下面举例验证
public class A2 extends JFrame {
public static void main(String[] args) {
A ma=new A(); //可以看到在这里并没有创建内部类,也就是说内部类中的bbb并没有输出
A.A1 ma1=ma.new A1(); //调用内部类的方法,当然内部类如果有带参数构造函数,则还应在内部类中加上参数。
ma1.f();
}}
class A{
A(){System.out.println("aaa");}
class A1{
A1(){System.out.println("bbb");}
public void f(){System.out.println("kkk");}}
}
3. 在Java中要引用对象的属性和方法,需要怎么实现
属性:第一种就是自己定义一个public的公共属性,然后调用就行了(不安全),第二种就是创建一个private的私有的属性,生成公共的set和get方法(封装),然后调用;
方法:同类中方法为静态方法可以直接调用,不为静态方法需要new和不同类中要new出对象,然后调用其方法;
左上角有我头像,有很多朋友在一起相互交流学习。
4. java中方法调用时的写法
如果是非静态的方法1调用非静态的方法2,那么
非静态方法2所在类的实例引用.非静态方法2
public class Test{
public void getMethod(){
Test t=new Test();
t.getTwoMethod();
}
public void getTwoMethod(){
}
}
如果静态调用静态:
public class Test{
public static void main(String[]args){
Hello();
}
public void Hello(){
System.out.println("HELLOWORLD")
}
}
如果是继承的话:
public class a{
public void jj(){}
}
public class b extends a {
public void hh(){
super.jj();
}
}