对象和对象的引用 与 使用final修饰一个变量时是指引用不能变还是指引用的对象不能变...

这里的笔记可能有点长,需要耐心看下去,应该会对你理解引用(对象的引用)、对象,以及final会有一定的帮助,如果有写错的地方希望各位能够指正出来,大家共同进步。

   1、在java中new是用来在堆上面来创建对象的,

   2、对象和对象的引用:对象和对象的引用(简称:引用)是两个完全不一样的概念,

      @0  Person person = new Person(“”);

@1   Person person1=new Person(“张三”);

@2   Person person2 ;       

    person 2=new Person(“张三”);

@3   Person person3=person2;

@4    Person person1=new Person(“李四”);

@5    int a;

       a=1;

       a=2;

注意:在java中new是用来在堆上面创建对象的,如果成功则返回这个对象的引用,开发者不可直接操作对象实例,需要通过这个引用“牵引”。

@0中 ,创建一个对象,可以说成四个动作(从左讲起),

1  Person person 是Person类在栈内存中创建名为person的“对象的引用(引用)”,

2  new  Person在堆内存中创建一个Person类对象

3  new person()中的()是在生成Person类对象时立即调用构造函数,对刚生成的对象进行初始化

4  ‘=’是使对象的引用person指向刚生成的Person对象

在@1中,person就是类Person 中的一个对象的引用;我们平时所说的对象是@1中new Person(“张三”) ;

一个对象的引用可以指向多个对象,例:@1@4或者@5;一个对象也可以被多个对象的引用所指@2@3,person2指向名为张三这个对象,person3也指向名为张三这个对象

 

  1. 使用final修饰一个变量时,是指引用不能变还是指引用的对象不能变?

   使用final修饰一个变量时是指引用不能变,引用所指的对象中的内容还是可以变的,例如:

   @1 final StringBuffer str= new StringBuffer(“123”);

      Str.append(“456”);  //执行该语句时可以编译通过

      Str=new String Buffer(“789”);  //执行该语句编译期报告错误

有人在定义方法时,可能会想采用这种方法阻止方法内部修改传进来的参数,例:

Public  void method(final StringBuffer str){

   //  实际上这是办不到的,方法的内部仍然可以采用str.append(“”)这种方式来修改传进来的参数

}

   另外,final修饰类时,说明该类不想被其他类继承,并且,Abc类中的所有方法也会被隐式指定为final方法,例:

Public  final  Class  Abc{

}

Class  Sdf extends Abc{

    // 会报错

}

当final修饰方法时,代表该方法无法被重写,

public class Father{

    public final  void  test(){

       System.out.println(“123”);

}

}

public class  son  extends Father{

    public  void  test(){

//会报错,不能重写父类的final的方法

}

}

注意:如果父类的test方法用private去修饰的话,子类的test就不会报错,就相当于你在子类中重写定义了一个test方法,类中的private方法会被隐式指定为final方法

 

 

转载于:https://my.oschina.net/javaWithMe/blog/2876843

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值