java成员方法的一般格式为_Java基本知识(四)

一、二维数组

1、定义方式

m:代表当前二维数组中有多少个一维数组;n:代表每个一维数组的长度

(1)数据类型[][] 数组名=new 数据类型[m][n]

(2)数据类型[][] 数组名=new 数据类型[m][ ],只给定m个一维数组,每个一维数组长度动态给定。

(3)数据类型[][] 数组名={{元素1,元素2,......}...{......}},静态初始化。

(4)数据类型[] 数组名[]=new 数据类型[m][n]

(5)数据类型 数组名[][]=new 数据类型[m][n]

例如:

f46d6a7e244a7ad5021fcf0f0e8d130e.png

运行结果:

0b78df345257acbb810d3deb7bfeb0e2.png

二、代码块

(1)概述:用{}括起来的统称为代码块。

(2)分类及其特点:

A、局部代码块:在main()方法里,限定变量的生命周期,外部不能访问局部代码块中的变量;

B、构造代码块:在一个类的成员方法中,用{}括起来,可将多个方法中相同代码块放到构造代码块中,对对象进行初始化,在每次执行构造方法之前,先执行构造代码块;

C、静态代码块:在一个类的成员位置中,用{}括起来,被Static修饰,一般情况下,用于给类进行初始化,并且只能执行一次。

(3)静态代码块,构造代码块,构造方法的执行流程:静态代码块>构造代码块>构造方法。

例如:

65630d787debd9537620aa89b243808e.png

三、继承

1、概述:多个类存在相同属性或行为时,将这些内容抽取到一个单独的类中,多个类无需再定义这些属性或行为,只需要继承那个类即可。其中被继承的类称为父类、基类或超类,继承的类称为子类或派生类。

2、关键字:extends。

3、子类继承格式:

Class 子类名 extends 父类名{......}

4、设计原则:高内聚低耦合。内聚是指实现一个功能的能力(能用一个类完成的事情尽量不要用多个类去完成),耦合指类与类之间的关系,尽量降低耦合性。

5、继承特点:

(1)只支持单继承,不支持多继承(一个类只能有一个父类,不能有多个父类);

(2)支持多层继承(继承体系)。例如:

Class A{}

Class B extends A{}

Class C extends B{}

(3)子类继承父类,是继承了父类的所有成员(成员变量、成员方法,包括私有),但子类不能直接访问父类的私有成员,只能通过父类的公共访问方法间接的让子类去访问。

6、注意事项:

(1)子类可继承父类所有成员(成员方法、成员变量),但是父类中的私有成员,子类只能通过在父类中创建公有方法间接去访问,不能直接去访问;

(2)子类不能继承父类的构造方法,但可通过super关键字去访问父类构造方法;

(3)不能为部分功能而去使用继承,当类与类之间的关系体现的是“is a”的时候使用继承。

(4)例如:

0a554a64c0da51df8eb87f30bf5868d8.png

6c5f43a061fd71036fc5796fc177f3ef.png

7、super关键字

(1)super代表父类的空间标识(即父类的引用或父类的对象)。

(2)super与this类似,区别如下:

this:表示对本类的引用。

Super:代表父类存储空间的标识(可理解为父类引用)。

(3)用法(this与super均可如下使用):

A、访问成员变量:this.成员变量名、super.成员变量名

B、访问构造方法:无参:this()、super();有参:this(...)、super(...)

C、访问成员方法:this.成员方法()、super.成员方法()

8、继承中成员变量的关系

在子类方法中访问一个变量:(1)首先在子类局部范围找;(2)其次在子类成员范围找;(3)最后在父类成员范围找(绝对不能访问到父类局部范围)。

当子类中定义的成员变量与父类中的成员变量名称一致时,若用子类的方法访问该成员变量时,访问的是子类的成员变量。

9、继承中成员方法的关系

(1)子类访问父类,当成员方法名不一致的情况下,分别调用。

(2)当子类中成员方法名与父类中成员方法名一致的情况下:先在子类中的成员方法找,若有则调用,若无,则在父类中的成员方法找。

10、继承中构造方法的关系

(1)子类中所有的构造方法默认都会访问父类中空参数的构造方法。子类会继承父类中的数据,可能还会使用父类中的数据,所以子类初始化前一定要先完成父类数据的初始化,为实现这个效果,在子类构造方法的第一条语句上都默认有一个super()。

