狂神说java基础——面向对象编程

news/2024/4/26 17:15:47/文章来源:https://www.cnblogs.com/DuPengBG/p/16855872.html

面向对象编程(oop)

1、什么是面向对象(00)

  • 面向过程:线性思维
  • 面向对象:分类思维

​ 本质:以类的方式组织代码,以对象的形式阻止(封装)数据

  • 三大特性:封装,继承,多态

2、回顾方法的定义

方法的定义

  • 修饰符
  • 返回值类型
 /** 修饰符 返回值类型 方法名(...){*   方法体*   return 返回值;* }* 返回值类型和返回值一一对应* */public  String haibai(){return "hello,海摆";}
  • break:跳出Switch,结束循环

方法的调用

  • 静态方法
  • 非静态方法
  • 形参和实参
  • 值传递和引用传递
  • this关键字

3、 回顾方法的调用

  • 递归

创建静态方法时,直接调用即可

image-20220718190659056

当创建非静态方法时,需要先将这个类进行实例化

image-20220718190525334

  • 静态方法和非静态方法

如果是先存着去调用不存在的东西会报错,反之

//是和类一起加载的 先存在
public  static void a(){}
//类实例化之后才存在的  后存在
public  void b(){a();
}
  • 实参

//这里实际参数要和形式参数类型要一一对应

image-20220719090716387

4、类与对象

右边通过定义属性,左边对haibai进行实例化后,有输出结果,而没有实例则输出默认值

image-20220719130038326

无参构造

image-20220719165047334

有参构造

image-20220719165901020

有参无参快速创建alt+ins

5、封装

属性私有,get/set

1.提高程序安全性,保护数据

2.隐藏代码的实现细节

3.统一接口

4.系统可维护增加了

image-20220722110405994

6、继承

父类Person 子类Student

image-20220722112735560

调用say方法

image-20220722112823503

super

super注意点:

1.super调用父类的构造方法,必须在构造方法的第一个

2.super必须只能出现在子类的方法或者构造方法中

3.super和this不能同时调用构造方法

image-20220722152251924

和this不同点:

this:本身调用这个对象、没有继承也可以使用、本类的构造

super:代表父类对象的引用、只能在继承的条件下才能使用、父类的构造

7、方法重写

  • 有static时 静态方法调用类
public class B {public static  void test(){System.out.println("B=>test");}
}
public class A extends B{public static void test() {System.out.println("A=>test");}
}
public static void main(String[] args) {A a = new A(); //Alt+entera.test();B b=  new A(); b.test();
}
//结果为
A=>test
B=>test
  • 没有静态方法时,调用对象
    • 也就是没有static时只跟左边有关
