百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 行业知识 > 正文

「Java基础08」静态关键字static和继承(this、super、extends)

citgpt 2024-11-25 10:03 4 浏览 0 评论


目录

  • 1. 关键字static
    • 1.1 修饰成员变量
      • 1.1.1 特点
      • 1.1.2 访问格式
      • 1.1.3 定义场景
      • 1.1.4 示例
    • 1.2 修饰成员方法
      • 1.2.1 特点
      • 1.2.2 访问格式
      • 1.2.3 定义场景
      • 1.2.4 示例
    • 1.3 代码块
      • 1.3.1 格式和示例
      • 1.3.2 特点及场景
    • 1.4 注意事项

  • 2. 关键字this、super和extends
    • 2.1 继承(extends)
    • 2.2 继承的特点
    • 2.3 继承成员访问
    • 2.4 方法重写
    • 2.5 子类构造器
    • 2.6 this和super
  • 3. 类执行顺序


「Java基础08」静态关键字static和继承(this、super、extends)

1. 关键字static

static是Java的关键字,可以修饰成员变量和成员方法。

1.1 修饰成员变量

1.1.1 特点

  • 加关键字static的成员变量 -> 静态变量:
    静态成员变量属于类属性,内存中只加载一次
  • 不加关键字static的成员变量 -> 实例变量:
    实例成员变量属于实例属性,每次创建新实例会初始化变量

1.1.2 访问格式

静态成员变量:

类.变量名(推荐)
实例.变量名

实例成员变量:

实例.变量名

1.1.3 定义场景

静态成员变量:

属性属于类,且需要实例共享或者是常数等(例:圆周率3.14)

实例成员变量:

属性属于所有实例共性,但是每个实例属性值并不相同

1.1.4 示例

public class StaticTest1 {
    // 定义静态成员变量
    public static double PI = 3.14;
    // 定义实例成员变量
    public double result;
    
    public static void main(String[] args) {
        // 计算圆的周长
        StaticTest1 staticTest1 = new StaticTest1();
        // 圆的半径为2
        staticTest1.result = 2 * 2 * StaticTest1.PI;
        System.out.println(staticTest1.result);
    }
}

PI是属于静态成员变量,需要共享,所有圆相关的计算都需要它,所有他是静态共享的。

简单的内存描述:

类加载后再堆内存中创建PI变量 方法区加载main方法,之后开始运行将main方法加载到栈内存中 初始化StaticTest1类,在堆内存中创建实例,将实例地址返回给staticTest1实例变量名 这时实例staticTest1中静态变量指向的是类加载是创建的静态变量PI 执行计算,赋值给staticTest1实例成员变量 输出结果

1.2 修饰成员方法

1.2.1 特点

  • 加关键字static的成员方法 -> 静态成员方法:
    静态成员方法属于类,内存中只加载一次,所有对象共用功能
  • 不加关键字static的成员方法 -> 实例成员方法:
    实例成员方法属于实例特有方法

1.2.2 访问格式

静态方法:

类.静态方法
实例.静态方法(不推荐)

成员方法:

实例.成员方法

1.2.3 定义场景

静态方法表示类共用的功能,并不属于特定对象方法。比如计算加法都是两数相加,这是特定功能,每个实例计算的过程都一致。在程序中为了方便单独访问。

成员方法表示实例特有方法。比如学生实例,每个人说话的声音都是不同的,这就是特有功能,某某人说得话,具有一定识别性。在程序中需要访问成员变量。

1.2.4 示例

public class Student {
    // 定义静态方法
    public static void task() {
        System.out.println("所有学生的任务是学习");
    }
    // 定义实例方法
    public void sleep() {
        System.out.println("每个学生的睡姿都有自己的独特性");
    }

    public static void main(String[] args) {
        // 直接调用静态方法
        Student.task();
        // 调用实例方法
        Student student = new Student();
        student.sleep();
    }
}

你可能会想,任务task方法也是学生的独特方法,这样想确实也没问题。这就要看你抽象出来的方法是否具备所有对象共有。比如sleep这个方法也可以是静态方法,毕竟所有学生都需要休息,但是要具体到每个学生休息情况就变成独有的。

1.3 代码块

代码块是类的五大部分之一(代码块,构造方法,成员变量,方法,内部类),在java中使用{}括起来的就是代码块

1.3.1 格式和示例

静态代码块:

static {
	...
}

代码块:

{
	...
}

示例:

public class StaticTest2 {
    // 静态代码块
    static {
        System.out.println("静态代码块执行");
    }
    // 代码块
    {
        System.out.println("类代码块执行");
    }
    public static void main(String[] args) {
        // 创建示例
        StaticTest2 staticTest2 = new StaticTest2();
    }
}

