基础知识点-对象与类,this和final关键字

对象与对象变量

 一个对象变量实际上并没有包含一个对象,而是引用了一个对象。在Java中,任何对象变量的值都是对存储在另外一个地方的一个对象的引用,new操作的返回值也是对一个对象的引用。

Date d=new Date();

表达式new Date()构造了一个Date类型的对象,并且它的值是对新创建对象的引用。这个引用存储在变量d中。

方法参数

参数传递给方法有两种方式:按值调用和按引用调用。

一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。在Java程序中,总是采用按值调用。方法得到的是所有参数值的一个拷贝,也就是说,方法并不能修改传递给它的任何参数变量的内容。

方法参数有两种类型:基本数据类型(数字和布尔值),对象引用。

1.已知,一个方法并不可修改一个基本数据类型的参数。假定一个方法试图将一个参数值增加:

public static void add(double x){
    x=x+3;
}

调用这个方法:

double a=10;
add(a);

在调用完add方法后,a的值仍旧为10。因为x被初始化为a值的一个拷贝(也就是10),x加3后为13,但a值不变。

2.但是当对象引用作为参数时,情况就不同了。下面的方法是将一个员工的工资提高。

public staic void add(Employee x)
{
    x.raiseSalary(200);
}

调用这个方法:

harry=new Employee();
add(harry);

在调用add方法后,员工的工资得到了提高。因为x被初始化为harry值得拷贝,这是一个对象的引用。raiseSalary方法应用于对象的引用。x和harry同时引用的Employee对象的工资提高了。方法结束后,x便不再被使用,但是harry继续引用那个工资被提高的Employee对象。

方法得到的是对象引用的拷贝,对象引用及其他拷贝同时引用同一个对象。

3.Java程序设计语言对对象采用的不是引用调用,实际上,对象引用是按值传递的。

交换两个Employee对象,原来的a和b仍旧引用原来的对象。

Java方法参数的使用情况:

  • 一个方法不能修改一个基本数据类型的参数(数值型和布尔型)。
  • 一个方法可以改变一个对象参数的状态。
  • 一个方法不能让对象参数引用一个新的对象。

this关键字

当创建一个对象后,Java虚拟机会给该对象分配一个引用自身的指针,这个指针的名字就是this。 

this和类没有关联,而是与特定的对象关联。同一个类的不同对象有不同的this。

Java在Static中不能使用this:

  Static方法是类方法,先于任何的实例(对象)存在。即Static方法在类加载时就已经存在了,但是对象是在创建时才在内存中生成。而this指代的是当前的对象

在方法中定义使用的this关键字,它的值是当前对象的引用.也就是说你只能用它来调用属于当前对象的方法或者使用this处理方法中成员变量和局部变量重名的情况.

而且,更为重要的是this和super都无法出现在static 修饰的方法中,static 修饰的方法是属于类的,该方法的调用者可能是一个类,而不是对象.如果使用的是类来调用而不是对象,

则 this就无法指向合适的对象.所以static 修饰的方法中不能使用this.

this的作用:

  1. 使用this来区分当前对象。

Java中为解决变量的命名冲突和不确定性问题,引入关键字this代表其所在方法的当前对象的引用:

  • 构造方法中指向该构造器创建的新对象。
  • 方法中指向调用该方法的对象。
  • 在类本身的方法或构造器中引用类的全局变量和方法。

 this只能用在构造器或者方法中,用于获得调用当前的构造器方法的对象引用。可以和任何的对象引用一样来处理这个this对象。

   2.在构造器中调用对象本身其他构造器。

   3.返回类的引用。

  • this可做参数传递
  • 在内部类或匿名类中使用this,指的是内部类或匿名类本身。如果要使用外部类,直接加类名。
  • 让类的一个方法访问类的另一个方法或属性。

final关键字

  •  修饰一个类,表示该类不能被继承。
  • 修饰方法,表示该方法不能被重写。
  • 修饰变量。

当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。本质上是一回事,因为引用的值是一个地址,final要求值,即地址的值不发生变化。

final修饰一个成员变量(属性),必须要显示初始化。这里有两种初始化方式,一种是在变量声明的时候初始化;第二种方法是在声明变量的时候不赋初值,但是要在这个变量所在的类的所有的构造函数中对这个变量赋初值

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值