Java基础语法04面向对象上-类-属性-方法-可变参数-重载-递归-对象数组
类
面向对象是一种思想,一般指将事务的属性与方法抽出总结为模板(类/class),处理事务时通过类创建/new出对象由对象的功能/方法去完成所要计算处理的事情。
面向过程:POP:以过程,步骤为主,考虑怎么做
面向对象:OOP:以对象(谁)为主,考虑谁来做,谁能做
类:是一类具有相同特性的事物的抽象描述,是一组相关属性和行为的集合
对象:是一类事物的具体体现。对象是类的一个实例,必然具备该类事物的属性和行为。
属性:事物的状态信息。
行为:事物能够做什么。
[修饰符]class 类名 {//类名首字母大写
//成员变量
//成员方法
}
对象的创建
类名 对象名 = new 类名();
如果两个类都在一个.java源文件中,只能有一个类是public的
类、数组都是引用数据类型,引用数据类型的变量中存储的是对象的地址,或者说指向堆中对象的首地址。Java是对程序员隐藏内存地址的,默认提取的是对象的运行时类型@代表对象唯一编码的hashCode值。
成员变量
类变量:有static修饰,也叫类变量,属于整个类的,不是属于某个实例
实例变量:没有static修饰,也叫对象属性,属于某个对象的,通过对象来使用
【修饰符】 class 类名{
【修饰符】 数据类型 属性名; //属性有默认值
【修饰符】 数据类型 属性名 = 值; //属性有初始值
}
说明:属性的类型可以是Java的任意类型,包括基本数据类型、引用数据类型(类、接口、数组等)
如何在类外面访问成员变量
类变量:
类名.静态成员变量 //推荐
对象名.静态成员变量 //不推荐
实例变量:
对象名.静态成员变量 //只能使用这种方式
成员变量的特点
(1)成员变量有默认值
基本类型 | 整数(byte,short,int,long) | 0 |
---|---|---|
浮点数(float,double) | 0.0 | |
字符(char) | '\u0000' | |
布尔(boolean) | false | |
数据类型 | 默认值 | |
引用类型 | 数组,类,接口 | null |
(2)类变量的值是所有对象共享的,而实例变量的值是每个对象独立的
成员变量的内存图
方法的概念
方法也叫函数,是一个独立功能的定义,是一个类中最基本的功能单元。
把一个功能封装为方法的目的是,可以实现代码重用,从而简少代码量。
方法的使用原则:
(1)必须先声明后使用
类,变量,方法等都要先声明后使用
(2)不调用不执行,调用一次执行一次。
语法格式
【修饰符】 返回值类型 方法名(【参数列表:参数类型1 参数名1,参数类型2 参数名, ...... 】){
方法体;
【return 返回值;】
}
return:
return 结束方法,并将方法的结果返回去,
如果返回值类型不是void,方法体中必须保证一定有return 返回值语句,并且要求该返回值结果的类型与声明的返回值类型一致或兼容。
如果返回值类型为void时,return 后面不用跟返回值,甚至也可以没有return语句。
return语句后面就不能再写其他代码了,否则会报错:Unreachable code
如何在其他类中调用方法
(1)实例方法
对象名.实例方法(【实参列表】) //必须通过对象来访问
(2)类方法
类名.类方法(【实参列表】) //推荐
对象名.类方法(【实参列表】) //不推荐
(1)调用时,需要传“实参”,实参的个数、类型、顺序。顺序要与形参列表一一对应
如果方法没有形参,就不需要也不能传实参。
(2)调用时,如果方法有返回值,可以接受或处理返回值结果,当然也可以不接收,那么此时返回值就丢失了。
如果方法的返回值类型是void,不需要也不能接收和处理返回值结果。
在本类中访问本类的成员变量和成员方法
直接用,不需要加“对象名."和"类名."
唯一例外:静态方法中不能直接访问本类的非静态的成员变量和成员方法
方法调用内存分析
方法的调用
方法不调用不执行,调用一次执行一次,每次调用会在栈中有一个入栈动作,即给当前方法开辟一块独立的内存区域,用于存储当前方法的局部变量的值,当方法执行结束后,会释放该内存,称为出栈,如果方法有返回值,就会把结果返回调用处,如果没有返回值,就直接结束,回到调用处继续执行下一条指令。
栈结构:最先进的最后出
方法的参数传递机制
方法的形参是基本数据类型时,形参值的改变不会影响实参;复制一份数据传递
方法的形参是引用数据类型时,形参地址值的改变不会影响实参,但是形参地址值里面的数据的改变会影响实参。传递的是地址值
成员变量与局部变量的区别
(1)声明的位置不同
成员变量:类中方法外
局部变量:方法中
(2)初始值不同
成员变量:有默认值
局部变量:必须手动初始化
(3)内存存储位置不同
成员变量:
类变量:方法区
实例变量:堆
局部变量:
栈
(4)生命周期
成员变量:
类变量:和类的生命周期相同,该类所有对象共享
实例变量:每一个对象的实例变量的生命周期是独立的,随着对象的创建而创建,随着对象的回收而消失
局部变量:随着方法被调用执行在栈中分配,方法调用结束内存就释放,并且还有作用域问题。
(5)修饰符
成员变量:有很多修饰符,例如:public,private,static等
局部变量:不能有修饰符
可变参数
在JDK1.5之后,如果我们定义一个方法时,此时某个形参的类型可以确定,但是形参的个数不确定,那么我们可以使用可变参数。
格式:
【修饰符】 返回值类型 方法名(【非可变参数部分的形参列表,】参数类型... 形参名){ }
要求:
(1)一个方法最多只能有一个可变参数
(2)如果一个方法包含可变参数,那么可变参数必须是形参列表的最后一个
参数类型... 形参名 相当于 参数类型[] 形参名
因为可变参数实参接收值时就是以数组形式处理的
只是后面这种定义,在调用时必须传递数组,而前者更灵活,既可以传递数组,又可以直接传递数组的元素,这样更灵活了。
方法重载
- 方法重载:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关。
- 参数列表:数据类型个数不同,数据类型不同,数据类型顺序不同。
注意区分方法重写:主要用在子类重写父类的方法,几乎要求返回值类型、方法名、形参列表都相同
注意:(形参类型... 形参名) 与 (形参类型[] 形参名) 不构成重载。即在一个类中创建方法名相同,形参类型相同的数组和可变参数2个方法时编译不通过
通过命令行给main方法的形参传递的实参称为命令行参数
java 运行的类名 参数1 参数2 参数n //中间用空格分开
递归
递归分为两种,直接递归和间接递归
注意事项:
- 递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。
- 在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。
对象数组
数组的元素可以是基本数据类型,也可以是引用数据类型。当元素是引用数据类型是,我们称为对象数组。
注意:
对象数组,首先要创建数组对象本身,即确定数组的长度,然后再创建每一个元素对象,如果不创建,数组的元素的默值就是
null,所以很容易出现空指针异常NullPointerException。
对象数组的内存图
Java基础语法04面向对象上-类-属性-方法-可变参数-重载-递归-对象数组的更多相关文章
- Java基础语法(9)-面向对象之类的成员
title: Java基础语法(9)-面向对象之类的成员 blog: CSDN data: Java学习路线及视频 1.面向对象特征--封装 为什么需要封装?封装的作用和含义? 我要用洗衣机,只需要按 ...
- Java基础语法(11)-面向对象之关键字
title: Java基础语法(11)-面向对象之关键字 blog: CSDN data: Java学习路线及视频 1.this this是什么 它在方法内部使用,即这个方法所属对象的引用: clas ...
- Java基础语法(10)-面向对象之三大特征
title: Java基础语法(9)-面向对象之类的成员 blog: CSDN data: Java学习路线及视频 1.面向对象特征--封装 为什么需要封装?封装的作用和含义? 我要用洗衣机,只需要按 ...
- 038 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 05 案例演示switch结构-星期的表示案例以及总结
038 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 05 案例演示switch结构-星期的表示案例以及总结 本文知识点:案例演示switch结构并对sw ...
- 037 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 04 switch结构
037 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 04 switch结构 本文知识点:Java中的switch结构 选择结构分类 选择结构只有如下2种 ...
- 036 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 03 嵌套if结构
036 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 03 嵌套if结构 本文知识点:Java中的嵌套if结构 什么是嵌套if结构? 概念: 嵌套if结构 ...
- 035 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 02 多重if结构
035 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 02 多重if结构 本文知识点:Java中的多重if结构 选择结构回顾 if选择结构 注意: 1.条 ...
- 034 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 01 流程控制概述
034 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 01 流程控制概述 本文知识点:Java中的流程控制相关概念的认识 三大流程控制语句结构的简介 顺序 ...
- 大数据学习--day07(冒泡排序、Arrays工具类、方法可变参数)
冒泡排序.Arrays工具类.方法可变参数 冒泡排序之前写过,略 Arrays工具类 二分法查询 public static int binarySearch(int[] a,int key) 头信息 ...
随机推荐
- 安装PHP5和PHP7
5月25日任务 课程内容: 11.10/11.11/11.12 安装PHP511.13 安装PHP7php中mysql,mysqli,mysqlnd,pdo到底是什么http://blog.csdn. ...
- 在Windows系统中构建还原ASP.NET Core 源码
大家好,这几天试着从Github上拉取AspNetCore的源码,尝试着通过Visual Studio 打开,但是并不尽人意.我们需要去构建我们拉去的源代码,这样才可以通过VisualStudio可还 ...
- 腾讯iphone面试题(转)
1Objective-C内部的实现 2CALayer和View的关系 3 http协议,tcp/ip 4 UITableView的那些元素是可以自定义的? 5 c语言的,定义变量,比如int,在什么情 ...
- PHP计算两组经纬度坐标之间的距离
定义π define('PI',3.1415926535898); define('EARTH_RADIUS',6378.137); 计算两组经纬度坐标 之间的距离 /** * 计算两组经纬度坐标 之 ...
- obs命令行工具obsutil的使用测试
test1 批量复制,目标文件夹ggggg-zyx0809/data/tmp/a0文件夹已存在,不使用flat命令,目标路径包含a0文件夹 操作 从ggggg-zyx0809/data/g_cageg ...
- 深入理解 BigDecimal
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
- 洛谷 P3420 [POI2005]SKA-Piggy Banks 题解
蒟蒻的第二篇题解 嗯,直接进入正题 先告诉你们这是并查集,好吧,标签上面有,再来分析这为什么是并查集. 根据题意: 每一个存钱罐能够用相应的钥匙打开或者被砸开,Byteazar已经将钥匙放入到一些存钱 ...
- luogu P3913 车的攻击 |数学
题目描述 N×N 的国际象棋棋盘上有KK 个车,第ii个车位于第R_i行,第C_i列.求至少被一个车攻击的格子数量. 车可以攻击所有同一行或者同一列的地方. 输入格式 第1 行,2 个整数N,K. 接 ...
- git 使用详解(3)—— 最基本命令 + .gitignore 文件
Git 基础 本章将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到的也就是这几个命令.读完本章,你就能初始化一个新的代码仓库,做一些适当配置:开始或停止跟踪某些文件:暂存或提交某 ...
- Spring Boot Validation,既有注解不满足,我是怎么暴力扩展validation注解的
前言 昨天,我开发的代码,又收获了一个bug,说是界面上列表查询时,正常情况下,可以根据某个关键字keyword模糊查询,后台会去数据库 %keyword%查询(非互联网项目,没有使用es,只能这样了 ...