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”],如下所示。 我们可以按下面的指令规则行动:…...
代码随想录算法训练营第二十六天 | 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 软件中,而无需任何编码经验。 此外࿰…...
【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行业仅有的国家级考试。考试不受学历、专业、资历等条件限制。软考高级考试中有五大证书…...
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…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
