super 关键字
this和super的区别
this代表当前对象,super可以理解为父类对象
既然super理解为一个父类对象,那么super应该可以用访问父类的成员
this的主要作用来帮助初始化本类成员(当外界传入的变量名和本类变量名相同的时候)
super的主要作用帮助我们初始化父类继承过来的成员
任何一个本类成员都默认隐含了一个this
任何一个本类的成员同时也可以使用super访问父类的成员
访问成员的区别
成员变量
this.成员变量
super.成员变量
super 不能访问父类私有成员
成员方法
this.成员方法
super.成员方法
构造方法
this(参数列表)
super(参数列表)
任何一个构造方法都默认会在构造方法第一句写上super,访问父类的无参构造方法
Constructor call must be the first statement in a constructor
super和this访问构造方法必须出现在构造方法的第一句
this和super在访问构造方法的时候,二者不能共存
static静态的上下文中不能出现this和super
this关键字
this:代表当前类的对象引用,在内存中,他和普通引用一样也指向堆区的空间,在创建对象的时候,也创建一个this引用指向同一个堆区的空间。
this特点
每个类的每个非静态方法 (没有被static修饰) #00BCD4 都会隐含一个this引用名称,它指向调用这个方法的对象。
当在方法中使用本类的属性时,都会隐含地使用this名称,当然也可以明确指定。
this可以看作是一个变量,它的值就是当前对象的
this使用场景
当局部变量和成员变量同名时使用this关键字
this关键字可以访问本类构造函数
static关键字
static修饰的变量叫做静态变量/ 共享变量 / 类变量
例子
通过静态修饰方法最大的好处? -- 方便调用 例如Math类
开发中经常会看到类似于Math类这样的工具类
以后我们也会编写自己的工具类,以后工具类的包名一般叫做 com.sxt.utils DBUtils NetUtils DBTools
访问权限修饰符
public | protected | default | private | |
---|---|---|---|---|
同一类中 | 是 | 是 | 是 | 是 |
同一包中的子类或其他类 | 是 | 是 | 是 | 否 |
不同包中的子类 | 是 | 是 | 否 | 否 |
不同包中的其他类 | 是 | 否 | 否 | 否 |
特点
1.静态变量属于某个类,而不属于某个具体的对象
2.只有静态才能访问静态,非静态变量不能够出现静态方法中
3.访问静态成员的格式
类名.成员变量
类名.成员方法
4.静态环境下不能够出现this和super关键字
5.static不仅能够修饰成员变量,成员方法,还能够修饰类,修饰类的时候必须内部类(后面讲解)
6.static还可以修饰代码块
7.静态代码块一般都是用来初始化静态成员
8.静态方法无法被重写,所以static关键字不能和abstract抽象方法一起使用(抽象方法必须重写)。
总结:
1.访问权限修饰符有四个
2.访问权限修饰符可以修饰成员变量,成员方法,还可以修饰类(只有public可以)
在这里需要注意,其实protected/private也可以修饰类,但是必须是内部类 #03A9F4
四个修饰符的特点
1.public修饰的成员对一切类可见
2.protected修饰的成员对子类可见
3.default修饰的成员仅对同包下可见
4.private修饰的成员仅对本类可见
访问权限修饰符的宽严关系
public > protected > default > private
Java当中封装就是通过访问权限修饰符来实现的
封装: 就是屏蔽内部的成员,而屏蔽内部的成员是通过访问权限修饰符来控制的
final关键字
final表示最终的,不可以改变的
在java里面修饰词 final修饰过的变量的值是不可以被修改的。在外部声明的变量在这个类一杯调用就初始化了,如果你没有对final修饰过的变量赋值,编译器初始化这个类的时候发现一个不可被修改的变量没有值,编译器必然报错。但是在方法内如果没有调用这个方法,就不会初始化这个变量,编译器就不会报错,在方法里可以先声明后赋值
用法
自定义常量
final修饰的变量表示常量
public static final int GAME_START = 0;
public static final int GAME_END = 1;
public static final int GAME_RUNNING = 2;
自定义常量提高了程序的可读性
常量不能够被二次赋值
final修饰类
final修饰类不能够被子类继承
final修饰成员变量
因为成员变量默认值是0,不能够被二次赋值
因为常量是在常量池中,不在堆区,所以没有默认值
final修饰局部变量
局部变量没有给默认值,所以不能被二次赋值
final修饰成员方法
成员方法不能够被子类重写