public class B {public   void test(){System.out.println("B=>test");}
}
public class A extends B{public  void test() {System.out.println("A=>test");}
}
public static void main(String[] args) {A a = new A(); //Alt+entera.test();B b=  new A();//子类重写了父类的方法b.test();}
//结果为
A=>test
A=>test

重写:需要有继承关系,子类重写父类的方法

​ 1.方法名必须相同

​ 2.参数列表必须相同

​ 3.修饰符:范围可以扩大但不能缩小 public>protected>default>private

​ 4.抛出的异常:范围 可以被缩小,但不能扩大 ClassnotfoundException--> Exception(大)

重写,子类的方法和父类必要一致,方法体不同!

为什么需要重写:

​ 父类的功能,子类不一定需要,或者不一定满足

alt+insert ; override

8、多态

public class Person {}
public class Student extends Person{}
public static void main(String[] args) {//Student 能调用的方法都是自己或者继承父类的Student s1 = new Student();//父类型可以指向子类,但不能调用子类的方法  Person s2=  new Student();Object s3 = new Student();}
  • 注意事项:

    • 1.多态是方法的多态,属性没有多态

    • 2.父类和子类:有联系,类型转换异常!ClasscastException

    • 3.存在条件:继承关系,方法需要重写,父类引用指向子类对象 Father f1= new son();

      • (1) static 方法,属于类,它不属于实例
      • (2)final 常量;
      • (3)private 方法;

9、Static关键字详解

  • 静态属性属于类,为所有对象所共享

  • 非静态方法可以调用静态方法,静态方法不可调用静态方法

  • 输出

    • 静态代码块
    • 匿名代码块
    • 构造方法
  • 被final修饰的类无法被继承

  • 静态导入包

import static java.lang.Math.PI; // 静态导入包
public class Person {{// 代码块 创建对象时自动创建,在构造器之前,赋初始值System.out.println(“匿名代码块”); }static {// 静态代码块,用于初始化,在类加载时执行System.out.println(“静态代码块”); }public Person(){System.out.println(“构造方法”); }
}// ================
Person p1 = new Person();
System.out.println(“--------------”); 
Person p2 = new Person();

10、抽象类

//抽象类
public abstract class Action {//abstract,抽象方法,只有名字,没有方法的实现public abstract void dosomething();//抽象类里可以有普通方法public void run(){}
}
  • 抽象类所有的方法,继承了它的子类,都必须要重写它的方法

public  class H extends Action{@Overridepublic void dosomething() {}
  • 或者
public abstract  class H extends Action{}
  • abastract修饰方法,则该方法为抽象方法
    • abstract修饰类,则该类为抽象类
  • 抽象类不能用new关键字来创建对象,它用子类来继承
    • 抽象方法只有方法的声明,没有方法的实现,它用子类实现
  • 抽象类可以没有抽象方法,但有抽象方法的类需要声明为抽象类
    • 抽象类可以写普通方法
  • 子类继承抽象类,必须实现抽象类没有实现的抽象方法,否则子类也要声明抽象类
  • 抽象类存在构造函数
  • 抽象类就是用来封装,多态地增强代码的可扩展性

11、接口的定义与实现

//class 替换为interface
public interface Userservice {//接口中的所有定义的方法都是抽象的void add(String name);void update(String name);void delete(String name);void query(String name);
}
public interface Timeservice {void timed();
}
//实现接口的类,就需要重写接口的方法
public class Userservicelmpl  implements  Userservice,Timeservice{@Overridepublic void add(String name) {}@Overridepublic void update(String name) {}@Overridepublic void delete(String name) {}@Overridepublic void query(String name) {}@Overridepublic void timed() {}
}

1.关键字interface

2.比较

  • 普通类:只有具体实现
  • 抽象类:具体实现和规范(抽象方法)都可以
  • 接口:只有规范,自己无方法可写,约束和实现分离

3.接口

  • 所有定义方法默认都是抽象的public absteact
  • 可以多继承
  • 就是规范,定义的一组规则
  • 不能被实例化,没有构造方法
  • 必须重写接口中的方法

12、内部类

1.成员内部类

public class Outer {//定义一个私有属性private  int id=10;//定义外部类的方法public void out(){System.out.println("这是外部类的方法");}//定义内部类方法public class inner{public void in(){System.out.println("这是内部类方法");}//获得外部类的私有属性public void getID(){System.out.println(id);}}}
public class Application {public static void main(String[] args) {Outer outer = new Outer();outer.out();Outer.inner inner = outer.new inner();inner.in();inner.getID();}
}

2.静态内部类

//在上方的基础上 class前面添加static  则为内部类
//定义内部类方法public  static class inner{public void in(){System.out.println("这是内部类方法");}
}

3.局部内部类

public class Outer {
//局部内部类
public  void method(){class  Inner{public void in(){}}}
}

4.匿名内部类

public static void main(String[] args) {//没有名字初始化类,不用讲实例保存到变量中new apple().eat();
}
static class apple{public void  eat(){System.out.println("eat");}}

13、捕获和抛出异常

  • ctrl+alt+t 代码块

  • 最高异常:Throwable

  • 其次:error和Exception

  • 异常处理的五个关键字 try、catch、finally、throw、throws

    • try:监控区域
    • catch:捕获异常
    • finally:都将会执行的语句
    • throw和throws:抛出异常
public class Test {public static void main(String[] args) {int a=1;int b=0;try {System.out.println(a/b);} catch (Error e) {System.out.println("程序出错");} catch (Exception e) {System.out.println("Exception");} catch (Throwable e) {System.out.println("Throwable");} finally {System.out.println("finally");//finally可以不要,}}public void a(){b();}public void b(){a();}
}
public class Test2 {public static void main(String[] args) {try {new Test2().tt(1,0);} catch (Exception e) {System.out.println("发现异常");}}//方法中,处理不了这个异常,方法上抛出异常public  void tt(int a,int b) throws  ArithmeticException{if (b==0){throw new ArithmeticException();//主动抛出异常}}
}

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

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

相关文章

Dropzone V4.5.1 for Mac 文件拖拽工具使用教程

简介 Dropzone 是一款Mac上的文件拖拽操作增强工具,这款软件可以让我们把大部分工作都通过拖拽来完成,比如保存文本、发送邮件、FTP上传、打开应用等等,只需要将文件拖拽到菜单栏上的窗口中即可,并且我们完全可以定制化这些操作&a…

移动测试Appium安装

移动测试Appium安装 一、环境搭建 1.Java sdk安装 并配置JAVA_HOME和PATH 2.Android SDK安装 (1)解压 (2)配置ANDROID_HOME和PATH 见教程:AndroidSDK下载及安装 Android SDK 下载安装及配置 3.虚拟机安装 这里下载的…

UnityShader34:非真实感水体渲染

一、水体渲染方案 1.1 水体动画 既然是动画,必然推导公式会和时间相关联,如果不追求表现,可以使用最无脑的 sin 函数: 其中 y 值 振幅*sin(频率*(x值-相对偏移)),感觉目前手机端非真实感渲染的话感觉这一套就够了&a…

Centos下部署CodiMD

Centos下部署CodiMD安装docker安装docker-compose安装git部署CodiMDCodiMD是HackMD的自由软件版本,由HackMD团队开发并开源,具有简化功能(无需书本模式),您可以在社区中使用CodiMD,并拥有所有数据。支持浏览…

数据可视化之对外经济发展,近五年我国对外货物进出口总额持续上涨

哈喽,大家好,2021年在疫情仍在冲击全球经济之际,我国不论是在贸易规模方面,还是在国际市场份额方面皆取得进展。 下面是小编对国家统计局最新发布的报告进行报表数据处理分析后得到的数据可视化图表,展示了2021年我国对…

齐活了,Grafana 发布大规模持续性能分析开源数据库 - Phlare

Grafana Phlare 是一个用于聚合 continuous profiling(持续分析)数据的开源软件项目。Grafana Phlare 可以和 Grafana 完全集成,允许你与其他可观察信号相关联。 什么是 continuous profiling? 这个概念很有价值:Profiling 可以帮助你了解程序的资源使…

正规现货黄金中的MACD技术

MACD是整个现货黄金交易平台上面最受投资者欢迎的技术指标,所以我们这次来谈谈,这个全球使用率最高的技术分析指标。 MACD 的全名为 Moving Average Convergence / Divergence ,它是一种移动平均线的波动指标,不过它使用的不是普通…

mysql数据库中的插入数据insert,中文字符集配置

目录 关键字insert 常见错误类型 指定一列插入数据 多列同时插入 插入效率问题 全列查询select * 查看数据库字符集类型: 更改数据库字符集 C:create 新增D:update 修改R:retrieve 查询D:delete 删除进行增删查…

Redis客户端RedisTemplate入门学习

Redis的Java客户端 Jedis客户端入门 1.引入依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.7.0</version></dependency>2.建立连接并操作 //建立连接BeforeEachvoid setUp()…

TIDB 性能测试(TIUP-TPCC)

New-Order&#xff1a;客户输入一笔新的订货交易&#xff1b; Payment: 更新客户账户余额以反映其支付状况; Delivery: 发货(模拟批处理交易); Order-Status: 查询客户最近交易的状态&#xff1b; Stock-Level: 查询仓库库存状况&#xff0c;以便能够及时补货。…

Android Studio入门之常用布局的讲解以及实战(附源码 超详细必看)(包括线性布局、权重布局、相对布局、网格布局、滚动视图 )

运行有问题或需要源码请点赞关注收藏后评论区留言 线性布局LinearLayout 顾名思义&#xff0c;线性布局像是用一根线把它的内部视图串起来&#xff0c;故而内部视图之间的排列顺序是固定的&#xff0c;要么从左到右&#xff0c;要么从上到下排列。通过属性android:orientation…

学完Python,不做程序员,只接兼职,哎,就是玩儿

现在这个时代&#xff0c;人人开始追求做斜杠青年&#xff0c;多方面开展副业&#xff0c;赚取几份工资。有很多朋友就抓住了Python的风口&#xff0c;靠着Python兼职月入一万。那么学完Python&#xff0c;有哪些可以做的兼职呢&#xff1f; 一、闲暇时间&#xff0c;接自由单…

DEFORMABLE DETR:用于端到端对象检测的可变形Transformer

论文&#xff1a;《DEFORMABLE DETR: DEFORMABLE TRANSFORMERS FOR END-TO-END OBJECT DETECTION》 论文链接&#xff1a;https://arxiv.org/pdf/2010.04159.pdf 代码链接&#xff1a;https://github.com/fundamentalvision/Deformable-DETR 最近在目标检测领域提出了DETR&…

猿创征文|keil和Proteus使用教程

&#x1f4ac;推荐一款模拟面试、刷题神器 、从基础到大厂面试题&#xff1a;&#x1f449;点击跳转刷题网站进行注册学习 目录 一、keil的使用教程 1、新建一个项目 2、选择单片机型号 3、新建工程文件 二、Proteus的使用教程 1、新建一个工程 2、单片机型号及元器件的…

海藻酸钠-四嗪|TZ-PEG-alginate|海藻酸钠-peg-四嗪TZ

海藻酸钠-四嗪|TZ-PEG-alginate|海藻酸钠-peg-四嗪TZ 中文名称&#xff1a;海藻酸钠-聚乙二醇-四嗪 英文名称&#xff1a;TZ-PEG-alginate 纯度&#xff1a;95% 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 外观:固体或粘性液体&#xff0c;取决于分子量 …

【Web-CSS基础】CSS的三大特性、定位方式、静态定位、相对定位、绝对定位、浮动定位、固定定位、设置缩放动画

目录 CSS的三大特性 定位方式 静态定位 相对定位 绝对定位(absolute) 固定定位 浮动定位 粘性定位(sticky) 定位总结 综合练习 效果展示 目录 CSS的三大特性 定位方式 静态定位 相对定位 绝对定位(absolute) 固定定位 浮动定位 粘性定位(sticky) 定位总…

高分辨空间代谢组学测试的样品要求以及常见问题

高分辨空间代谢组学可实现定量检测&#xff0c;亦可定性检测&#xff0c;且可一次可同时检出多种类型的化合物&#xff0c;包括脂类、小分子代谢物、蛋白质、药物及其载体等&#xff0c;并且能够呈现出这些物质的空间分布情况。高分辨空间代谢组学测试的样品要求&#xff1a; …

五高引动三层需求 华为全屋智能3.0引领智能家居新进化

昨天,华为全屋智能3.0发布。从2020年11月发布全屋智能开始,华为不断迭代产品和体验,是全屋智能快速进化的主要推动者之一。这一次华为全屋智能3.0带来“高可靠、高掌控、高感官、高心意、高智能”的五高理念,更清晰定义了全屋智能,或者说空间智能该有的样子,这也将引领产…

GitHub榜一竟是Alibaba内部被疯狂转载的Spring全能指南?

spring相信大家都不会陌生! Spring 是目前主流的 Java Web 开发框架&#xff0c;是 Java 世界上最为成功的框架。该框架是一个轻量级的开源框架&#xff0c;具有很高的凝聚力和吸引力。 Spring 由 Rod Johnson 创立&#xff0c;2004 年发布了 Spring 框架的第一版&#xff0c;其…

自动控制原理 - 2 控制系统的数学模型 节2.7-2.10

2 控制系统的数学模型2.7 结构图的等效变换准则2.8 结构图等效变换的应用2.9 信号流图2.10 梅逊公式 2 控制系统的数学模型 2.7 结构图的等效变换准则 结构图没有直接给出系统输入与输出之间的定量关系。如何得到系统输入输出之间的传递函数&#xff0c;从而便于进一步分析系…