(2)若父类中没有构造方法,则:a、提供父类的构造方法;b、子类通过super关键字去显示访问父类其他的带参构造方法;c、子类通过this调用本类的其他构造方法(有参构造),间接访问父类的带参构造方法(子类必须有一个带参构造方法或无参构造方法,让父类进行初始化。

(3)注意:super和this都默认在构造方法中的第一句且必须在第一句,否则会有父类数据的多次初始化,可省略。

11、继承中初始化

(1)初始化方式:分层初始化。

(2)初始化顺序:子类继承父类,父类先进行初始化,子类再进行初始化。

(3)例如:

dacbb3f70253f956b999c186ae8e4813.png

12、继承优点

(1)提高了代码的复用性(多个类相同的成员放在同一个类中);

(2)提高了代码的维护性(若功能代码需要修改,修改一次即可);

(3)多态的前提,让类与类之间产生了关系。

四、多态

1、多态概述:多态是指允许不同类的对象对同一消息作出响应。即同一消息可根据发送对象的不同而采用多种不同的行为方式(发送消息指方法调用)。

2、多态前提

(1)必须有继承关系;

(2)必须有方法重写(方法覆盖);

(3)必须有父类的应用指向子类对象(向上转型):父类名 对象名=new 子类名();。

3、多态中的访问特点

(1)成员变量:编译看左,运行看左;

(2)成员方法(非静态):编译看左,运行看右(存在方法重写);

(3)成员方法(静态):编译看左,运行看左(静态和类相关,算不上方法重写);

(4)构造方法:构造方法无论是子类还是父类,都是对对象进行初始化。

4、向上转型/向下转型

(1)向上转型:将父类的引用指向子类对象,父类名 父类引用=new 子类名()。

(2)向下转型:将子类的应用指向父类引用,子类名 子类引用=(子类名) 父类引用,向下转型前提是必须有父类引用,若使用不当,会出现运行时期异常,即ClassCastException。

(3)举例:

259b35c3b13d6d361258f62e2430d874.png

5、多态优势

(1)提供代码的复用性,由继承保证;

(2)提供代码扩展性,由多态保证。

6、多态弊端

(1)弊端:无法访问子类的特有功能。

(2)解决方案:利用向下转型,即将子类的应用指向父类引用,子类名 子类引用=(子类名) 父类引用,向下转型前提是必须有父类引用,若使用不当,会出现运行时期异常,即ClassCastException。

7、final关键字

(1)概述:final,最终的,终态的(不能被修改)。

(2)作用:可修饰类、成员方法、变量。

(3)特点:a、可修饰类,但该类不能被继承,所以声明类时不能和abstract同时存在;b、可修饰成员方法,但成员方法不能被重写;c、可修饰变量,此时变量为常量,不能被修改;d、被final修饰只能赋值一次;e、被final修饰时进行初始化和赋值是在使用之前;f、final既可修饰基本数据类型,也可修饰引用数据类型,若修饰基本数据类型,基本数据类型的值不可被改变,若使用引用数据类型,引用数据类型的地址值不能被改变,但堆内存中的成员变量值可改变。

(4)final关键字的面试题:

面试题:final、finally、finalize三者区别?

回答:A、final修饰符(关键字),主要用来修饰类、成员方法,变量等,表示终态的,最终的。主要作用a、可修饰类,但该类不能被继承,所以声明类时abstract不能和final同时存在;b、可修饰成员方法,但成员方法只能使用不能被重写;c、可修饰变量,此时变量为常量,不能被修改而且必须在声明时给出变量的初始值。

B、finally是在异常处理时提供finally块来执行任何操作。无论有无异常抛出、捕获,finally块都会被执行。所以在代码逻辑块中若有无论发生什么都必须执行的代码,就放在finally块中。

C、finalize是方法名。Java技术允许使用finalize()方法在垃圾回收器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。该方法在Object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者被执行的其他清理工作。Finalize()方法是在垃圾回收器删除对象之前对这个对象调用的。

五、抽象类

1、概述:如果一个类中有一个方法声明抽象功能(抽象方法),则这个类定义为抽象类。其中一个类若有抽象方法,则这个类一定为抽象类;抽象类中不一定都是抽象方法。

2、关键字:abstract

3、抽象类的子类

(1)当子类为具体类时,子类必须实现父类中的抽象功能。

(2)当子类为抽象类时,无意义,不能实例化,不能创建对象。

4、特点:抽象类不能直接实例化,即不能创建对象。

5、抽象类成员特点

(1)成员变量:可以是常量,也可以是变量。

(2)成员方法:可以有抽象方法,也可以有非抽象方法。

(3)构造方法:可以有无参构造方法,也可以有有参构造方法,作用:给对象进行初始化。

6、不能与abstract共存的关键字:private、final、static。

7、举例:抽象类:

d9496eed1fb985f6adbf5916ac3c131a.png

子实现类:

646ee35b16cea5ef3d107c2948ba92b9.png

测试类:

f7b7799b4943aa4b207a76495c24e55e.png

六、接口

1、概述:接口是事物扩展×××的一个体现。

2、关键字:interface

3、格式:interface 接口名{//抽象功能}

4、接口的子实现类格式:class 类名+impl implements 接口名{}

5、特点:不能实例化。

6、接口成员特点

(1)成员变量:是一个常量,不能修改,并且有默认修饰符public static final;

(2)构造方法:接口不存在构造方法;

(3)成员方法:不能有方法体,都是抽象方法,有默认修饰符:public abstract。

7、接口、类的关系

(1)类与类之间的关系:继承关系,只支持单继承,不支持多继承,可以多层继承。

(2)类与接口的关系:实现关系,一个类继承另一个类的同时,还可以实现多个接口。

(3)接口与接口的关系:是一种继承关系,既可以单继承,也可以多继承。

8、接口与抽象类的区别

(1)成员区别

成员变量:

抽象类:既可以常量,也可以是变量。

接口:只能是常量,默认的修饰符:public static final

构造方法:

抽象类:有构造方法,无参/有参 (给对象进行初始化的)。

接口:无构造方法。

成员方法:

抽象类:可以有抽象方法,也可以有非抽象方法。

接口:只有抽象方法 ,默认的修饰符:public abstract

(2)类与类/类与接口/接口与接口关系的区别

类与类之间的关系:继承关系,只支持单继承,不支持多继承,可以多层继承。

类与接口的关系:实现关系,一个类继承另一个类的同时,还可以实现多个接口。

接口与接口的关系:是一种继承关系,既可以单继承,也可以多继承。

接口1 extends 接口2,接口3...接口 n

(3)设计原则的区别

抽象类:继承关系,体现的是一种"is a"的关系(A是B的一种)。

接口:类和接口,实现关系,体现的是一种" like a"的关系(扩展功能)。

9、实际开发中使用频率

(1)接口多态:使用最多。

(2)抽象类多态:比较多。

(3)具体对象的创建:经常会使用。

10、举例

抽象类:

4c5e341f126d0886e6b378bbb6874ae4.png

子实现类学生:

bab17e062561a33a8e4a0b022de9d3a0.png

子实现类老师:

2e7d9ea911581fb09272b760ac4237bd.png

接口+测试:

11529b12383a3bb01a26c016fe8b018f.png

七、内部类

1、概述:在B类内部定义A类,则A类为B类的内部类。

2、内部类访问外部类:内部类可直接访问外部类的成员,包括私有成员。

3、外部类访问内部类:通过创建内部类对象的方式间接访问。

访问格式:外部类名.内部类名 对象名=外部类对象.内部类对象。

例如:

4f6b94fd22f641fb87e9f933d190fc6f.png

4、分类

(1)成员内部类:在外部类的成员位置。可直接访问外部类的成员,包括私有成员。

成员内部类修饰符:A、private:(作用)保证了数据的安全性。B、static:把静态内部类看成外部类成员,其特点是静态内部类访问外部类数据,该数据必须用static修饰。

例如:

1c70cb8f721fcf623bf1e54d76f0332c.png

(2)局部内部类:在外部类的局部位置。可访问外部类的成员,包括私有。在外部类的局部位置去访问内部类的成员方法时,需要在局部位置创建内部类对象,通过对象去访问。

例如:

2923b4458f5d0b0d2d063edcfd48805d.png

(3)匿名内部类

A、前提:有类(该类可以是具体类也可以是抽象类)或接口。

B、格式:new 类名或接口名{ 方法重写();}

C、本质:继承了该类或实现了该接口子类对象。

D、匿名内部类面试题:补全代码,在控制台上输出(“Hello World”)。截图如下:

9cde496a366c7b77cddb44271120a3c9.png

八、形式参数与返回值

1、概述:形式参数是基本类型,对实际参数无影响;形式参数是引用类型(类、抽象类、接口),影响实际参数,情况如下。返回值是基本类型时,用对应的基本类型接收数据即可;返回值若为引用类型,情况如下。

2、形式参数为具体类:需要提供该类对象。

返回值:该类对象。

例如:

090ad8ed0a8c8412b28fbf23e4d75d35.png

3、形式参数为接口:需要提供接口的子实现类,通过子实现类进行实例化(接口多态)。

例如:

16e0cf5e49e62c46a76c3bbfc6ec92e7.png

4、形式参数为抽象类:需要提供该抽象类的子类,以抽象类多态的形式创建对象。

返回值:需要当前抽象类的子类对象(抽象类多态)。

例如:

e59bb7e387740efd26343eda30d44043.png

九、overload与override区别

(1)overload:方法重载,方法名一样,参数不同(个数或类型不同),与返回值无关。

(2)override:方法重写,子类定义一个与父类一样的方法声明,继承中使用。

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

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

相关文章

免费的定时任务托管 clock.sh

自己有很多定时任务要跑,所以之前搞了一个定时运行的系统。 在 V2EX 看到很多有类似需求的朋友: https://www.v2ex.com/t/252810https://www.v2ex.com/t/448726https://www.v2ex.com/t/579740https://www.v2ex.com/t/241229https://hk.v2ex.com/t/1134…

vCenter Server Appliance(VCSA )6.7部署指南

VCSA 6.7版本于2018年4月17日提供下载,同时发布的还有ESXi 6.7,根据官方文档,6.7版本升级主要为了发布vSAN 6.7版本。 第1步,下载VMware-VCSA-all-6.7.0-8217866文件,用虚拟光驱挂载或者解压运行,选择“安…

Ansible无敌详细入门教程

Ansible 是什么 ? ansible架构图 ansible特性 模块化:调用特定的模块,完成特定的任务; 基于Python语言研发,由Paramiko, PyYAML和Jinja2三个核心库实现; 部署简单:agentless; 支持自定义模…

Nginx学习笔记(五) 源码分析内存模块内存对齐

Nginx源码分析&内存模块 今天总结了下C语言的内存分配问题,那么就看看Nginx的内存分配相关模型的具体实现。还有内存对齐的内容~~不懂的可以看看~~ src/os/unix/Ngx_alloc.h&Ngx_alloc.c 先上源码: /** Copyright (C) Igor Sysoev* Copyright (C…

reactor p java_Java反应式框架Reactor中的Mono和Flux

1. 前言最近写关于响应式编程的东西有点多,很多同学反映对Flux和Mono这两个Reactor中的概念有点懵逼。但是目前Java响应式编程中我们对这两个对象的接触又最多,诸如Spring WebFlux、RSocket、R2DBC。我开始也对这两个对象头疼,所以今天我们就…

Visual Studio 20xx试用版升级为正式版(WIN7同样有效)图解、附带序列号

Visual Studio 2005|2008 试用版升级为正式版(WIN7同样有效)。 目录 一、步骤图解 二、win7破解工具下载 三、序列号 一、步骤图解 1.控制面板 > 程序和功能 > Visual Studio 2005|2008 启动、修复程序。如图: 2.填写序列号&#xff0…

NHibernate使用之详细图解

本文档适合初级开发者或者是第一次接触NHibernate框架的朋友,其中NHibernate不是最新的版本,但是一个比较经典的版本 NHibernate 2.1.2,其中用红线标注的部分一定要仔细看,这些都是容易忽略和出错的地方,笔者在此给大家…

disabling directory browsing

2019独角兽企业重金招聘Python工程师标准>>> I have seen several recommendation to increase web application security by disabling directory browsing (for example pg 388 in IBM WebSphere Deployment and Advanced Configuration by Barcia, Hines, et al)…

水印生成器第2版[原图质量水印可自定义设置]

简介:水印生成器,原理很简单,一时在网上没有找到打水印的网站,自己便做了一个,效果如下图,可自定义字体大小、字体类型以及颜色。 开发环境:vs 2010 [net 3.5 WindowsForms应用程序] 本文带给…

服务发现与负载均衡traefik ingress

ingress就是从kubernetes集群外访问集群的入口,将用户的URL请求转发到不同的service上。Ingress相当于nginx、apache等负载均衡方向代理服务器,其中还包括规则定义,即URL的路由信息,路由信息得的刷新由 Ingress controller 提供 …

GentleNet使用之详细图解[语法使用增强版]

目录第一章 开发环境第二章 简介第三章 Gentle.Net-1.5.0 下载文件包介绍第四章 使用步骤第五章 源码下载 第一章、开发环境:Vs 2010 Sql 2005 GentleNet 1.5.0 【Web网站程序 .Net Framework 3.5】第二章、简介:Gentle.Net是一个开源的优秀O/R M…

NBear简介与使用图解

NBear简介与使用图解框架类型:ORM映射框架简介:NBear是一个基于.Net 2.0、C#2.0开放全部源代码的的软件开发框架类库。NBear的设计目标是尽最大努力减少开发人员的工作量,最大程度提升开发效率,同时兼顾性能及可伸缩性。Demo版本&…

搭建私有helm仓库及图形界面

搭建私有helm仓库及图形界面 本篇主要介绍私有 helm 仓库 Chartmuseum 及图形界面 Monocular UI /kubeapps 的搭建 helm chart 能够很好的封装和管理我们的 kubernetes 应用,可以实现中间件、数据库、公共组件等快速发布。 什么场景下我们需要构建一个私有的helm仓…

神啊,6小时30分钟,完成想要的所有Lync测试

神啊 !记住这个日子 !从未想到,6小时30分钟,能做出这么多东西:从:2013-06-28---20:00到2013-06-29-----2:30 (辛苦,也是值得,客户是上帝,公司也好,个人也罢&a…

SubSonic框架使用图解

简介:SubSonic框架是一个优秀的、开源的ORM映射框架,同时提供符合自身需要的代码生成器。 官方下载地址:http://www.subsonic.org/pages/download.jsp 明白了SubSonic是什么之后,下面一起来看SubSonic的使用吧。 开发版本&#…

用户代理de疑惑

2019独角兽企业重金招聘Python工程师标准>>> 在计算机科学中,用户代理(英语:User Agent)指的是代表使用者行为的软件(软件代理程序)所提供的对自己的一个标识符。例如,一个电子邮件阅…

问题“The connection to the server....:6443 was refused - did you specify the right host or port?”的处理!

问题“The connection to the server <master>:6443 was refused - did you specify the right host or port?”的处理&#xff01; 一、故障产生 在不关闭kubernets相关服务的情况下&#xff0c;对kubernets的master节点进行重启。&#xff08;模拟服务器的异常掉电&a…

iBatis for Net 代码生成器(CodeHelper)附下载地址(已经升级为V 1.1)

CodeHelper是一款可以自己定义模板和生成内容的代码生成器&#xff0c;目前只支持MsSql数据库&#xff0c;这款代码生成器的初衷也只是为了生成MyBatis.net框架的配置文件而写的一个轻量级的代码生成器。CodeHelper下载文件包介绍&#xff1a;Template\... 存放模板文件夹&…

在Access中执行SQL语句

Access在小型系统开发中等到了广泛使用。虽然Access提供了可视化的操作方法&#xff0c;但许多开发人员还是喜欢直接用SQL语句操作数据表。如何在Access中打开SQL视图&#xff0c;对于初次使用Access的程序员可得费点时间呢。 1、ACESS2007 &#xff08;1&#xff09;点击“创建…

K8S+Helm 安装 Jupyterhub

准备配置文件 生成随机数 openssl rand -hex 32 # 8fc2826e9ce6930ec26c9fd541c0620b448a947357edbdf9647516af16bbc798配置config.yaml如下&#xff0c;token是上一步生成 proxy:secretToken: "8fc2826e9ce6930ec26c9fd541c0620b448a947357edbdf9647516af16bbc798&quo…