1.3.2 特点及场景

静态代码块

  • 特点:类加载执行,只执行一次
  • 场景:做一些静态资源加载

代码块

  • 特点:每次创建实例调用构造方法时执行,在构造方法之前执行。
  • 场景:初始化实例资源

1.4 注意事项

静态关键字主要应用在工具类和常量中,在实际开发中,工具类是必不可少的。
静态关键字还可以修饰类,这将牵扯到内部类,将在下章说明

  1. 静态方法只能访问静态成员变量,不可以访问实例成员变量。
  2. 实例可以访问静态成员
  3. 静态方法中不可以使用this关键字(下面会说)


2. 关键字this、super和extends

  • 关键字this、super主要在继承方面体现到的比较多。this表示当前实例,super表示父类。
  • java中提供关键字extends,使一个类和另一个类建立继承关系,被继承类为父类,继承类为子类。
  • 继承类(子类)可以直接使用父类的属性和成员方法,这样就大大提高代码的复用性。

2.1 继承(extends)

格式:

public class 类名 extends 父类类名 {
	...
}

优势:

提高代码的复用性,减少冗余代码 增强代码的扩展性

设计规范:

提取类之间相同属性 子类独有属性不要放在父类中 所有类设计符合面对对象逻辑

2.2 继承的特点

  1. 子类可以继承父类的属性和行为,但是不能继承父类构造器
  2. java是单继承,一个子类只能有一个父类(很符合现实生活)
  3. 不支持多继承,但支撑多层继承
  4. java中所有类都是Object的子类
  5. 子类可以继承父类私有成员变量,但是不能直接访问(可以通过公共方法和构造器访问和设置)
  6. 不继承静态变量,可以共享

2.3 继承成员访问

  1. 在子类中访问成员(就近原则)

先子类局部范围访问 然后子类成员访问 父类成员访问 以上都没有则报错

  1. 如果子父类出现重名成员,则优先使用子类。若想调用父类,格式如下:
super.父类成员变量/父类成员方法

2.4 方法重写

  • 简介:子类继承父类时,子类实现了和父类相同的方法,我们就称子类方法为重写方法。
  • 格式:当子类重写父类方法时,需要在方法上添加@override注解
  • 要求:①重写的方法必须与父类方法相同,除了名称,参数列表也要一致。②私有方法不能被重写。③子类重写方法时,访问权限必须大于等于父类方法访问权限。

示例:

public class People {
    private String name;

