Java对象存储/Static用法及原理/java参数传递机制

static :

static修饰的成员表示它属于类自己,不属于该类的单个实例(静态变量/静态方法)

对象存储

对于以下代码:java

 1class Fruit{
2    public int weight;
3    public Fruit(int w) {
4        weight=w;
5    }
6
7}
8public class HelloWorld {
9    public static void main(String[] args) {
10        Fruit fruit=new Fruit(10);
11    }
12}
复制代码
fruit对象在内存中存储在堆区,fruit其实是一个引用变量,只存储了一个地址。
存储以下:

若再添加语句web

Fruit fruit2;
    fruit2=fruit1;
复制代码

则存储图变为 编程

this指针

做用:让类中的一个方法,访问该类里的另外一个方法或成员变量。bash

  • 对于static修饰的方法,能够不使用this直接调用
  • 在static修饰的方法中,不可以使用this,由于this没法指向合适的对象
  • static修饰的方法中不能访问不适用static修饰的成员变量
  • 无static修饰的方法能够调用有static修饰的方法
  • java编程时不要使用对象调用static方法和属性(替换成类调用static方法和属性)
  • 在static方法中不可直接调用普通方法,只能经过建立对象,而后访问对象的普通方法

JAVA 方法

java参数传递

值传递(参数都存在栈区)

  • 相似于西游记中孙悟空,能够变身造成一个h假孙悟空,假孙悟空拥有和真孙悟空相同的能力。但无论假孙悟空遇到被砍头等变化,真孙悟空也不会变化。
  • 传入的是实际参数值的复制品,无论方法中对这个值进行怎样的操做,实际的参数值都不会发生改变。

引用传递(举例说明)

以下代码:app

 1class S{
2    public int a;
3    public int b;
4    public S(int aa,int bb{
5        a=aa;
6        b=bb;
7    }
8}
9public class HelloWorld {
10    public static void swap(S s{
11        int tmp=s.a;
12        s.a=s.b;
13    s.b=tmp;
14    }
15    public static void main(String[] args{
16        S s=new S(13);
17        System.out.println("交换前:a="+s.a+",b="+s.b);
18        swap(s);
19        System.out.println("交换后:a="+s.a+",b="+s.b);
20    }
21}
复制代码

执行结果:ui

1交换前:a=1,b=3
2交换后:a=3,b=1
复制代码
Main方法建立s对象后(16行执行完毕),存储示意图以下:

执行18行后,建立方法执行栈区swap栈,存储示意图以下:
this

相关文章
相关标签/搜索