java常见关键字

1static关键字

1.1static概述

我们在学习static关键字的时候需要提前弄明白java加载类的顺序
我们可以先记住该顺序:
父类的static代码块—>子类的static代码块—>父类的代码块—>父类的构造方法—>子类的代码块—>子类的构造方法,其中static代码块在类中只加载一次,如果再次需要加载带有static代码块的类时,第二次不加载,且如果有多个static代码块,按照它们在类中所写的顺序来加载。

1.11static关键字的用处

  • 用于修饰成员变量、成员方法(表示成员,后面不在复述)
  • 用于静态代码块中
  • 用于静态匿名内部类中
  • 用于静态导包

1.12static关键词的理解

  • static关键字表示静态的含义,通过类加载顺序可以发现,static的加载在创建对象之前执行(构造方法之前),说明static关键字是共享的。
  • 对象还未创建之前就初始化了,说明不能调用动态修饰对象的成员方法和成员变量,即通过初始化顺序说明,我们调用那些已经存在的事物,因此,本类的静态方法之间可以相互直接调用,本类动态方法可以直接调用静态方法。本类静态方法不能调用动态方法。动态方法调用别的类的动态成员需要先创建对象,通过对象来调用。动态方法调用别的类的静态成员通过对象来调用类名.调用即可。

1.13static的特点

通过上述的理解可以得出static的特点

  • static是一个修饰符,主要用于修饰成员
  • static修饰的成员被所有的对象所共享(static修饰的成员在对象没加载前就初始化了,当然共享)
  • static优先于对象存在
  • static修饰的独特引用方式,在本类中直接调用成员名;调用别的类静态则需要类名.静态成员名
  • static修饰的数据是共享数据,对象中存储的是特有数据

2this关键字和super关键字

2.1this和super关键字概述

  • this关键字代表引用对象,即谁调用方法中的thisthis就代表谁。super关键字代表父类的引用对象。

this代表谁?
可以看出第一个this代表name为小明的对象的地址值,第二个则是name为李华的地址值。

  • this关键字用于解决局部变量和成员变量重名的问题,平常在javaBean类中构造方法赋值的操作。
 public DishFlavor(Long id) {
        this.id = id;
    }
  • 由于指代引用对象,因此this代表对象,而static在对象之前初始化了,所以this不能出现在static修饰的方法中。
  • 我们平常调用的成员变量和成员方法都是默认加上this.的,因此有this.成员变量名、this.成员方法、this(…)代表调用构造方法,super对应则是父类中的super.成员变量名、super.成员方法、super(…),注意没有super.构造方法名的形式,这样调用编译时期就会报错。
  • this()有要求必须放在构造方法的第一行,super()也要求在构造方法的第一行,因此二者不能共存。子类的构造方法中默认有super();如果需要调用有参的构造方法则需要手动调用 例如,super(String name);

3final关键字

final关键字代表最终的意思,可以修饰成员、类

3.1final关键字的用处

final修饰用处产生限制作用
final修饰类该类不能被继承(不能有子类,但是可以有父类)
final修饰方法该方法不能被重写
final修饰变量表明该变量为常量,不能被再次赋值

final修饰变量时,变量类型不同限制的内容也不同

final修饰变量的类型产生限制作用
变量是基本数据类型不能改变的是值
变量是引用类型不能改变的是地址值,但是地址里面的内容还是可以改变

4abstract、interface和implements关键字

4.1概述

4.11abstract概述

abstract用于修饰抽象类,表示一种抽象的概念。在以前java工程师们总结了设计模式,这是长期积累下来的经验,而abstract则是对某类事物共同特征的一个抽象。例如,四轮车外观拥有不同的颜色,来满足用户的需求,我们在设计四轮车时,就可以将颜色这一方法设计为抽象方法,通过用户提交的颜色来个性化的设计车辆,而不是固定某一种颜色或者改动代码。

