JAVA 面向对象(this与super的区别

开发者训练营官方
发布于 2021-1-8 10:42
浏览
0收藏

JAVA 面向对象(this与super的区别,构造代码块和局部代码块,静态代码块的区别)

因为东西太多,一篇文章讲完怕是大家也不想看,而且博主也是最近从C++初学JAVA可能不一样的东西一时没发现,所以慢慢分两章更新,以方便大家阅读来指出错误。
上一篇文章的地址戳这里
在上一篇中,我大概说了,面向对象编程的思想和基本概念,以及对象的在内存中的存储方式,构造与析构,以及四大特征中的两个(抽象和封装),这篇文章主要是对一些基本概念的补充。

一点点基本概念
构造代码块
首先是他的基本概念:
1、 在类的内部,方法外部的代码块。
2、 通常用于抽取构造方法中的共性代码。
3、 每次调用构造方法前都会调用构造代码块
4、 优先于构造方法加载
这个概念看完好像是是而非,那么我们看段代码:

class c{
 String country;
 int a;
 {
  country="中国";
 }
 public c() {
  System.out.println("1号选手,来自"+country);
 }
 public c(int a) {
  System.out.println("2号选手,也来自"+country);
 }
}
public class oopjc {
 public static void main(String[] args) {
  new c();
  new c(1);
 }
}


他的输出是:
JAVA 面向对象(this与super的区别-鸿蒙开发者社区
我们看代码的位置是在类中,方法外;他里边的变量country属于构造函数中总共有的变量,也就是共性代码,而且从输出我们可以知道它比构造函数的调用早一点。

局部代码块
首先是他的基本概念:
1、 在方法里面的代码块
2、 通常用于控制变量的作用范围,出了括号就失效
3、 变量的范围越小越好,成员变量会有线程安全问题

 public c(int a) {
  {
   System.out.println("你好我是局部代码块");
  }
  System.out.println("2号选手,也来自"+country);
 }


静态代码块
1.位置:在类里方法外
2.在类第一次加载时就加载到内存中并一直驻存,
3.全局共享,直到类消失静态资源才消失
4.静态资源只被加载一次
5.一般用于项目的初始化

三者的执行顺序
静态 - 构造代码块 - 构造方法 - 局部

static {
  name="来福";
 }
 {
  System.out.println(name);
 }
 public Anmail() {
  System.out.println(name);
 }

输出了两次次来福

this关键字
this代表本类对象的一个引用对象。
构造函数中,this()必须放在第一行。

public Anmail(String name, int age) {
  // TODO Auto-generated constructor stub
  this.name=name;
  this.age=age;
 }


我们在构造函数的时候,有时候会出现这种变量和成员变量命名一致的情况,或者方法名一样的情况,我们需要有一个方法来区别他们,就是this,在类中使用this.变量就是指成员变量。
那么他还可以怎么使用呢?
我们还可以用它来实现构造方法间的调用:

public Anmail() {
  this("来福",1);
  System.out.println(name);
 }
 public Anmail(String name, int age) {
  // TODO Auto-generated constructor stub
  this.name=name;
  this.age=age;
 }


super关键字
1、 通过super关键字可以使用父类的内容
2、 super代表父类的一个引用对象
3、 如果用,必须出现在调用位置的第一行
这个和this差不多只不过this是表示自己类的而super是指父类的。

this和super的区别
1、 this代表本类对象的引用,super代表父类对象的引用。
2、 this用于区分局部变量和成员变量
3、 super用于区分本类变量和父类变量
4、 this.成员变量 this.成员方法() this([参数])代表调用本类内容
5、 super.成员变量 super.成员方法() super([参数]),代表调用父类内容
6、 this和super不可以同时出现在同一个构造方法里,他们两个只要出现都得放在第一行,同时出现的话,到底第一行放谁

控制访问符号
JAVA 面向对象(this与super的区别-鸿蒙开发者社区

收藏
回复
举报
回复
    相关推荐