首页 > 编程语言 >【Java学习】静态static&继承

【Java学习】静态static&继承

时间:2024-09-01 21:54:48浏览次数:6  
标签:Java 变量 静态 子类 成员 static 父类 方法

一、静态 static

(一)定义

static是静态的意思,static可以修饰成员变量或者修饰方法。

static关键字的使用,它可以用来修饰的成员变量和成员方法,被static修饰的成员是属于类的,放在静态区中,没有static修饰的成员变量和方法则是属于对象的。

static关键字在Java开发非常的重要,对于理解面向对象非常关键。

(二)static修饰成员变量

有static修饰成员变量,说明这个成员变量是属于类的,这个成员变量称为类变量或者静态成员变量。因为类只有一个,所以静态成员变量在内存区域中也只存在一份。所有的对象都可以共享这个变量。

定义格式:

修饰符 static 数据类型 变量名 = 初始值;

//举例
public class Number {
    private static int num = 1;
}

静态成员变量的访问:

直接用类名.变量名访问,或者先创建一个类的对象,再用对象名.变量名访问

public static void  main(String[] args){
    System.out.println(Number.num); //1

    Number number = new Number;
    System.out.printl(number.num)
}

区分:

无static修饰的成员变量属于每个对象的, 这个成员变量叫实例变,实例成员变量属于每个对象,必须创建类的对象才可以访问。

(三)static修饰成员方法

有static修饰成员方法,说明这个成员方法是属于类的,这个成员方法称为类方法或者静态方法,直接用类名访问即可。因为类只有一个,所以静态方法在内存区域中也只存在一份。所有的对象都可以共享这个方法。

与静态成员变量一样,静态方法也是直接通过类名.方法名称即可访问。

定义格式:

public class Student{
 
    public static void study(){
    	System.out.println("学生在学习");   
    }
}

访问:

public static void  main(String[] args){
    Student.study();
}

区分:

无static修饰的成员方法属于每个对象的,这个成员方法也叫做实例方法

需要注意的是:实例方法是属于每个对象,必须创建类的对象才可以访问。

格式:对象.实例方法

注意事项:

1、类方法中可以直接访问类成员,不可以直接访问实例成员

2、实例方法中及可以直接访问类成员,也可以直接访问实例成员

3、实例方法中可以出现this关键字,类方法中不可以出现this

(四)类方法的常见应用场景

类方法最常见的应用场景是做工具类。

在开发中会有一些非常实用的、具有独立功能的方法,而且希望这些方法可以被重复使用,就像一个个小工具一样 这些方法所在的类,就称为是工具类,而工具类中的方法,习惯上设置为类方法。

public class XxxxUtil {
    //求最大值
    public static int max(int a, int b) {
        return a > b ? a : b;
    }

    //求最小值
    public static int min(int a, int b) {
        return a < b ? a : b;
    }
}

相比于实例方法,类方法可以直接用类名调用,比较方便,而且不用创建对象,节省内存。

工具类没有创建对象的需求,建议将工具类的构造器进行私有。

(五)代码块

代码块是类的5大成分之一(成员变量、构造器、方法、代码块、内部类)。

代码块分为两种:

1、静态代码块

格式:static { }

特点:类加载时自动执行,由于类只会加载一次,所以静态代码块也只会执行一次

作用:完成类的初始化,例如:对类变量的初始化赋值

2、实例代码块

格式: { }

特点:每次创建对象时,执行实例代码块,并在构造器前执行

作用:和构造器一样,都是用来完成对象的初始化的,例如:对实例变量进行初始化赋值

二、继承

(一)概述

多个类中存在相同属性和行为时,我们可以将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可,其中,多个类可以称为子类,单独被继承的那一个类称为父类超类(superclass)或者基类

继承:就是子类继承父类的属性行为,使得子类对象可以直接具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。

好处:

1、提高代码的复用性(减少代码冗余,相同代码重复利用)

2、使类与类之间产生了关系

继承的格式

class 父类 {
	...
}

class 子类 extends 父类 {
	...
}

注意:Java是单继承的,一个类只能继承一个直接父类,跟现实世界很像,Java中的子类是更加强大的。可以多层继承,例如一个儿子不能同时有两个爸爸,但是可以有爷爷,那么儿子的能力就等于爷爷和爸爸和自己的相加

(二)权限修饰符

权限修饰符用来限制类中的成员(成员变量、成员方法、构造器、代码块…)能够被访问的范围。

private:修饰的成员只能被本类中的成员访问

缺省(什么都不写):修饰的成员只能被本类和同包中的类的成员访问

protected:修饰的成员能被本类、同包中的类、子孙类中的成员访问

public:修饰的成员能被任意位置的成员访问

(三)方法重写

当子类觉得父类方法不好用,或者无法满足父类需求时,子类可以重写一个方法名称、参数列表一样的方法,去覆盖父类的这个方法。声明不变,重新实现

重写后,方法的访问会遵循就近原则

注意事项:

1、在重写的方法上标注Override注解,可以指定java编译器检查我们方法重写的格式是否正确

2、子类重写父类方法时,访问权限必须大于或者等于父类该方法的权限( public > protected > 缺省 )

3、重写的方法返回值类型,必须与被重写方法的返回值类型一样,或者范围更小

4、私有方法、静态方法不能被重写,如果重写会报错

示例代码:

父类Father有一个makeFriend方法,子类Son继承后觉得这个方法不好,便对该方法重写。重写的方法名称,返回值类型,参数列表(如果有的话)都和父类中的方法相同。