4.11interface和implements概述

interface则是对abstract的高度抽象,即接口里定义的都是抽象方法(jdk7及之前),如果某个抽象类全是抽象方法,可以考虑改写成接口。接口是一种规范。
接口的通过implements关键字来实现

4.2作用

4.21abstract特点

  • 抽象类和抽象方法必须使用abstract关键字修饰
  • 虽然抽象类可以有构造方法,但是抽象类不能被实例化
  • 抽象类的子类要么重写抽象类的所有抽象方法,要么是抽象类

4.22interface和implements特点

  • 接口interface关键字修饰,实现接口implements关键字
  • 接口没有构造方法,更不可能实例化。我们可以创建接口的实现类对象使用里面的方法
  • 接口的子类要么重写接口里面的所有抽象方法,要么子类也是抽象类(类前面再加上abstract关键字)

4.23类与接口的关系

类与接口关系关系
类与类的关系继承关系,只能单继承,但是可以多层继承
类与接口的关系实现关系,可以单实现,也可以多实现,还可以再继承一个类 的同时实现多个接口
接口与接口的关系继承关系,可以多继承

4.24抽象类和接口的区别

通过上述分析,可以看出二者的区别
相同点

  • 抽象类和接口都不能直接实例化
  • 抽象类的子类或接口的实现类都必须实现其全部的抽象方法,才可以实例化。否则该类仍然是抽象类

不同点

  • 关键词不同,抽象类子类使用extends关键字来继承抽象类,接口实现使用implements来实现接口
  • 抽象类可以抽构造方法,而接口没有
  • 抽象类的成员变量可以是普通变量,接口只能是用public static final 来修饰
  • 抽象类可以被单继承,而接口可以被多继承和多实现

4.25不同版本jdk接口的区别

在jdk7及之前,接口中的方法只能是抽象方法,当时为了解决接口升级的问题,例如,游戏平台要求在原来的基础上添加新的功能,这个时候如果在接口添加方法,会导致之前实现这个接口的类全部编译错误,我们需要一个个去实现每个实现这个接口添加的方法,会出现有些类需要使用实现了的方法,但是并没有什么关系的类,居然还要去修改,显然这是我们不愿意看到的情况。如果有一种接口增加新的方法,只需要引用就好了,又不影响别的实现接口的类。什么时候会有这种情况呢?明显是接口中的方法有方法体的时候。这时候jdk8有了改进,称这类方法为默认或静态方法。
默认方法格式:

public default void show3() { 
}

注意事项:

  1. 默认方法不是抽象方法,所以不要求被重写。但是可以被重写,重写的时候去掉default关键字
  2. public可以省略,default不能省略
  3. 如果实现多个接口,多个接口中存在相同的默认方法声明,子类就必须对该方法进行重写

静态方法格式:

public static void show3() { 
}

注意事项:

  1. 静态方法只能通过接口名.的形式调用,不能通过实现类名或对象类名调用
  2. public可以省略,static不能省略

我们通过上面分析发现还是存在问题,接口默认方法重名必须重写的问题,这时候jdk9就引入private关键字私有提供隐蔽性,防止上述问题。

注意事项:
1.默认方法可以调用私有的静态方法和非静态方法
2.静态方法只能调用私有的静态方法

4.26不同jdk的接口总结

  • jdk7及之前接口内都是抽象方法
  • jdk8为了解决接口升级问题,引入static和default有方法体的方法格式
  • jdk9为了解决jdk8出现接口方法重名必须重写的问题,引入private修饰符

5访问修饰符关键字

访问修饰符同一个类同一个包下子类不同包下
publicyesyesyesyes
protectedyesyesyesno
defaultyesyesnono
privateyesnonono

6致谢

参考相关文章,此处表示感谢

超链接http://t.csdn.cn/dV0v7
超链接http://t.csdn.cn/y1dr4
超链接http://t.csdn.cn/rOaOh

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值