Java关键字是电脑语言里事先定义的,有特别意义的标识符,有时又叫保留字,还有特别意义的变量。今天记录几个在学习中有新的发现的关键字。

过程中我遇到了两点疑惑,如果看到我文章的大佬有更好的解释,欢迎留言探讨。

this

this关键字有两种(或者说三种)用法,分别是this.成员变量、this.方法、this()调用无参构造方法。

this.成员变量

我们总是会遇到以下代码,使用this就不用思考到底给形参起个什么名字了,它很好的帮助计算机区分了成员变量与形参。

class Person{
	int age;
    public void setAge(int age){
    this.age=age
    }
}

我倒是想过可以统一形参头部添加i之类的,达到age=iage的效果,不过要是成员变量也是i开头,可能要睁大眼睛了。因此,到现在为止我还是觉得this关键字可有可无。有,帮助了我们快速区分成员变量和形参;无,我们也可以自己想办法解决。

this.方法

我觉得这个是可有可无的,我们可以直接使用方法,无需this。

this()调用无参构造方法

正确的方法是这样的,含参构造方法调用无参构造方法,第一行写上this()。但其实我还是有疑问。

class Person{
	public Person() {
	System.out.println("1");	
	}
	
	public Person(int i) {
		this();
		System.out.println("2");
	}
}

疑惑1

可不可以像this的第二点那样,直接使用Person()/this.Person()来调用。

结果如下图显示,告诉我"The method Person() is undefined for the type Person"方法没有定义,建议我创建一个Person的方法,那看来我的想法是行不通的了。

这就引出了我的第二个问题,构造方法到底算不算方法,是不是我们中文翻译的原因,其实它不是一个方法。

经过我的查询,我觉得是的,在英文世界里都是** Java Class Methods ** 和** Java Constructors** 。所以我大胆的判断,两者就是翻译的原因,一个是方法,一个是构造器。说构造方法是一个特殊的方法,我觉得不成立,除非可以看到这部分的源码底是如何实现的。

super

这个和this差不多。

用法 说明
super.成员变量 调用父类成员变量
super.成员方法 调用父类方法
super(参数) 调用父类构造器

疑惑2

class Animal {
	String name;
	private int age;
}

class Dog extends Animal {
	public String getNAme() {
		return super.name;
	}

	public int getAge() {
		return super.age;//报错
	}
}

一般写类的时候都有封装,然后发现在子类调用父类成员变量的时候报错,这是怎么回事?提示age不可访问 ,解决方法是修改age的修饰符或者为Animal添加一个get的方法。尝试使用了第一种方法,解决了问题。

虽然说解决了这个问题,但是我就奇怪为什么不行,不是「继承」了吗?为什么还有这种权限的问题?
于是一个问题开始问我,到底java子类继承类父类的什么?

static

修饰 作用 说明
类变量 静态变量,所有本类共享 不能修饰局部变量
类方法 不需要生成实例就可以使用改方法,类似于工具人 因为不用生成实例,所以非static的成员变量没有生成,只能操作类的静态变量
代码块 类初次实例化运行一次静态代码块 多次实例化同一个类,代码只运行一次
内部类 我觉得好像没有什么用…… -