    public void showName() {
        System.out.println("我的名称:" + name);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

public class Teacher extends People {
    public Teacher() {
        super.setName("Tome");
    }

    @Override
    public void showName() {
        System.out.println("我是教师。我的名字是" + getName());
    }

    public static void main(String[] args) {
        Teacher teacher = new Teacher();
        teacher.showName();
    }
}

2.5 子类构造器

  • 子类构造函数执行时都先执行父类的默认构造函数
  • 子类构造函数第一行默认是super()不写也存在
  • 如果父类无默认构造器将报错
  • 如果父类无构造器,也可以手动调用父类构造器。(例:super(param…))

2.6 this和super

关键字

访问成员

构造器

说明

this

this.成员变量/this.方法名(…)

this(…)本类构造器

代表当前调用类对象引用

super

super.成员变量/super.方法名(…)

super(…)父类构造器

代表当前调用类对象父类引用

注意:

this(…)和super(…)只能放在方法的第一行,所以这两个方法不能在同一个方法中出现。

3. 类执行顺序

// 父类
public class People {

    private String name;
    private String sex;
    private int age;

    static {
        System.out.println("执行People静态代码块");
    }

    {
        System.out.println("执行People代码块");
    }

    public People() {
        System.out.println("执行People构造器");
    }

    // get and set
}
// 子类
public class Student extends People {

    private int studentId;
    private String pro;

    static {
        System.out.println("执行Student静态代码块");
    }

    {
        System.out.println("执行Student代码块");
    }

    public Student() {
        System.out.println("执行Student构造器");
    }

    // get and set
}
// 测试类
public class Test {
    public static void main(String[] args) {
        Student student = new Student();
    }
}

运行Test类可以看见执行后的结果:

执行People静态代码块
执行Student静态代码块
执行People代码块
执行People构造器
执行Student代码块
执行Student构造器


本章结束,用于个人学习和小白入门,大佬勿喷!希望大家多多点赞收藏支撑支撑!

源码 【GitHub】 【码云】

相关推荐

Win7打开网页特别慢的原因?

经常打开Web的频繁用户的数量应该打开,因此,一旦网页的速度很慢,它会变得非常敏感。最近,Win7系统的用户发现他们打开了他们的网页,突然放慢了,绝不看网络速度和配置因素,最有可能是系统内存问题。如果...

电脑浏览器下载速度很慢怎么办

有网友反映自己的浏览器下载速度很慢怎么办?这种通过可能是浏览器缓存太多,没有优化等原因导致。下面小编就以几种常用的浏览器为例,给大家解答下...

网站打开慢的问题如何解决?

  当我们在浏览网页时,突然发现一个网站打不开或者加载速度非常慢,这时候你会不会感到很烦躁呢?别担心,今天我们就来教你解决网站打开慢的问题!  一、检查网络连接  我们需要确保自己的网络连接正常。请尝...

打开网页速度慢、下载速度慢、玩游戏延迟、频繁掉线的解决方法

影响实际上网速度的因素非常多,需要挨个做排查1、先排除是否是网络环境问题,可以核实以下情况,来判断是否是网络环境问题。(1)同一网络环境,如果其他电脑上网也很慢,则可判断是网络本身速度不快导致的。(2...

浏览器太卡、启动慢,教你一招提速至少一倍!

电脑端浏览器用久了都会有一个毛病那就是开启速度非常缓慢今天教大家一个小技巧可大大提升浏览器启动速度适用于QQ、360、搜狗等大多数浏览器提速效果非常明显启动速度至少要快一倍SpeedyFox支持平台:...

网站访问慢的排查方案(最详细)

说实话,比起网站打不开,网站访问慢更让人抓狂。因为造成网站访问慢的因素太多了,一般用户根本无从下手!任他千头万绪的问题,从以下三个方面入手,也能轻松破解访问慢的大难题:响应时间、执行时间、加载时间。...

电脑网页打开慢怎么办?金山毒霸电脑医生秒搞定

??在网络时代,上网是每天都会做的事,平时用手机上网比较多,但是工作的时候还是用电脑上网的,不管手机还是电脑都会越用越慢。有时会觉得,电脑配置也不低,每天都清理垃圾了都,网速也还行电脑怎么还上网这么慢...

家里wifi慢是怎么回事?教你几招提速方法

没WiFi,不成活!手机和WiFi之间,就像空调加棉被,谁也离不开谁。如今WiFi已经填满了我们生活的每个角落,很难想象,如果哪天没了网,世界会变成什么样!可是家里的WiFi是越用越慢,不知道有多少人...

连接路由器宽带测速正常,打开网页很慢?

电脑连接路由器后测试网速和申请的宽带一致,但打开网页的速度较慢,请参考以下步骤排查:1、更改DNS服务器电脑上获取的DNS服务器不稳定可能会导致打开网页较慢,可以在电脑的本地连接或无线连接手动设置DN...

手机打开网页非常慢,那是你用的浏览器不对!

今天世超独宠Android差友不知道大家平日里,在刷着微博浏览着新闻的时候有没有遇见过这样的情况:在你浏览的过程中,总会出现一些让你感兴趣的链接。这些链接可能是:”这个视频,女人不在家男人偷偷看!”“...

网站打开慢的原因有哪些?

网络能够为大家带来许多便利,现在的人们不管是在学习或者是工作当中都是离不开网络的。在网络中,各大网页和网站也是我们浏览信息的主要渠道。如果想要更加高效率的工作和学习的话,当然也离不开网站浏览速度的支持...

告诉你导致网站页面打开速度慢的几种情况

导致网站页面打开速度慢的原因有很多,主要注意以下几个方面,就能做到很好的避免。...

浏览器变慢有救了!只要2秒,重回新安装一样爽快!

而最近有小伙伴在后台留言,说自己电脑浏览器用久了后,速度变得越来越慢了。特别是用久后,每次打开浏览器加载半天,经常白屏卡上那么一小会,体验上要比看这loging在转还难受,差点以为死机了。其...

导致网站打开慢的原因以及解决方法

是什么原因会导致网站打开慢?又有什么办法解决呢?一般来说,http请求过多、网页过大、服务器性能过差等等都可能导致网站打开慢。www.xy3000.com小蚁云安全乔妹为您分享一些参考解决方法:研究表...

还在为打开网页慢而苦恼吗?试试这招

不知道大家有没有这种感觉,家里网速明明很快,有20M,50M甚至100M,但不知道为什么打开网页,浏览页面的时候总感觉加载速度很慢。其实上网速度的快慢不仅仅取决于你家的宽带速度,也跟你的电脑硬件,系...

取消回复欢迎 发表评论: