Java关键字及相关知识整理

    最近在看jdk源码,发现自己一些基础的东西理解的不够深刻,在这总结一些,意在熟悉java的一些基础知识和方便以后复习查看。此博客会不断更新,在此打上一个记号~。

一、this关键字:其代表的就是对当前对象的引用。

简单来说,就是一个类创建一个对象时会赋值给一个变量,这个变量就是这个对象的引用,而在方法内部(static方法除外,因为使用static方法时,不存在this),this就可以代表当前对象的引用或者说“调用方法的那个对象”的引用。

《java编程思想》中举了一个非常好理解的例子,如下代码中peel()方法是如何知道是被a还是被b所调用的呢?

class Banana { void peel(int i) { /* ... */ } }
public class BananaPeel {
  public static void main(String[] args) {
    Banana a = new Banana(),
           b = new Banana();
    a.peel(1);
    b.peel(2);
  }
}

书中给出的答案是编译器暗自把“所操作对象的引用(也就是a和b)”作为第一个参数传递给peel(),形如:

Banana.peel(a,1);
Banana.peel(b,2);

假设你希望在方法的内部获取当前对象的引用,就可以使用this关键字,但你也只能在方法的内部使用它。

此外,this关键字也可以添加参数,形如:this("hi",27);这种写法你也只能在某个构造器中使用,且必须放在构造器方法的最起始处,此写法可以在构造器内部明确调用另一个符合该参数列表的构造器。还是举一个简单的例子:

public class Flower {
 Flower(String s) {
    System.out.println(s+ "我是通过this关键字来调用的");
  }
  Flower() {
    this("hi");
    System.out.println("this关键字在该构造器中调用另一个构造器");
  }
  public static void main(String[] args) {
	  new Flower();
  }
} 
二、super关键字其代表的是当前类的直接父类。和this极其相似,在子类中可以通过super关键字调用直接父类的成员方法和成员变量以及在子类的构造函数中通过super关键字调用父类的构造函数。给个简单示例:
public class TestSuper{
	public static void main(String args[]){
		Country country = new Country(1);
		country.displayStar();
		System.out.println("Country实例化对象调用其自身成员变量:"+country.star);
	}
}
class  Country extends World{
	/**
	 * 当父类显示定义带参的构造方法时,
	 * 其子类显示定义构造方法并且在子类的构造方法中通过super关键字调用父类的构造方法是必须的:在实例化子类之前,
	 * 必须先实例化父类,由于在实例化子类时自动实例化父类,所以当父类显示定义带参数的构造方法时,
	 * 其子类也必须通过super关键字将父类需要的参数传递给父类的构造方法 以将其实例化
	 * @param star
	 */
	public Country(int star) {
		super(star);
	}
	public int star = 25;
	void displayStar(){
//		System.out.println("基类Star个数:"+super.super.star);语法错误
	}
}

class World extends Universe{
	int star = 50;
	
	public World(int star){
		super.display();
		System.out.println("World的star:"+this.star);
		System.out.println("方法参数star:"+star);
		System.out.println("Universe的star+World的star+方法参数star:"+(super.star+this.star+star));
	}
	public World(int star,int a){  }
}

//宇宙-基类
class Universe{
	int star = 100;
	public Universe(){
		System.out.println("Universe的star是:"+(++star));
	}
	public void display(){
		System.out.println("通过super调用父类的方法");
	}
}

三、final关键字

final可以用来修饰变量、方法和类。


 1、被final修饰的变量,表示该变量恒定不变不可修改。
①、定义时初始化,表示不可改变的编译时常量,编译时常量可以在编译时直接带入任何可能用到它的计算式中。对于这种情况,Java编程思想中表示只对基本类型有效,但测试发现对于final定义的String也有效.
②、在域的定义处或每个构造器中初始化,赋值发生在程序运行期间,编译时不会带入到程序中使用的该变量。
③、final修饰方法的参数,主要是一种声明和约定,表示该参数不可修改。
④、final修饰对象引用时,只能确保该引用不会被修改指向另一个对象,但对象自身是可以改变的。
2、final方法
     被final修饰的方法,禁止被子类覆盖。
3、final类

     被final修饰的类,不可被其它类继承。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值