一.Static

一 定义:

叫静态,可以修饰成员变量、成员方法

成员变量按有无static修饰,分为两种:

类变量:有static 修饰,属于类,在计算机里只有一份,会被类的全部对象共享。

实例变量:无static修饰,属于每一个对象。

static变量使用:

类变量:

类名.类变量(推荐)

对象名.类变量(不推荐)

实例变量:

对象.实例变量

static方法使用:

类方法(静态方法):

属于类,可以直接用类名访问,也可以用对象访问

类名.类方法(推荐)

对象名.类方法(不推荐)

无static修饰的成员方法:

实例方法 (对象的方法):

属于对象,只能用对象访问

对象名.实例方法

(拓展:main方法也是类方法)

类方法的应用场景

可以用来设计工具类

是什么:工具类中的方法都是类方法,每个类方法都是为了完成一个功能的

好处:提高了代码的复用性,调用方便,提高了开发效率

对比:实例方法需要创建对象进行调用,会浪费内存

建议:工具类不需要创建对象,建议将工具类的构造器私有化

注意事项

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

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

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

二 代码块的概述

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

代码块分为两种:

静态代码块

格式:static{}

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

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

实例代码块

格式:{}

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

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

应用:记录对象创建的日志

三 单例设计模式

设计模式指的是具体问题的最优解法

确保一个类中只有一个实例

单例要求:

1.把类的构造器私有化,防止外部通过 new 创建新实例;

2.定义一个类变量存储类的一个对象;

3.提供一个类方法返回对象

单例应用场景:

任务管理器,获取运行时的对象

使用单例好处:

可以有效避免浪费内存

饿汉式单例特点:

获取类的对象时,对象已经创建好了

懒汉式单例特点:

拿对象时才开始创建对象

  • 饿汉式单例代码

    public class Test {public static void main(String[] args) {A a1=A.getObject();A a2=A.getObject();System.out.println(a1);System.out.println(a2);}
    }
    public class A {//1.必须私有类的构造器private A(){}//2.定义一个类变量记住类的一个对象private static A a=new A();//3.定义一个类方法返回类的变量public static A getObject(){return a;}
    }
  • 懒汉式单例代码

    public class Test2 {public static void main(String[] args) {B b1= B.getInstance();B b2=B.getInstance();System.out.println(b1==b2);}
    }
    
    public class B {//2.定义一个类变量,用于存储这个类的一个对象private static B b;//1.把类的构造器私有化private B(){}//3.定义一个类方法,确保这个方法保证第一次调用菜创建一个对象,后面调用时会返回同一个对象public static B getInstance(){if(b==null){System.out.println("第一次创建对象~");b=new B();}return b;}}
    

注意事项:单例对象频繁使用时采用饿汉式单例代码,很少用到时采用懒汉式单例代码

二.继承

一 定义:

1.继承就是extends关键字,让一个类和另一个类建立的一种父子关系

2.子类可以继承父类的非私有的成员

特点:

子类继承父类的非私有化成员(成员变量,成员方法)

继承后对象的创建是子类和父类共同完成的

好处:

减少重复代码代码的编写,提高代码的复用性

继承注意事项:

1.Java是单继承的,一个类只能继承一个直接父类;Java中的类不支持多继承,但是支持多层继承。

2.Object类是Java中所有类的祖宗

二 方法重写

原因:当子类觉得父类中的某个方法不好用时,或者无法满足自己的要求时,子类可以重写一个方法名称,参数列表一样的方法,去覆盖父类的这个方法,这就是方法重写。

注意:重写后,方法的访问,Java会遵循就近原则。

方法重写其它注意事项:

1.重写小技巧:使用@Override注解,检查我们方法重写的格式是否正确,代码可读性也会更好。

2.子类重写父类方法时,访问权限必须大于或者等于父类该方法的权限。

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

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

三 子类访问成员的方法

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

1.先子类局部范围找

2.然后子类成员范围找

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

如何在子类中优先使用父类成员:

可以通过super关键字,指定父类的成员:super.父类成员变量/父类成员方法

四 子类构造器

特点:

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

  • 子类构造器特点代码

     class A {
    //    public A(){
    //        System.out.println("父类A构造器执行了");
    //    }public A(String name,int age){}
    }
    class Z extends A{public Z(){//super();默认存在super("123",34); //解决父类没有默认构造器System.out.println("子类Z无参构造器执行了");}public Z(String name){//super();默认存在super("123",34); //解决父类没有默认构造器System.out.println("子类Z有参构造器执行了");}
    }public class Test {public static void main(String[] args) {Z z=new Z();Z z1=new Z("名字");}
    }
    

应用场景

子类构造器可以通过调用父类构造器,把对象中包含父类这部分的数据先进行初始化赋值,再回来把对象里包含子类这部分的数据页进行初始化赋值。

补充:this(….)调用兄弟构造器

任意类的构造器中,是可以通过this(…)去调用该类的其他构造器的

  • this(….)调用兄弟构造器代码

    public class Test2 {public static void main(String[] args) {Student student=new Student("张三",12);System.out.println(student.getName());System.out.println(student.getAge());System.out.println(student.getSchoolName());}
    }
    class Student{private String name;private int age;private String schoolName;public Student() {}public Student(String name,int age){this(name,age,"黑马程序员"); //this(…)调用兄弟构造器}public Student(String name, int age, String schoolName) {this.name = name;this.age = age;this.schoolName = schoolName;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getSchoolName() {return schoolName;}public void setSchoolName(String schoolName) {this.schoolName = schoolName;}
    }

注意:super和this不能出现在同一构造器中,且放在第一行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/92261.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/92261.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/92261.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

幻兽帕鲁开服教程

以下均为个人推荐,不喜勿喷,望审核大大明辨开服条件一台带公网的vps服务器(需开放udp),配置至少为4c16g,推荐8c32g开服需要准备的工具:steamcmd:https://steamcdn-a.akamaihd.net/cl…

lesson21:Python面向对象编程

目录 引言 一、了解面向对象编程(OOP):编程范式的革命 1.1 什么是面向对象编程? 1.2 OOP vs 面向过程:思维方式的差异 1.3 OOP的三大核心特性 二、类与对象:OOP的基石 2.1 类(Class&#…

基于卷积神经网络与小波变换的医学图像超分辨率算法复现

基于卷积神经网络与小波变换的医学图像超分辨率算法复现 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家,觉得好请收藏。点击跳转到网站。 1. 引言 医学图像超分辨率技术在临床诊断和治疗规划…

HCIP第一二章笔记整理

第一章:复习HCIA第一阶段应用层:自然语言转换为编码表示层:编码转换为二进制介质访问控制层:二进制转化为信号物理层:传输电信号第二阶段:OSI参考模型应用层:提供网络服务表示层:对数…

《使用Qt Quick从零构建AI螺丝瑕疵检测系统》——2. C++基础:构建程序的坚实骨架

目录一、概述1.1 背景介绍:从UI到逻辑1.2 学习模式:Qt控制台应用二、C语法快速入门2.1 变量、数据类型与注释2.2 函数与代码封装2.3 循环与容器:批量处理三、面向对象编程:封装数据与行为四、Qt的核心扩展:信号与槽通信…

Navicat 远程连接SQLlite数据库

1、SQLlite数据库是一个本地.db文件,默认不支持远程连接; 2、Navicat 可以通过ntunnel_sqlite.php文件连接远程SQLlite库; 3、安装Navicat,安装完成,在安装目录下找到ntunnel_sqlite.php文件; 4、上传当前文…

OpenCV用于计算光流的一个类cv::optflow::DualTVL1OpticalFlow

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::optflow::DualTVL1OpticalFlow 是 OpenCV 中用于计算光流的一个类,特别地,它实现了基于双帧 TV-L1(Total V…

PyQt5在Pycharm上的环境搭建 -- Qt Designer + Pyuic + Pyrcc组合,大幅提升GUI开发效率

软件安装 目标软件: Python解释器Pycharm编辑器 Python官网: 点击访问Python官网 Pycharm官网:点击访问Pycharm官网 环境搭建 搭建完成后最终的环境详情: python安装路径:D:\ProgramEnviron\Python\Python311Pyth…

30天打牢数模基础-卷积神经网络讲解

案例代码实现一、代码说明本案例使用PyTorch实现一个改进版LeNet-5模型,用于CIFAR-10数据集的图像分类任务。代码包含以下核心步骤:数据加载与预处理(含数据增强,划分训练/验证/测试集);定义CNN网络结构&am…

Dev-C++——winAPI贪吃蛇小游戏

🚀欢迎互三👉:雾狩 💎💎 🚀关注博主,后期持续更新系列文章 🚀如果有错误感谢请大家批评指出,及时修改 🚀感谢大家点赞👍收藏⭐评论✍ 今天水一篇吧…

【openbmc6】entity-manager

文章目录 2.1 事件监听:dbus在linux上使用的底层通信方式多半是unix domain socket ,事件的到来可被抽象为:socket上有数据,可读 2.2 事件处理:由于主线程肯定有逻辑得跑,因此新开一个线程甚至多个线程专门用来监听和处理事件,但存在多线程就意味着可能存在竞争,存在竞…

Java 实现 UDP 多发多收通信

在网络通信领域,UDP(用户数据报协议)以其无连接、高效率的特点,在实时通信场景中占据重要地位。本文将结合一段实现 UDP 多发多收的 Java 代码,详细解析其实现逻辑,帮助开发者深入理解 UDP 通信的底层逻辑与…

Java学习第六十二部分——Git

目录 一、关键概述 二、核心概念 三、常用命令 四、优势因素 五、应用方案 六、使用建议 一、关键概述 提问:Git 是什么? 回答:一句话,分布式版本控制系统(DVCS),用来跟踪文件&#…

CDN和DNS 在分布式系统中的作用

一、DNS:域名系统(Domain Name System) 1. 核心功能 DNS是互联网的“地址簿”,负责将人类易记的域名(如www.baidu.com)解析为计算机可识别的IP地址(如180.101.50.242)。没有DNS&…

uniapp用webview导入本地网页,ios端打开页面空白问题

目前还没解决,DCloud官方也说不行 IOS下webview加载本地网页时,无法加载资源 - DCloud问答

软考 系统架构设计师系列知识点之面向服务架构设计理论与实践(8)

接前一篇文章:软考 系统架构设计师系列知识点之面向服务架构设计理论与实践(7) 所属章节: 第15章. 面向服务架构设计理论与实践 第3节 SOA的参考架构 15.3 SOA的参考架构 IBM的Websphere业务集成参考架构(如图15-2所示,以下简称参考架构)是典型的以服务为中心的企业集…

基于 Docker 及 Kubernetes 部署 vLLM:开启机器学习模型服务的新篇章

在当今数字化浪潮中,机器学习模型的高效部署与管理成为众多开发者和企业关注的焦点。vLLM 作为一款性能卓越的大型语言模型推理引擎,其在 Docker 及 Kubernetes 上的部署方式如何呢?本文将深入探讨如何在 Docker 及 Kubernetes 集群中部署 vL…

工业互联网六大安全挑战的密码“解法”

目录 工业互联网密码技术应用Q&A Q1:设备身份认证与接入控制 Q2:通信数据加密与完整性保护 Q3:远程安全访问 Q4:平台与数据安全 Q5:软件与固件安全 Q6:日志审计与抗抵赖 首传信安-解决方案 总…

基于springboot的在线问卷调查系统的设计与实现(源码+论文)

一、开发环境 1 Java语言 Java语言是当今为止依然在编程语言行业具有生命力的常青树之一。Java语言最原始的诞生,不仅仅是创造者感觉C语言在编程上面很麻烦,如果只是专注于业务逻辑的处理,会导致忽略了各种指针以及垃圾回收这些操作&#x…

民法学学习笔记(个人向) Part.1

民法学学习笔记(个人向) Part.1有关民法条文背后的事理、人心、经济社会基础;民法的结构民法学习的特色就是先学最难的民法总论,再学较难的物权法、合同法等,最后再学习最简单的婚姻、继承、侵权部分。这是一个由难到易的过程,尤为…