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

java08-面向对象3

一:static 关键字:静态的

1.可以用来修饰的结构:主要用来修饰类的内部结构

属性、方法、代码块、内部类

2. static 修饰属性:静态变量(或类变量)

2.1 属性,是否使用static修饰,又分为静态属性VS非静态属性(实例变量)

  * 实例变量:我们创建了类的多个对象,每个对象都独立的拥有一套类中的非静态属性,当修改其中一个对象中的非静态属性时,不会导致其他对象中同样的属性值的修改

*静态变量:我们创建了类的多个对象,多个对象共享同一个静态变量,当通过某一个对象修改静态变量时,会导致其他对象调用此静态变量时,是修改过了的。

2.2 static 修饰属性的其他说明:

1)静态变量随着类的加载而加载,可以通过类.静态变量的方式进行调用

2)静态变量的加载要早于对象的创建

3)由于类只会加载一次,则静态变量在内存中也只会存在一份:存在方法区的静态域中

4)静态属性的举例:System.out ;  Math.PI;

3.静态变量的内存解析:

 4.static 修饰方法:静态方法

1.随着类的加载而加载,可以通过类.方法的方式进行调用

2.类可以调用静态方法,不能调用非静态方法;对象即可以调用静态方法也可以调用非静态方法

3.静态方法中,只能调用静态的方法或属性;非静态方法中,即可以调用静态方法或属性,也可以调用非静态方法或属性

5.static 注意点:

1.在静态的方法内,不能使用this关键字、super关键字

2.关于静态属性或方法的使用,从生命周期的角度去理解

6.开发中,如何确定一个属性是否要声明为static的?

1.属性是可以被多个对象所共享的,不会随着对象的不同而不同

2.类中常量也常常声明为static

开发中如何确定一个方法是否要声明为static的?

》操作静态属性的方法,通常设在为static的

》工具类中的方法,习惯声明为static的 比如:Math、Arrays、Collections

7.例:统计创建圆的个数和计算面积

package com.cn.staticuse;
//创建圆类
class Circle{
    private double radius;
    private int id;
    //定义static 属性
    public static int init=1001;
    public static int total;
    
    public double getRadius() {
        return radius;
    }
    public void setRadius(double radius) {
        this.radius = radius;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }//初始化静态属性
    public Circle() {
        id=init++;
        total++;
    }
    public Circle(double radius)
    {this();
    this.radius=radius;
        
    }//计算面积
    public  double findArea() {
        return Math.PI*radius*radius;
    }
}
public class TestStaticCirlce {
    public static void main(String[] args) {
        Circle c1=new Circle();
        c1.setRadius(2);
        Circle c2=new Circle();
        c2.setRadius(3);
        Circle c3=new Circle(4);
        System.out.println(c1.findArea());
        System.out.println(c2.findArea());
        System.out.println(c3.findArea());
        System.out.println(Circle.total);
    }

}
二:单例设计模式

1概念:

设计模式:是在大量的实践中总结和理论化之后优选的代码结构、编程风格

单类设计模式:所谓类的单类设计模式,就是采取一定的方法保证在整个的软件系统中对

某个类只能存在一个对象实例

2:具体实现

>饿汉式:

class Bank{

//1.私有类的构造器

private Bank(){}>

//2.内部创建类的对象

private  static Bank instance= new Bank();

//3.提供公共静态方法 返回类的对象

public  static  Bank getInstance(){

return instance;

}

}

>懒汉式:

class Order(){

//1.私有化类的构造器

private Order(){}

//2.声明当前类的对象没有初始化

private static Order instance=null;

//3.声明public,static 的返回当前类的对象的方法

public   static  Order getInstance(){

if(instance==null){

instance =new Order();

}

return  instance;

}

3:两种方式比对:

饿汉式:

>坏处:对象加载时间过长.

>好处:饿汉式式线程安全的

懒汉式:

>好处:延迟对象的创建

目前的写法坏处:线程不安全

三:代码块 :放在{}内的内容

1.代码块的作用: 用来初始化类,对象的信息

2.分类:代码块要是使用修饰符,只能使用static

分类:静态代码块VS 非静态代码块

3.静态代码块:

>内部可以输出语句

>随着类的加载而执行,而且只执行一次

*作用:初始化类的信息

*如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行

* 静态代码块的执行要优于非静态代码块的执行

*静态代码块内只能调用静态的属性,静态的方法,不能调用非静态的结构

4.非静态代码块:

>内部可以输出语句

>随着对象的创建而执行

>每创建一个对象,就执行一次非静态代码块

>作用:可以在创建对象时,对对象的属性进行初始化

>如果一个类中定义了多个非静态的代码块,则按照声明的先后顺序执行

>非静态代码块内可以调用静态的属性,静态的方法或非静态的属性,非静态的方法

5.实例化子类的对象时,涉及到父类/子类的静态代码块/非静态代码块,构造器的执行

由父及子,静态先行

四:final :最终的

1.可以用来修饰:类,方法,变量

2具体的:

>final 用来修饰一个类:此类不能被其他类所继承 ,比如:String 类, System类,StringBuffer类

>final用来修饰方法:表明此方法不可以被重写 比如:Object类中的getClass();

> final 用来修饰变量:此时的变量 就称为一个常量

* final修饰属性: 可以考虑赋值的位置:显示初始化,代码块中初始化,构造器中初始化

*final修饰局部变量:

尤其是使用final修饰形参时,表明此形参是一个常量.当我们调用此方法时,给常量形参赋一个实参.一旦赋值后,就只能在方法体内使用此形参,但不能进行重新赋值.

static final  用来修饰属性:全局常量

五:抽象类与抽象方法:

abstract:抽象的

1.可以用来修饰类 ,方法

2:具体的:

>abstract 修饰类:抽象类

* 此类不能实例化

*抽象类中一定有构造器,便于子类实例化时调用

*开发中都会提供抽象类的子类,让子类对象实例化,完成相关的操作-->抽象使用的前提:继承性

>abstract 修饰方法:抽象方法

*抽象方法只有方法的声明,没有方法体

*包含抽象方法的类,一定是一个抽象类,反之,抽象类中可以没有抽象方法

*若子类重写了父类中的所有抽象方法后,此子类方可实例化

*若子类没重写父类中的所有抽象方法,则子类也是一个抽象类,需要使用abstract修饰

3.注意点:

*abstract 不能用来修饰:属性/构造器等结构

*abstract 不能用来修饰私有方法,静态方法,final的方法,final的类

4.abstract的应用举例:

举例一:

public  abstract class Vehicle{

public abstract double calcFuelEfficiency();//计算燃料效率的抽象方法

public abstract double calcTripDistance();//计算行驶距离的抽象方法

}

public class Truck extends Vehicle{

public abstract double calcFuelEfficiency(){//写出计算卡车燃料效率的具体方法}

public abstract double calcTripDistance(){//写出计算卡车行驶距离的具体方法}

}

public class RiverBarge extends Vehicle{

public abstract double calcFuelEfficiency(){//写出计算驳船燃料效率的具体方法}

public abstract double calcTripDistance(){//写出计算驳船行驶距离的具体方法}

}

举例二:

abstract class GeometricObject{

public abstract double  findArea();

}

class  Circle  extends GeometricObject{

private double radius;

public double findArea(){

return 3.14*radius*radius;

}

}

举例三:IO流中InputStream和OutputStream

六:内部类:

1.定义:java 中允许将一个类A声明在另一个类B中,则类A就是内部类,类B称为外部类

2.内部类的分类:

成员内部类(静态,非静态)VS局部内部类(方法内,代码块内,构造器内)

3.成员内部类的理解:

一方面,作为外部类的成员:

>调用外部类的结构

>可以被static修饰

>可以被4种不同的权限修饰

另一方面,作为一个类:

>类内可以定义属性/方法

>可以被final 修饰,表示此类不能被继承.言外之意,不使用final,就可以被继承

>可以被abstract 修饰

4.成员内部类:

如何创建成员内部类的对象(静态的,非静态的)

//创建Dog的实例(静态的成员内部类) ,Person 为外部类

Person.Dog dog = new Person.Dog();

dog.show

//创建Bird的实例(非静态的成员内部类)

Person p =new Person();

Person.Bird bird = p.new Bird();

5. 如何在成员内部类种调用外部类的结构

class  Prerson{

String name ="小明";

public void eat(){}

class Bird{

String name="杜鹃";

public void  display(String name){

System.out.println(name);//方法的形参

System.out.println(this.name);//内部类的属性

System.out.println(Person.this.name);//外部类的属性

}

}

6.局部内部类的使用:

//创建一个方法内的内部类
        //方式一:
        public Comparable  getComparable() {
            class MyComparable implements Comparable{

                @Override
                public int compareTo(Object o) {
                    // TODO Auto-generated method stub
                    return 0;
                }
                
                
            }
            //return new MyComparable();
            
            
        //方式二:
        //创建接口的匿名实现类的匿名对象
        return  new Comparable() {

            @Override
            public int compareTo(Object o) {
                // TODO Auto-generated method stub
                return 0;
            }

相关文章:

java08-面向对象3

一:static 关键字:静态的 1.可以用来修饰的结构:主要用来修饰类的内部结构 属性、方法、代码块、内部类 2. static 修饰属性:静态变量(或类变量) 2.1 属性,是否使用static修饰,又分为静态属…...

【Spark分布式内存计算框架——Spark Core】8. 共享变量

第七章 共享变量 在默认情况下,当Spark在集群的多个不同节点的多个任务上并行运行一个函数时,它会把函数中涉及到的每个变量,在每个任务上都生成一个副本。但是,有时候需要在多个任务之间共享变量,或者在任务(Task)和…...

C++多态常见面试题

1.什么是多态 简单点说,就是多种形态,具体就是完成某个行为,当不同的对象去完成时产生的不同形态。多态分为静态多态和动态多态,静态多态一般指的是函数重载,在编译阶段通过函数名修饰规则,不同类型调用不同…...

字母板上的路径 题解,力扣官方出来挨打(小声)

字母板上的路径 我们从一块字母板上的位置 (0, 0) 出发,该坐标对应的字符为 board[0][0]。 在本题里,字母板为board [“abcde”, “fghij”, “klmno”, “pqrst”, “uvwxy”, “z”],如下所示。 我们可以按下面的指令规则行动&#xff1a…...

代码随想录算法训练营第二十六天 | 39. 组合总和,40.组合总和II,131.分割回文串

一、参考资料组合总和题目链接/文章讲解:https://programmercarl.com/0039.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8C.html 视频讲解:https://www.bilibili.com/video/BV1KT4y1M7HJ 组合总和II题目链接/文章讲解:https://programmercarl.com/004…...

vueday01-脚手架安装详细

一、vue脚手架安装命令npm i -g vue/cli 或 yarn global add vue/cli安装上面的工具,安装后运行 vue --version ,如果看到版本号,说明安装成功或 vue -V工具安装好之后,就可以安装带有webpack配置的vue项目了。创建项目之前&#…...

初识cesium3d(一)

使用ViteVue3.2Cesium。Vite需要Node.js版本14.18及以上版本。Vite命令创建的工程会自动生成vite.config.js文件,来配置一些相关的参数。 1、使用Vite创建vue3项目 # npm npm init vitelatest cesium-app -- --template vue # yarn yarn create vite cesium-app…...

点云转3D网格【Python】

推荐:使用 NSDT场景设计器 快速搭建 3D场景。 在本文中,我将介绍我的 3D 表面重建过程,以便使用 Python 从点云快速创建网格。 你将能够导出、可视化结果并将结果集成到您最喜欢的 3D 软件中,而无需任何编码经验。 此外&#xff0…...

【OpenCV图像处理系列一】OpenCV开发环境的安装与搭建(Ubuntu + Window都适用)

🔗 运行环境:OpenCV,Ubuntu,Windows 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 #### 防伪水印——左手の明天 #### &#x…...

【代码随想录】-动态规划专题

文章目录理论基础斐波拉契数列爬楼梯使用最小花费爬楼梯不同路径不同路径 II整数拆分不同的二叉搜索树背包问题——理论基础01背包二维dp数组01背包一维数组(滚动数组)装满背包分割等和子集最后一块石头的重量 II目标和一和零完全背包零钱兑换 II组合总和…...

c++数据类型 输入输出

C++语法 //常用包: iostream:cin cout endl cstdio:scanf printf algorithm:max min reverse swap cstring:memset memcpymemset(a,-1,sizeof a) 填充数组memcpy(b,a,sizeof a) 将a数组复制到b数组,长度是a数组字节长度 cmath:sin sqrt pow abs fabs编程是一种控制计…...

【设计模式-11】责任链模式

认识设计模式(十一)---责任链模式【一】责任链模式【二】介绍(1)意图(2)主要解决(3)何时使用(4)如何解决(5)关键代码(6&am…...

SpringBoot+Vue实现智能物流管理系统

文末获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏…...

【MT7628】MT7628如何修改串口波特率、调试串口物理口、使用UART3口

环境说明 sdk版本:Mediatek_ApSoC_SDK_4320_20150414.tar.bz2 芯片方案:MT7628A Uboot修改串口波特率方法 修改rt2880.h文件 修改include/configs/rt2880.h文件CONFIG_BAUDRATE宏的值 - #define CONFIG_BAUDRATE 57600 +#define CONFIG_BAUDRATE 115200 Kernel中修改串口波特…...

css盒模型介绍

在使用CSS进行网页布局时,我们一定离不开的一个东西————盒子模型。盒子模型,顾名思义,盒子就是用来装东西的,它装的东西就是HTML元素的内容。或者说,每一个可见的 HTML 元素都是一个盒子,下面所说的盒子…...

onetab 谷歌插件历史数据清除

文章目录方法1:测试也可以步骤1:批量执行点击步骤2:python 脚本模拟点击确定操作方法2:成功【推荐】步骤1:修改confirm,类似于hook操作步骤2:批量点击删除操作:onetab 谷歌插件历史数…...

GRBL源码简单分析

结构体说明 GRBL里面的速度规划是带运动段前瞻的,所以有规划运动段数据和微小运动段的区分 这里的“规划运动段”对应的数据结构是plan_block_t,前瞻和加减速会使用到,也就是通过解析G代码后出来的直接直线数据或是圆弧插补出来的拟合直线数据…...

第一部分:简单句——第一章:简单句的核心——二、简单句的核心变化(谓语动词的情态)

二、简单句的核心变化 简单句的核心变化其实就是 一主一谓(n. v.) 表达一件事情,谓语动词是其中最重要的部分,谓语动词的变化主要有四种:三态加一否(时态、语态、情态、否定),其中…...

软考高级考试中有五大证书,其中哪个更值得考?

计算机软考属于专业技术人员职业资格水平评价类,是职业资格、专业技术资格(职称)和专业技术水平"三合一"的考试,是目前IT行业仅有的国家级考试。考试不受学历、专业、资历等条件限制。软考高级考试中有五大证书&#xf…...

FlexRay™ 协议控制器 (E-Ray)-04

网络管理 累积的网络管理 (NM) 向量位于网络管理寄存器 1 到网络管理寄存器 3 (NMVx (x = 1-3)) 中。【The accrued Network Management (NM) vector is located in the Network Management Register 1 to Network Management Register 3 (NMVx (x = 1-3)).】 网络管理向量 x…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求&#xff…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

Vue3中的computer和watch

computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...

Linux安全加固:从攻防视角构建系统免疫

Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...