程序设计基础·Java学习笔记·面向对象(下)

Java程序设计基础之面向对象(下)

(补充了上的一些遗漏的知识,同时加入了自己的笔记的ヾ(•ω•`)o)

(至于为什么分P,啊大概是为了自己查笔记方便(?)应该是(〃` 3′〃))

(但是u1s1,学完了面向对象后反而更懵逼,下一步先刷算法吧,然后Java的学习也跟上,今年争取考完二级证书(o-ωq)).oO 困)

一、面向对象

(一)快捷键

(二)继承

(三)封装

(四)多态

(五)Object类

(六)关键字

(七)操作符

(八)抽象类

(九)接口

(十)内部类

一、面向对象

(一)快捷键

1.Eclipse:

(1)setter and getter 右键 + Source

2.Idea:

(1)setter and getter Alt + Insert

(二)继承

1.概念:继承是面向对象语言的重要机制。借助继承,可以扩展原有的代码,应用到其他程序中,而不必重新编写这些代码。在java语言中,继承是通过扩展原有的类,声明新类来实现的。扩展声明的新类称为子类,原有的类称为超类(父类)。继承机制规定,子类可以拥有超类的所有属性和方法,也可以扩展定义自己特有的属性,增加新方法和重新定义超类的方法。(来自百度百科)

2.在Java中,继承是一种主要思想。通过父子类的继承、抽象类的继承、接口的继承……可以通过继承来完成调用。

3.继承的方法:

(1)父子类:在面向对象(上)中,已经描述了继承的方法,通过关键字extends完成父子类的继承;

(2)接口:接口是特殊的抽象类,我们能够通过抽象类来调用方法,通过此方法调用后,只需要重写接口的内容就可以调用;

(三)封装

1.Java的封装,就是把一些非公开的块进行封装,不让使用者/调用者进行查看,常见的形式是通过修饰词的使用,如private来进行封装;

2.包装类(Wrapper)

(1)针对八种基本定义相应的引用类型——包装类(封装类)

基本数据类型 包装类 boolean Boolean byte Byte short Short int Integer long Long char Character float Float double Double

(2)装箱与拆箱

a.基本数据类型包装成包装类:装箱

b.获得包装类对象中包装的基本类型变量:拆箱

c.自动装箱

d.自动拆箱

e.将字符串转换成基本数据类型

f.将基本数据类型转换成字符串

(四)多态

1.多态性,是面向对象中最重要的概念,在Java中有两种体现:

(1)方法的重载与重写(Overload and Override);

(2)对象的多态性:可以直接应用在抽象类和接口上;

2.方法的重写:在子类中可以根据需要对从父类中继承来的方法进行改造,也称方法的重置、覆盖。在程序执行时,子类的方法将覆盖父类的方法。

注意事项 :

△ 重写方法必须和被重写方法具有相同的方法名称、参数列表和返回值类型;

△重写方法不能使用比被重写方法更严格的访问权限;

△重写和被重写的方法须同时为static的,或同时为非static的子类方法抛出的异常不能大于父类被重写方法的异常;

3.子类可看做是特殊的父类,所以父类类型的引用可以指向子类的对象:即,向上转型(upcasting);

4.一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法

5.虚拟方法调用(Virtual Method Invocation)

编译时类型和运行时类型编译时e为Person类型,而方法的调用是在运行时确定的,所以调用的是Student类的getInfo()方法。——动态绑定

当调用成员变量时,因为成员变量不具备多态性,所以引用时,我们只考虑引用变量所属类中是否有我们的属性;

而当调用成员方法时,我们在编译时,要查看引用变量所属的类中是否有所调用的方法,所有需要我们的父子类中都存在方法体,但是当我们运行时,只考虑调用的实际对象所属的类中的重写方法;

6.多态小结

(1)成员方法:

编译时:要查看引用变量所属的类中是否有所调用的方法。

运行时:调用实际对象所属的类中的重写方法。

(2)成员变量:不具备多态性,只看引用变量所属的类。

(五)Object类

1.Object类是所有Java类的根父类;

2.Object类的主要方法:

(1)public Object() # 构造方法

(2)public boolean equals(Object obj) # 对象比较

(3)public int hashCode() # 取得Hash码

(4)public String toString() # 取得地址

3.对象类型转换(Casting)

(1)基本类型数据转换:小的数据类型可以自动转换成大的数据类型;

强制类型转换:大的数据类型转换到小的数据类型则需要进行强转,表示方法为:long a = (long) b; float x = (float) y;

(2)Java对象的强制类型转化(造型)

在下图的代码中,Person类中是没有方法体getschool的,所以此时我们需要调用方法时,需要将Person e强转为Student,此时就可以调用方法getschool;

(六)关键字

1.this 关键字

(1)使用this关键字:在一个实例方法或一个构造器中,关键字this是对当前对象的引用。所谓当前对象,指的是其方法或构造器正在被调用的对象,也就是正在调用的方法或构造器所在的对象。可以通过this在一个实例方法或构造器中引用当前对象的任何成员。

(2)最经常使用this关键字的情况,是在对象的一个字段被方法或构造器的参数屏蔽时,需要调用这个被屏蔽的字段的这种情况。

