当前位置: 首页 > news >正文

三个修饰符

三个修饰符

      • 三个修饰符
        • 一、abstract
          • 1.1 修饰类
          • 1.2 修饰方法
        • 二、final
          • 2.1 修饰类
          • 2.2 修饰方法
          • 2.3 修饰变量
            • 2.3.1 修饰属性
            • 2.3.2 修饰局部变量
            • 2.3.3 修饰方法的参数
            • 2.3.4 常量
        • 三、static关键字
          • 3.1 修饰属性
          • 3.2 修饰方法
          • 3.3 修饰代码块
          • 3.4 继承时的执行顺序

三个修饰符

一、abstract

abstract,抽象的。

1.1 修饰类

有的类是抽象出来的概念,只能作为父类存在,而不应该直接创建对象,此时,可以在类上加上abstract关键,设置该类为抽象类,不能直接创建对象,只能作为父类。

public abstract class Animal {private String name;public void eat() {System.out.println("动物在吃...");}
}
public class Demo1 {public static void main(String[] args) {// Animal a = new Animal(); // 报错,不能直接创建对象Animal a = new Dog(); // 使用子类创建对象}
}
1.2 修饰方法

在父类中,可能存在一些方法,必须要在子类中重写,那么可以在该方法前面加上abstract关键字,指定该方法在子类中应该重写。

public abstract class Animal {private String name;// 只需要方法的声明,不需要实现,所以没有大括号,直接使用分号结束public abstract void eat();
}
public class Dog extends Animal{@Overridepublic void eat() {System.out.println("狗在吃...");}
}

注意:

  • 一个抽象类中可以没有抽象方法
  • 有抽象方法的类必然是抽象类
  • 抽象方法不能使用private,没有意义
  • 当子类继承一个有抽象方法的抽象类时,会报错。此时有两种解决方案:
    • 将子类也设置为抽象类
    • 实现(重写)父类中所有的抽象方法

二、final

final,最终的,最后的,终结的,不可更改的。

2.1 修饰类

表示该类不能被继承。

注意:final不能和abstract一起使用。

2.2 修饰方法

表示该方法不能被重写。

2.3 修饰变量

表示该变量一旦赋值,不能改变,称为常量。

2.3.1 修饰属性

该属性必须在创建对象后,要有值。赋值的时机:

  • 直接在属性定义时赋值

    public class Dog{private final String name = "";
    }
    
  • 在代码块中赋值

    public class Dog{private final String name;{name = "";}
    }
    
  • 在构造方法中赋值

    public class Dog{private final String name;public Dog() {this.name = "";}public Dog(String name) {this.name = name;}
    }
    

    注意:不能再次赋值,所以当在代码块中赋值后,不能在构造方法中赋值,因为代码块在构造方法前执行。

2.3.2 修饰局部变量
public class Dog extends Animal{public void m1() {// 先声明,后赋值final int n; n = 6;// n = 5; 会报错,不能重复赋值// 声明的同时赋值final int m = 3;}
}
2.3.3 修饰方法的参数
public class Dog extends Animal{public void m2(final int n) {
//		n = 5; 会报错, 表示该值不能修改}
}
2.3.4 常量

在类中一般会定义一些变量,声明为final修饰,视作常量。

在项目中,固定使用的一些常数,不希望在使用过程中被改变,会定义成常量。

常量定义的规范:单词全大写,多个单词使用下划线隔开。

// Integer类中的整数最大值:
public static final int   MAX_VALUE = 0x7fffffff;
// Math类中的PI的值:
public static final double PI = 3.14159265358979323846;

三、static关键字

3.1 修饰属性

表示该属性为静态属性,也叫类属性。

同一个类共享同一个类型属性空间,也可以使用对象操作。但是不推荐。应该使用类名访问。

创建的对象在堆中,而类属性在方法区。

注意:不能修饰局部变量。不需要创建对象就可以使用类属性。

public class Student {public String name;public int age;public static String className;public void introduce() {
//		static int n = 5; // 报错,不能修饰局部变量System.out.println(className);}
}
public class Demo1 {public static void main(String[] args) {Student s1 = new Student();s1.name = "张三";s1.age = 20;s1.className = "0班"; // 可以操作,但是不推荐Student.className = "1班"; // 静态属性,类属性Student s2 = new Student();s2.name = "李四";s2.age = 18;Student.className = "2班";System.out.println(s1.name + "," + s1.age + "," + Student.className + "---" + s2.name + "," + s2.age + "," + Student.className);}
}

在实例方法中是否可以调用静态属性?

  • 可以,因为静态属性不需要创建对象就可以访问。创建了对象也可以访问。
3.2 修饰方法

表示该方法为静态方法(类方法)。

即直接使用类名调用的方法,不需要创建对象即可调用。

public class Student {public String name;public int age;public static String className;public static int count = 0;public Student() {count++;System.out.println("对象被创建了"+count+"次");}public void introduce() {
//		static int n = 5; // 报错,不能修饰局部变量System.out.println(className);}// 静态方法,类方法public static void m1() {System.out.println("m1===被调用");}
}

注意:

  • 静态方法不需要创建对象即可使用,直接用类名访问。
  • 在静态方法中可以调用其他静态方法,但是不能调用非静态方法(实例方法)。
  • 静态方法中可以调用静态属性,但是不能调用非静态属性(实例属性)。
  • 静态方法中不能使用this和super。
  • 静态方法可以继承,不能重写,没有多态。
3.3 修饰代码块

动态代码块:在类中直接使用一对大括号中的代码。创建对象时执行。

执行顺序:

  • 初始化属性
  • 执行动态代码块
  • 执行构造方法
public class A {public String name = "aaa";{System.out.println(name);System.out.println("动态代码块");}public A() {System.out.println("构造方法");}
}public class Demo2 {public static void main(String[] args) {new A();}
}

静态代码块:使用static修饰的代码块叫静态代码块。类加载时执行。而且只执行一次。

创建对象时会先加载类。

加载类:将类的信息加载到内存中的方法区,以便得到对象所需的空间大小,方便创建对象。

执行顺序:

  • 静态属性初始化(仅一次)
  • 静态代码块(仅一次)
  • 实例属性
  • 动态代码块
  • 构造方法
public class A {public static String sname = "静态属性";public String name = "实例属性";{System.out.println(name);System.out.println("动态代码块");}public A() {System.out.println("构造方法");}static {System.out.println(sname);
//		System.out.println(name); // 不能访问实例属性System.out.println("静态代码块");}
}public class Demo2 {public static void main(String[] args) throws ClassNotFoundException {
//		new A();// 加载类
//		Class.forName("com.qf.day13.A");new A(); // 会先加载类
//		new A();}
}
3.4 继承时的执行顺序

经典面试题:执行顺序:

父类静态属性(仅一次)
父类静态代码块(仅一次)
子类静态属性(仅一次)
子类静态代码块(仅一次)

父类实例属性
父类动态代码块
父类构造方法
子类实例属性
子类动态代码块
子类构造方法

public class A {public static String sname = "父类静态属性";public String name = "父类实例属性";{System.out.println(name);System.out.println("父类动态代码块");}public A() {System.out.println("父类构造方法");}static {System.out.println(sname);System.out.println("父类静态代码块");}
}public class B extends A{public static String sname1 = "子类静态属性";public String name1 = "子类实例属性";{System.out.println(name1);System.out.println("子类动态代码块");}public B() {System.out.println("子类构造方法");}static {System.out.println(sname1);System.out.println("子类静态代码块");}
}public class Demo2 {public static void main(String[] args){new B();}
}

相关文章:

三个修饰符

三个修饰符三个修饰符一、abstract1.1 修饰类1.2 修饰方法二、final2.1 修饰类2.2 修饰方法2.3 修饰变量2.3.1 修饰属性2.3.2 修饰局部变量2.3.3 修饰方法的参数2.3.4 常量三、static关键字3.1 修饰属性3.2 修饰方法3.3 修饰代码块3.4 继承时的执行顺序三个修饰符 一、abstrac…...

JVM调优面试题——参数命令专题

文章目录1、JVM参数有哪些?1.1、 标准参数1.2、-X参数1.3、 -XX参数1.4、 其他参数1.5、 查看参数1.6、 设置参数的常见方式1.7、 常用参数含义2、JVM常用命令有哪些?2.1、jps2.2、jinfo2.3、jstat2.4、jstack2.5、jmap3、你会估算GC频率吗?4、 内存溢出…...

单例模式(设计模式详解)

单例模式 描述 单例模式是一种创建型模式,它的目的是确保一个类只有一个实例,并提供全局访问点。这个实例可以被多个客户端共享,从而避免创建多个实例所带来的资源浪费和不必要的复杂性。 实现 懒汉模式 public class LasySingleton {priv…...

设计一份关于文化遗产视频的调查问卷

参考文献:[1]任洁. 重庆美食类短视频传播策略研究[D].重庆交通大学,2021.DOI:10.27671/d.cnki.gcjtc.2021.000699.📰1 设计背景现已制作一些关于文化遗产的时长4-5分钟的视频,需要面向在校大学生收集他们对视频的看法从而分析视频的传播效果&…...

Linux内核移植

内核移植半导体厂商会从linux内核官网下载某个版本,将其移植到自己的CPU上,测试成功后就会将其开放给该半导体的厂商的CPU开发者,开发者下载其提供的linux内核,然后将其移植到自己的 产品上。1、NXP官方开发板Linux内核编译测试编…...

忆享科技优化入职培训加强人效管理全面迎接新挑战

-优化入职培训-忆享科技加强人效管理入职培训课程 ✦ KPI系统上线 ✦ 砥砺前行前言许多企业随着自身的不断发展,对于各类人才引进需求也越来越迫切,一批批新员工的加入,公司规模逐渐扩大,给公司带来了全新的血液。但在大量新员工加…...

Spring——注解开发依赖注入和管理第三方bean

自动装配(引用类型) 环境准备: 文件结构如下图所示,Dao层的实现类里面有一个save方法,Service层里面的实现类有一个BookDao的声明和一个set方法,同时也有一个save方法,配置类的扫描范围如图所示 在当前的一个测试类当…...

shell可能考你但是不常用的基础($篇)

前言 当你面试的时候,可能要说的架构什么都准备好了,也说的七七八八,结果到最后问了一些基础的问题答不上来或者没想起来就很容易造成社会性死亡,一个没答上来道心被破,后面就更容易懵逼了 通常造成这个问题的原因是写…...

项目管理必备:如何绘制一份优秀的甘特图?

本文一共分为两部分—— 分享60Excel甘特图模板,简单省事儿分享两种甘特图制作教程,高效快捷 第一部分——60甘特图模板 分享一些项目管理甘特图的模板,省事儿!高效!简单! Excel甘特图表模板自取&#xf…...

【点云学习】多时相激光雷达点云

多时相雷达数据(multi-tempral LiDAR data) 1 一种多时相激光雷达数据建筑物变化检测方法-汪承义(2013) 背景:空间分辨率的提高引入了“类内可分性”增加与“类间可分性”降低;遮挡与阴影的存在使问题变得…...

使用QT C++编写一个随机生成网络ip地址的程序

根据网络搜索结果&#xff0c;使用QT C编写一个随机生成网络ip地址的程序的示例代码可能如下&#xff1a; cpp #include <QCoreApplication> #include <QRandomGenerator> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(a…...

Web前端学习:章三 -- JavaScript预热(三)

六九&#xff1a;函数的变量提升 函数的变量提升没有var高&#xff0c;var是最高的。 先提var&#xff0c;再提函数 解析&#xff1a; 1、4行打印之前没有定义变量&#xff0c;预解析触发变量提升 2、先提var&#xff0c;再提函数。所以先把var提升到最上面&#xff0c;然后提…...

java实用小技巧:判断list是否有重复项

在项目中经常会遇到这样的场景&#xff0c;就是一个list&#xff0c;根据某种规则&#xff0c;我要去判断里面是不是有重复的项。 难度不高&#xff0c;但有点烦&#xff0c;所以专门开一篇文章来记录一下&#xff0c;争取弄一个相对简洁的写法。 先看一个简单的例子&#xf…...

SQL优化常用招数(上)

文章目录 一、查询SQL尽量不要使用select *,而是具体字段二、避免在where子句中使用 or 来连接条件三、尽量使用数值替代字符串类型四、使用varchar代替char五、技术延伸,char与varchar2的区别?六、where中使用默认值代替null七、避免在where子句中使用!=或<>操作符八…...

C++并发之探索编程三

文章目录1. 等待事件或等待其他条件1.1 凭借条件变量等待条件成立1.1.1 std::condition_variable1.1.2 std::condition_variable_any1.1.3 std::condition_variable和std::condition_variable_any之间的区别上个章节我们讨论了如何对共享数据的一个保护&#xff0c;通过std::lo…...

某智能驾驶企业:CACTER云网关为O365系统护航

01 客户背景 某智能驾驶企业是一家国际性的高科技创新型企业&#xff0c;在智能驾驶领域处于全球领先地位&#xff0c;专注于为广大客户提供个性化的智能驾驶解决方案&#xff0c;共建美好智能新时代。 使用产品&#xff1a;CACTER邮件安全云网关 02 痛点难点问题 根据Corema…...

网络安全与信息安全的主要区别讲解-行云管家

生活中工作中&#xff0c;我们经常可以听到信息安全与网络安全这两个词语&#xff0c;但很多小伙伴对于两者区分不清楚&#xff0c;今天我们小编就给大家来简单讲解一下这两者的主要区别吧&#xff01; 网络安全与信息安全的主要区别讲解 1、定义不同 网络安全是指网络系统的…...

Zabbix6.2利用模板和自定义监控项监控华为AR3260路由器

1&#xff1a;登录路由器的WEB管理控制台。在系统管理中找到SNMP然后开启SNMP代理&#xff0c;SNMP的版本可以只选择v2c都选择也无所谓&#xff0c;然后点击新建一个团体。 2&#xff1a;团体名称输入默认的public即可&#xff0c;在WEB端显示的是乱码&#xff0c;但是不影响使…...

MySQL Connector/C++使用过程中的问题

Linux环境下&#xff0c;使用mysql connector cpp的时候&#xff0c;链接的时候报错&#xff1a; /usr/bin/ld: warning: libssl.so.10, needed by /usr/lib64/libssh2.so.1, may conflict with libssl.so.1.1 /usr/bin/ld: ext/openssl/.libs/xp_ssl.o: undefined reference …...

SpringBoot下的Spring——DAY04——动态代理总结、AOP、自定义注解进行拦截、动态获取注解参数、通知方法(内含源代码)

SpringBoot下的Spring——DAY04——动态代理总结、AOP、自定义注解进行拦截、动态获取注解参数、通知方法&#xff08;内含源代码&#xff09; 源代码下载链接地址&#xff1a;https://download.csdn.net/download/weixin_46411355/87549575 目录SpringBoot下的Spring——DAY0…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...