这里的笔记可能有点长,需要耐心看下去,应该会对你理解引用(对象的引用)、对象,以及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也指向名为张三这个对象
- 使用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方法