(3)对构造器使用this:在一个构造器中,还可以使用this关键字来调用同一个类中的另外的构造器,这种做法称为”显式构造器调用”。

2.super 关键字

(1)在Java类中使用super来调用父类中的指定操作:

(2)super可用于访问父类中定义的属性

(3)super可用于调用父类中定义的成员方法

(4)super可用于在子类构造方法中调用父类的构造器

注意事项:

△尤其当子父类出现同名成员时,可以用super进行区分

△super的追溯不仅限于直接父类

△ super和this的用法相像,this代表本类对象的引用,super代表父类的内存空间的标识

3.this与super的区别

序号 区别 this super 1 访问属性 访问本类中的属性,如果本类没有此属性则从父类中继续查找 访问父类中的属性 2 调用方法 访问本类中的方法 直接访问父类中的方法 3 调用构造器 调用本类构造器,必须放在构造器首行 调用父类构造器,必须放在子类构造器的首航 4 特殊 表示当前对象 (/ω\)……… (/ω•\)没有啦

4.static关键字

(1)在Java中,static可以用来修饰属性、方法、代码块、内部类;

(2)类变量(class Variable):被static所修饰的变量就是类变量,他是静态的,如果不想变量被改变,那么就可以使用静态变量;

类变量(类属性)由该类的所有实例共享;类变量不需要通过实例化就可以进行使用;

(3)类方法(class Method):被static所修饰的方法就是类方法;

没有对象的实例时,可以用 类名.方法名() 的形式访问由static标记的类方法;同时,在类方法中只能访问类的static属性;

因为不需要实例化就能访问,所以类方法中不能有 thissuper 关键字;

(4)代码块中,优先执行静态代码块,其次是代码块,然后才是其他方法;

5.final关键字

(1)在Java中,final关键字用来表示”最终”的意思;

(2)final标记的类不能被继承;

(3)final标记的方法不能被子类重写;

(4)我们称final修饰的变量为常量,只能被赋值一次,名称大写;

(七)操作符

1.instanceof操作符

x instanceof A:检验x是否为类A的对象,返回值为boolean型。要求x所属的类与类A必须是子类和父类的关系,否则编译错误。如果x属于类A的子类B,x instanceof A值也为true。

要求x所属的类与类A必须是子类和父类的关系,否则编译错误;

如果x属于类A的子类B,x instanceof A值也为true;

  1. 【==】操作符 && equals操作符

(1)【==】操作符基本类型比较:只要两个变量的值相等,即为ture;

引用类型比较引用(是否指向同一个对象):只有指向同一个对象时,才返回ture;

用【==】进行比较时,符号两边的数据类型必须兼容(可自动转换的基本类型除外),否则编译出错;

(2)equals():所有类都继承了Object,也就获得了equals()方法,还可以重写;

只能比较引用类型,其对象与【==】相同,比较是否指向同一个对象;

特例:使用equals对File、String、Data及包装类来说,是比较类型及内容而不考虑引用的是否是同一个对象;

原因:在这些类中重写了Object类的equals方法。

(八)抽象类

1.用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法;

2.抽象方法:只有方法的声明,没有方法的实现;以分号结束:abstract int abstractMethod(int a);

3.含有抽象方法的类必须被声明为抽象类

4.抽象类不能被实例化。抽象类是用来作为父类被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体。若没有重写全部的抽象方法,仍为抽象类;

5.不能用abstract修饰属性、私有方法、构造器、静态方法、final的方法;

(九)接口(interfac)

1.接口是特殊的抽象类;

2.在我们进行父子类的调用时,因为Java不支持多重继承,所以我们可以通过接口进行多重的继承,只需要重写方法体即可;

3.实现接口:class 类名 implements 接口名{ }

4.一个类可以实现多个接口,通过” ,”进行多个接口的串联;接口也可以继承其他接口;

5.接口的特点:用interface来定义;

接口中的所有成员变量都默认是由public static final修饰的;

接口中的所有方法都默认是由public abstract修饰的;

接口没有构造器;

接口采用多层继承机制。

6.实现接口的类中必须提供接口中所有方法的具体实现内容,方可实例化;否则,仍为抽象类;

接口的主要用途就是被实现类实现(面向接口编程);

与继承关系类似,接口与实现类之间存在多态性;

定义Java类的语法格式:先写extends,后写implements;

(十)内部类(Inner class)

1.在类中写的类就是内部类;

2.匿名内部类:不能定义任何静态成员、方法和类,只能创建匿名内部类的一个实例;一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类;

3.内部类的作用:解决Java中不能多重继承的问题;通过内部类继承来继承多个类进行重写;

4.内部类的使用方法;

(十一)异常
1.异常类型:Error / Exception
java.lang.ArrayIndexOutOfBoundsException 数组越界
java.lang.NullPointerException 空指针异常
java.lang.ArithmeticException 错误的运算

2.抓取异常:使用 try…catch… 语句

3.在 try…catch…语句后,可添加finally语句,表示抓取异常后输出的最终的语句;

