Java --对象引用与对象的区别

最近作项目时,遇到了一个错误:java

public class UserJobFilteredServiceImpl implements UserJobFilteredService {
    
    //方法1,业务方法,实现service层的方法
    public void getAttention(int userId) {
        //这个方法里面须要调用方法2,我采用以下方式调用,运行时报错
        UserJobFilteredServiceImpl  userJobFilteredServiceImpl = new UserJobFilteredServiceImpl();
        userJobFilteredServiceImpl. checkValid;
        
        //改成以下方式调用,结果正确
        UserJobFilteredServiceImpl  userJobFilteredServiceImpl;
        userJobFilteredServiceImpl. checkValid;
        
        //被项目经理看到了,狠狠的批评了一顿,改成以下
        this. checkValid;   
    };
    
    //方法2,检查方法,本类自带的方法
    public void checkValid() {};
}


http://www.douban.com/note/338064780/
函数


为了便于理解,先定义一个简单的类this

class User{
    int userId;
    String userName;
    String age;
}

有了如上类,咱们即可以建立对象,以下:code

User user1 = new User();

建立对象的过程当中包含了以下几个动做对象

1>右边的new User,是以User类为模板,在堆空间里建立一个User类的对象。字符串

2>末尾()表示,在对象建立后,当即调用User类的构造函数,对刚生成的对象进行初始化。(构造函数是确定有的,若是咱们没写,系统会自动生成一个构造函数)get

3>左边的User user1,是建立了一个User类的引用变量。io

4>=操做符使对象引用指向刚刚建好的User对象模板

其实,能够将如上步骤分为两步class

1>User user1;

2>user1=new User();

这样写就比较清楚了,有两个实体:一个是对象引用变量,一个是对象自己。

举个很生动的例子:对象比如一个气球,引用变量是一根绳,能够用来系气球。

若是只是执行了第一条语句,还没执行第二条,此时建立的引用变量user1还没指向任何一个对象,它的值是null,引用变量是一根尚未系上气球的绳;当执行了第二句后,一只新气球作出来了,并被系在user1这根绳上。

再来一句

User user2;

此时又作了一根绳子,还没系上气球,接着来一句

user2 = user1;

此时,发生了复制行为。注意:对象自己没有被复制,被复制的是对象引用。结果是user2也指向了user1所指向的对象,即两根绳子都系上同一个气球了。

若是在建立一个对象

user2 = new User();

此时,引用变量user2改指向了第二个对象。

由如上例子,咱们得出结论:

1>一个对象引用能够指向0个或1个对象(形象解释:一根绳子能够不系气球,也能够系一个气球)

2>一个对象能够有N个引用指向它(解释:能够有N条绳子系住同一个气球)

若是再来一句

user1 =user2;

便是 user1也指向了第二个对象。这个是没问题的,问题是第一个对象呢?没有一条绳子系住它,它可能会飞。正确说来,它已成为jav的垃圾回收机制处理对象了,至于何时被回收,这处决于java回收机制了。

由此看来,下面的语句应该是不合法的,至少应该没用

new User();

书上介绍说,它是合法的,并且是可用的,好比,咱们仅仅为了打印而生成一个对象,就不须要引用变量来系住它,最多见的就是打印字符串:

System.out.println("I am java");

字符串对象"I am java"在打印后就被丢掉。有人称之为这种对象为临时对象。

相关文章
相关标签/搜索