Java关键字
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的成员变量没有生成,只能操作类的静态变量 |
代码块 | 类初次实例化运行一次静态代码块 | 多次实例化同一个类,代码只运行一次 |
内部类 | 我觉得好像没有什么用…… | - |