4.在捕获异常的代码块中,如果前面的代码有异常,那么就不会执行后面的代码;

5.捕获异常的方法:getMessage()方法,用来得到有关异常事件的信息;

printStackTrace()用来跟踪事件发生时执行堆栈的内容;

6.声明抛出异常

7.抛出异常需要的是:如果进行方法的重写然后抛出时,子类的抛出范围不能大于父类的抛出范围;

Original: https://www.cnblogs.com/egalehawk/p/16027815.html
Author: 愿你一生干净纯洁
Title: 程序设计基础·Java学习笔记·面向对象(下)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/581167/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Vue(十二)—组件通信

    参考文章:https://blog.csdn.net/qq_37288477/article/details/86630428 父子通信: 1.父传子props 官网demo:ht…

    Java 2023年6月13日
    072
  • 使用重试机制保证SpringBoot应用的稳定性

    前言 没有人能保证自己的系统不出错,同样,在调用第三方系统时,也不能保证能够100%的成功。 往往会因为程序逻辑、网络中断、边界值等各种各样的问题导致服务失败。 在不同的业务领域对…

    Java 2023年6月7日
    086
  • SpringBoot版不需要配置文件注解获取当前登录用户

    本文讯(2019年3月30日 飞快的蜗牛博客) 我是一个懒人,很久不写博客,想起来看到也不一定会写,只有心血来潮的时候写写,”钱塘江上潮信来,今日方知我是我&#8221…

    Java 2023年6月16日
    094
  • .NET Core 微服务架构 Steeltoe 使用(基于 Spring Cloud)

    阅读目录: 1. Spring Cloud Eureka 注册服务及调用 2. Spring Cloud Hystrix 断路器 3. Spring Cloud Hystrix 指…

    Java 2023年5月29日
    065
  • Mybatis-Plus使用@TableField实现自动填充日期

    一、前言 我们在日常开发中经常使用ORM框架,比如Mybatis、tk.Mybatis、Mybatis-Plus。不过最广泛的还是Mybatis-Plus,我们的一些表,都会有创建…

    Java 2023年6月15日
    079
  • 选择结构-Java学习日记

    /* 选择结构: 也被称为分支结构。 选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。 Java语言提…

    Java 2023年6月5日
    073
  • JVM

    JVM 一、什么是JVM 定义 Java Virtual Machine,JAVA程序的运行环境(JAVA二进制字节码的运行环境) 好处 一次编写,到处运行 自动内存管理,垃圾回收…

    Java 2023年6月8日
    066
  • [转]Spring源码解析之@Configuration

    Spring源码解析之@Configuration Original: https://www.cnblogs.com/gotodsp/p/15613221.htmlAuthor:…

    Java 2023年5月29日
    066
  • springboot集成swagger,出现 No mapping for GET /swagger-ui.html的错误

    在尝试降低springboot版本和swagger版本都无法解决这个问题后 在SpringBoot项目引入Swagger2后,在浏览器地址里输入地址:http://ip:port/…

    Java 2023年5月30日
    059
  • Java之JavaWeb项目开发开始准备

    操作系统:Mac OS 10.11.6 Tomcat版本:9.0.0.M17 前言:部署Tomcat可以参考我一年前做的笔记:《在MAC下搭建JSP开发环境》,也可以参考大神写的挺…

    Java 2023年5月29日
    077
  • AxWebBrowser,WebBrowser

    利用2005的WebBrowser我暂时无法得到postData,不知道各位TX有没好办法,记得告知。 所以暂时使用AxWebBrowser, 下面是利用2005的WebBrows…

    Java 2023年6月13日
    083
  • iOS的Runtime知识点繁杂难啃,真的理解它的思想,你就豁然开朗了

    一、Runtime 1、概念: 概念:Runtime是Objective-c语言动态的核心,即运行时。在面向对象的基础上增加了动态运行,达到很多在编译时确定方法推迟到了运行时,从而…

    Java 2023年6月16日
    069
  • 深入理解Java虚拟机——垃圾收集算法

    深入理解Java虚拟机——垃圾收集算法 分代收集理论 当前商业虚拟机的垃圾收集器,大多数都遵循了”分代收集”(Generational Collection…

    Java 2023年5月29日
    090
  • 为Eclipse创建Ant的build.xml文件编辑自动提示

    JavaEE版的Eclipse自动集成了Ant插件,但是,并没有提供Ant的DTD文件。原因在Apache官网的Ant项目下的FAQ中有解释,原文如下: **Is there a …

    Java 2023年6月8日
    055
  • SpringBoot 集成腾讯云短信服务

    开通腾讯云短信服务 注册腾讯云 个人实名认证 进入到控制台,在云产品中找到短信 默认是没有开通的,阅读服务协议后,点击开始接入 目前来说,只要实名认证过的,直接就可以开通短信服务 …

    Java 2023年5月30日
    079
  • 实现get/post请求调用第三方接口

    使用http协议中的get以及post方式对接第三方平台在工作中很常见,我所展示的已是将方法归纳好,只需要按照对接方案传递对应的参数即可。 下载地址 https://downloa…

    Java 2023年6月8日
    094
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球