public class Demo {
    public static void main(String[] args) {
        Son son = new Son();
        son.makeFriend();
    }
}

class Father{
    //交朋友
    public Father makeFriend(){
        System.out.println("通过写信交朋友");
        return null;
    }
}

class Son extends Father{

    //交朋友
    @Override
    public Father makeFriend(){
        System.out.println("通过微信交朋友");
        return null;
    }


}

(四)子类中访问其他成员的特点

1、在子类方法中访问其他成员(成员变量、成员方法),是依照就近原则的:

先子类局部范围找,

然后子类成员范围找,

然后父类成员范围找,如果父类范围还没有找到则报错。

2、如果子父类中,出现了重名的成员,会优先使用子类的,如果此时一定要在子类中使用父类的,可以通过super关键字,指定访问父类的成员:super.父类成员变量/父类成员方法

3、super和this的用法格式

this.成员变量    	--    本类的
super.成员变量    	--    父类的

this.成员方法名()  	--    本类的    
super.成员方法名()   --    父类的

(五)子类构造器的特点

1、子类中的全部构造器,都必须先调用父类的构造器,再执行自己

2、super(...) -- 调用父类的构造方法,根据参数匹配确认

3、this(...) -- 调用本类的其他构造方法,根据参数匹配确认

4、this和super不能同时出现,他们都必须是在构造方法的第一行

标签:Java,变量,静态,子类,成员,static,父类,方法
From: https://blog.csdn.net/weixin_69134024/article/details/141635828

相关文章

  • Java中的注解详讲
    1什么是注解jdk5提供了一个新的应用Annotation,注解,注释与之前所学的注释的区别之前的注释:是给程序员看,让程序员知道程序(代码)有什么用,实现了什么功能今天的注解:是给编辑器或jvm看的。在编译和运行时提供一些信息,按照信息完成后续的工作我们在开发中经常使用注解作......
  • 德州市专业技术人员继续教育刷课脚本-JavaScript编写
    脚本学习网站:德州市专业技术人员继续教育服务平台:sddz.yxlearning.com脚本地址:德州市专业技术人员继续教育服务平台-刷课脚本教程1.插件安装(以MicrosoftEdge浏览器为例)打开最中间那个蓝色绿色的浏览器,谷歌之类的浏览器也可以点击屏幕右上角三个点,图示位置,然后点击扩展......
  • 威海市专业技术人员继续教育刷课脚本-JavaScript编写
    脚本学习网站:sdwh.yxlearning.com,rsjwhjxjy.weihai.cn脚本地址:威海市专业技术人员继续教育-刷课脚本教程1.插件安装(以MicrosoftEdge浏览器为例)打开最中间那个蓝色绿色的浏览器,谷歌之类的浏览器也可以点击屏幕右上角三个点,图示位置,然后点击扩展点击获取扩展搜索Tamp......
  • 【Java学习】内部类&泛型
    一、内部类内部类是类中的五大成分之一(成员变量、方法、构造器、代码块、内部类);如果一个类定义在另一个类的内部,这个类就是内部类;场景:当一个类的内部,包含了一个完整的事物,且这个事物没有必要单独设计时,就可以把这个事物设计成内部类。内部类分为四种成员内部类:位于一个类......
  • Java常见设计模式
    设计模式(DesignPatterns)是软件工程中用于解决特定问题的一系列最佳实践。它们是经过时间考验的、被广泛认可的软件设计经验,可以帮助开发者在面对常见问题时做出更好的设计决策。设计模式不是现成的代码,而是一套指导原则,用来指导开发者如何组织代码结构,以便于更好地应对变化和......
  • Java的高级特性
    Java的高级特性概述:Lambda表达式Lambda表达式是Java8及更高版本中引入的一个重要特性,它提供了一种简洁的方式来表示匿名方法(即没有名称的方法)。Lambda表达式特别适用于实现仅有一个抽象方法的接口(这类接口被称为函数式接口)。Lambda表达式使得代码更加简洁、易于阅读,并且提高......
  • java开发学习资料集合
    针对java的学习,不同阶段采用的方式是不一样的。本文把java的学习分为入门、实战、进阶三个阶段。下面分开来说技术社区1、 CSDNCSDN在线学习平台,集合了各领域资深技术专家.覆盖领域:人工智能、大数据、区块链、数据库、大学课程、认证考试、系统/网络、游戏开发、Web开发......
  • java入门:安装开发环境
    安装JDK1:百度搜索JDK8,找到下载地址2:登录并同意协议3:下载电脑对应的版本4:双击安装JDK5:记住安装的路径(重要)6:配置环境变量我的电脑>右键>属性找到高级系统设置>环境变量>在系统设置下找到新建>变量名是JAVA_HOME>变量值填安装的路径7:配置path变量在系统变量中找到path......
  • 【JavaScript】LeetCode:6-10
    文章目录6轮转数组7买卖股票的最佳时机Ⅰ8买卖股票的最佳时机Ⅱ9两数之和10字母异位词分组6轮转数组数组题目要求最终结果返回nums。方法1:拼接数组,n=nums.concat(nums);。方法2:数组直接截取,这里提供方法2的代码。/***@param{number[]}nums*@param......
  • ecmascript和javascript的区别
    1.简介1.1.概述1.1.1.ecmascriptECMAScript(简称ES)是JavaScript编程语言的一个标准化版本。它是为网络开发设计的一种轻量级的脚本语言,主要用于在网页上实现交互性和动态效果。ECMAScript是该语言的标准名称,而JavaScript是其最知名和广泛使用的实现。1.1.2.javascrip......